/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |* Op Definitions *| |* *| |* Automatically generated file, do not edit! *| |* From: ROCDLOps.td *| |* *| \*===----------------------------------------------------------------------===*/ #ifdef GET_OP_LIST #undef GET_OP_LIST ::mlir::ROCDL::ROCDLCos, ::mlir::ROCDL::ROCDLExp, ::mlir::ROCDL::ROCDLExp2, ::mlir::ROCDL::ROCDLLog, ::mlir::ROCDL::ROCDLRcp, ::mlir::ROCDL::ROCDLRsq, ::mlir::ROCDL::ROCDLSin, ::mlir::ROCDL::ROCDLSqrt, ::mlir::ROCDL::ROCDLTanh, ::mlir::ROCDL::AsyncmarkOp, ::mlir::ROCDL::BallotOp, ::mlir::ROCDL::BarrierInitOp, ::mlir::ROCDL::BarrierJoinOp, ::mlir::ROCDL::BarrierLeaveOp, ::mlir::ROCDL::BarrierOp, ::mlir::ROCDL::BarrierSignalIsfirstOp, ::mlir::ROCDL::BarrierSignalOp, ::mlir::ROCDL::BarrierSignalVarOp, ::mlir::ROCDL::BarrierWaitOp, ::mlir::ROCDL::BlockIdXOp, ::mlir::ROCDL::BlockIdYOp, ::mlir::ROCDL::BlockIdZOp, ::mlir::ROCDL::ClusterIdXOp, ::mlir::ROCDL::ClusterIdYOp, ::mlir::ROCDL::ClusterIdZOp, ::mlir::ROCDL::ClusterLoadAsyncToLDSB128Op, ::mlir::ROCDL::ClusterLoadAsyncToLDSB32Op, ::mlir::ROCDL::ClusterLoadAsyncToLDSB64Op, ::mlir::ROCDL::ClusterLoadAsyncToLDSB8Op, ::mlir::ROCDL::ClusterWorkgroupIdXOp, ::mlir::ROCDL::ClusterWorkgroupIdYOp, ::mlir::ROCDL::ClusterWorkgroupIdZOp, ::mlir::ROCDL::CvtF32Bf8Op, ::mlir::ROCDL::CvtF32Fp8Op, ::mlir::ROCDL::CvtPkBf8F32Op, ::mlir::ROCDL::CvtPkF32Bf8Op, ::mlir::ROCDL::CvtPkF32Fp8Op, ::mlir::ROCDL::CvtPkFp8F32Op, ::mlir::ROCDL::CvtPkRtz, ::mlir::ROCDL::CvtPkScalePk16Bf16Bf6Op, ::mlir::ROCDL::CvtPkScalePk16Bf16Fp6Op, ::mlir::ROCDL::CvtPkScalePk16F16Bf6Op, ::mlir::ROCDL::CvtPkScalePk16F16Fp6Op, ::mlir::ROCDL::CvtPkScalePk16F32Bf6Op, ::mlir::ROCDL::CvtPkScalePk16F32Fp6Op, ::mlir::ROCDL::CvtPkScalePk8Bf16Bf8Op, ::mlir::ROCDL::CvtPkScalePk8Bf16Fp4Op, ::mlir::ROCDL::CvtPkScalePk8Bf16Fp8Op, ::mlir::ROCDL::CvtPkScalePk8F16Bf8Op, ::mlir::ROCDL::CvtPkScalePk8F16Fp4Op, ::mlir::ROCDL::CvtPkScalePk8F16Fp8Op, ::mlir::ROCDL::CvtPkScalePk8F32Bf8Op, ::mlir::ROCDL::CvtPkScalePk8F32Fp4Op, ::mlir::ROCDL::CvtPkScalePk8F32Fp8Op, ::mlir::ROCDL::CvtScaleF322xPk16Bf6F32Op, ::mlir::ROCDL::CvtScaleF322xPk16Fp6F32Op, ::mlir::ROCDL::CvtScaleF32F16Bf8Op, ::mlir::ROCDL::CvtScaleF32F16Fp8Op, ::mlir::ROCDL::CvtScaleF32F32Bf8Op, ::mlir::ROCDL::CvtScaleF32F32Fp8Op, ::mlir::ROCDL::CvtScaleF32Pk16Bf6Bf16Op, ::mlir::ROCDL::CvtScaleF32Pk16Bf6F16Op, ::mlir::ROCDL::CvtScaleF32Pk16Bf6F32Op, ::mlir::ROCDL::CvtScaleF32Pk16Fp6Bf16Op, ::mlir::ROCDL::CvtScaleF32Pk16Fp6F16Op, ::mlir::ROCDL::CvtScaleF32Pk16Fp6F32Op, ::mlir::ROCDL::CvtScaleF32Pk32Bf16Bf6Op, ::mlir::ROCDL::CvtScaleF32Pk32Bf16Fp6Op, ::mlir::ROCDL::CvtScaleF32Pk32Bf6Bf16Op, ::mlir::ROCDL::CvtScaleF32Pk32Bf6F16Op, ::mlir::ROCDL::CvtScaleF32Pk32F16Bf6Op, ::mlir::ROCDL::CvtScaleF32Pk32F16Fp6Op, ::mlir::ROCDL::CvtScaleF32Pk32F32Bf6Op, ::mlir::ROCDL::CvtScaleF32Pk32F32Fp6Op, ::mlir::ROCDL::CvtScaleF32Pk32Fp6Bf16Op, ::mlir::ROCDL::CvtScaleF32Pk32Fp6F16Op, ::mlir::ROCDL::CvtScaleF32Pk8Bf8Bf16Op, ::mlir::ROCDL::CvtScaleF32Pk8Bf8F16Op, ::mlir::ROCDL::CvtScaleF32Pk8Bf8F32Op, ::mlir::ROCDL::CvtScaleF32Pk8Fp4Bf16Op, ::mlir::ROCDL::CvtScaleF32Pk8Fp4F16Op, ::mlir::ROCDL::CvtScaleF32Pk8Fp4F32Op, ::mlir::ROCDL::CvtScaleF32Pk8Fp8Bf16Op, ::mlir::ROCDL::CvtScaleF32Pk8Fp8F16Op, ::mlir::ROCDL::CvtScaleF32Pk8Fp8F32Op, ::mlir::ROCDL::CvtScaleF32PkBf16Bf8Op, ::mlir::ROCDL::CvtScaleF32PkBf16Fp4Op, ::mlir::ROCDL::CvtScaleF32PkBf16Fp8Op, ::mlir::ROCDL::CvtScaleF32PkBf8Bf16Op, ::mlir::ROCDL::CvtScaleF32PkBf8F16Op, ::mlir::ROCDL::CvtScaleF32PkBf8F32Op, ::mlir::ROCDL::CvtScaleF32PkF16Bf8Op, ::mlir::ROCDL::CvtScaleF32PkF16Fp4Op, ::mlir::ROCDL::CvtScaleF32PkF16Fp8Op, ::mlir::ROCDL::CvtScaleF32PkF32Bf8Op, ::mlir::ROCDL::CvtScaleF32PkF32Fp4Op, ::mlir::ROCDL::CvtScaleF32PkF32Fp8Op, ::mlir::ROCDL::CvtScaleF32PkFp4Bf16Op, ::mlir::ROCDL::CvtScaleF32PkFp4F16Op, ::mlir::ROCDL::CvtScaleF32PkFp4F32Op, ::mlir::ROCDL::CvtScaleF32PkFp8Bf16Op, ::mlir::ROCDL::CvtScaleF32PkFp8F16Op, ::mlir::ROCDL::CvtScaleF32PkFp8F32Op, ::mlir::ROCDL::CvtScaleF32SrBf8BF16Op, ::mlir::ROCDL::CvtScaleF32SrBf8F16Op, ::mlir::ROCDL::CvtScaleF32SrBf8F32Op, ::mlir::ROCDL::CvtScaleF32SrFp8BF16Op, ::mlir::ROCDL::CvtScaleF32SrFp8F16Op, ::mlir::ROCDL::CvtScaleF32SrFp8F32Op, ::mlir::ROCDL::CvtScaleF32SrPk16Bf6Bf16Op, ::mlir::ROCDL::CvtScaleF32SrPk16Bf6F16Op, ::mlir::ROCDL::CvtScaleF32SrPk16Bf6F32Op, ::mlir::ROCDL::CvtScaleF32SrPk16Fp6Bf16Op, ::mlir::ROCDL::CvtScaleF32SrPk16Fp6F16Op, ::mlir::ROCDL::CvtScaleF32SrPk16Fp6F32Op, ::mlir::ROCDL::CvtScaleF32SrPk32Bf6Bf16Op, ::mlir::ROCDL::CvtScaleF32SrPk32Bf6F16Op, ::mlir::ROCDL::CvtScaleF32SrPk32Bf6F32Op, ::mlir::ROCDL::CvtScaleF32SrPk32Fp6Bf16Op, ::mlir::ROCDL::CvtScaleF32SrPk32Fp6F16Op, ::mlir::ROCDL::CvtScaleF32SrPk32Fp6F32Op, ::mlir::ROCDL::CvtScaleF32SrPk8Bf8Bf16Op, ::mlir::ROCDL::CvtScaleF32SrPk8Bf8F16Op, ::mlir::ROCDL::CvtScaleF32SrPk8Bf8F32Op, ::mlir::ROCDL::CvtScaleF32SrPk8Fp4Bf16Op, ::mlir::ROCDL::CvtScaleF32SrPk8Fp4F16Op, ::mlir::ROCDL::CvtScaleF32SrPk8Fp4F32Op, ::mlir::ROCDL::CvtScaleF32SrPk8Fp8Bf16Op, ::mlir::ROCDL::CvtScaleF32SrPk8Fp8F16Op, ::mlir::ROCDL::CvtScaleF32SrPk8Fp8F32Op, ::mlir::ROCDL::CvtScaleF32SrPkFp4Bf16Op, ::mlir::ROCDL::CvtScaleF32SrPkFp4F16Op, ::mlir::ROCDL::CvtScaleF32SrPkFp4F32Op, ::mlir::ROCDL::CvtSrBf8F32Op, ::mlir::ROCDL::CvtSrFp8F32Op, ::mlir::ROCDL::DPPUpdateOp, ::mlir::ROCDL::DsAtomicAsyncBarrierArriveOp, ::mlir::ROCDL::DsAtomicBarrierArriveRtnOp, ::mlir::ROCDL::DsBpermuteOp, ::mlir::ROCDL::DsLoadTr16_B128, ::mlir::ROCDL::DsLoadTr4_B64, ::mlir::ROCDL::DsLoadTr6_B96, ::mlir::ROCDL::DsLoadTr8_B64, ::mlir::ROCDL::DsSwizzleOp, ::mlir::ROCDL::FMed3Op, ::mlir::ROCDL::FlatPrefetchOp, ::mlir::ROCDL::GetBarrierStateOp, ::mlir::ROCDL::GetNamedBarrierStateOp, ::mlir::ROCDL::GlobalLoadAsyncLDSOp, ::mlir::ROCDL::GlobalLoadAsyncToLDSB128Op, ::mlir::ROCDL::GlobalLoadAsyncToLDSB32Op, ::mlir::ROCDL::GlobalLoadAsyncToLDSB64Op, ::mlir::ROCDL::GlobalLoadAsyncToLDSB8Op, ::mlir::ROCDL::GlobalLoadLDSOp, ::mlir::ROCDL::GlobalLoadTr4_B64, ::mlir::ROCDL::GlobalLoadTr6_B96, ::mlir::ROCDL::GlobalLoadTr8_B128, ::mlir::ROCDL::GlobalLoadTr8_B64, ::mlir::ROCDL::GlobalPrefetchOp, ::mlir::ROCDL::GlobalStoreAsyncFromLDSB128Op, ::mlir::ROCDL::GlobalStoreAsyncFromLDSB32Op, ::mlir::ROCDL::GlobalStoreAsyncFromLDSB64Op, ::mlir::ROCDL::GlobalStoreAsyncFromLDSB8Op, ::mlir::ROCDL::IglpOpt, ::mlir::ROCDL::LoadAsyncToLDSOp, ::mlir::ROCDL::LoadToLDSOp, ::mlir::ROCDL::MakeBufferRsrcOp, ::mlir::ROCDL::MbcntHiOp, ::mlir::ROCDL::MbcntLoOp, ::mlir::ROCDL::Permlane16SwapOp, ::mlir::ROCDL::Permlane16VarOp, ::mlir::ROCDL::Permlane32SwapOp, ::mlir::ROCDL::PermlaneX16Op, ::mlir::ROCDL::PermlaneX16VarOp, ::mlir::ROCDL::RawBufferAtomicCmpSwap, ::mlir::ROCDL::RawBufferAtomicFAddOp, ::mlir::ROCDL::RawBufferAtomicFMaxOp, ::mlir::ROCDL::RawBufferAtomicSMaxOp, ::mlir::ROCDL::RawBufferAtomicUMinOp, ::mlir::ROCDL::RawBufferLoadOp, ::mlir::ROCDL::RawBufferStoreOp, ::mlir::ROCDL::RawPtrBufferAtomicCmpSwap, ::mlir::ROCDL::RawPtrBufferAtomicFaddOp, ::mlir::ROCDL::RawPtrBufferAtomicFmaxOp, ::mlir::ROCDL::RawPtrBufferAtomicSmaxOp, ::mlir::ROCDL::RawPtrBufferAtomicUminOp, ::mlir::ROCDL::RawPtrBufferLoadAsyncLdsOp, ::mlir::ROCDL::RawPtrBufferLoadLdsOp, ::mlir::ROCDL::RawPtrBufferLoadOp, ::mlir::ROCDL::RawPtrBufferStoreOp, ::mlir::ROCDL::ReadfirstlaneOp, ::mlir::ROCDL::ReadlaneOp, ::mlir::ROCDL::SBarrierOp, ::mlir::ROCDL::SNopOp, ::mlir::ROCDL::SSleepOp, ::mlir::ROCDL::SWaitcntOp, ::mlir::ROCDL::SchedBarrier, ::mlir::ROCDL::SchedGroupBarrier, ::mlir::ROCDL::SetPrioOp, ::mlir::ROCDL::TensorLoadToLDSOp, ::mlir::ROCDL::TensorStoreFromLDSOp, ::mlir::ROCDL::ThreadIdXOp, ::mlir::ROCDL::ThreadIdYOp, ::mlir::ROCDL::ThreadIdZOp, ::mlir::ROCDL::WaitAsynccntOp, ::mlir::ROCDL::WaitAsyncmarkOp, ::mlir::ROCDL::WaitDscntOp, ::mlir::ROCDL::WaitExpcntOp, ::mlir::ROCDL::WaitLoadcntOp, ::mlir::ROCDL::WaitStorecntOp, ::mlir::ROCDL::WaitTensorcntOp, ::mlir::ROCDL::WakeupBarrierOp, ::mlir::ROCDL::WaveBarrierOp, ::mlir::ROCDL::WaveId, ::mlir::ROCDL::WavefrontSizeOp, ::mlir::ROCDL::dot4_f32_bf8_bf8, ::mlir::ROCDL::dot4_f32_bf8_fp8, ::mlir::ROCDL::dot4_f32_fp8_bf8, ::mlir::ROCDL::dot4_f32_fp8_fp8, ::mlir::ROCDL::ds_read_tr16_b64, ::mlir::ROCDL::ds_read_tr4_b64, ::mlir::ROCDL::ds_read_tr6_b96, ::mlir::ROCDL::ds_read_tr8_b64, ::mlir::ROCDL::fdot2, ::mlir::ROCDL::fdot2_bf16_bf16, ::mlir::ROCDL::fdot2_f16_f16, ::mlir::ROCDL::fdot2_f32_bf16, ::mlir::ROCDL::mfma_f32_16x16x16bf16_1k, ::mlir::ROCDL::mfma_f32_16x16x16f16, ::mlir::ROCDL::mfma_f32_16x16x1f32, ::mlir::ROCDL::mfma_f32_16x16x2bf16, ::mlir::ROCDL::mfma_f32_16x16x32_bf16, ::mlir::ROCDL::mfma_f32_16x16x32_bf8_bf8, ::mlir::ROCDL::mfma_f32_16x16x32_bf8_fp8, ::mlir::ROCDL::mfma_f32_16x16x32_f16, ::mlir::ROCDL::mfma_f32_16x16x32_fp8_bf8, ::mlir::ROCDL::mfma_f32_16x16x32_fp8_fp8, ::mlir::ROCDL::mfma_f32_16x16x4bf16_1k, ::mlir::ROCDL::mfma_f32_16x16x4f16, ::mlir::ROCDL::mfma_f32_16x16x4f32, ::mlir::ROCDL::mfma_f32_16x16x8_xf32, ::mlir::ROCDL::mfma_f32_16x16x8bf16, ::mlir::ROCDL::mfma_f32_32x32x16_bf16, ::mlir::ROCDL::mfma_f32_32x32x16_bf8_bf8, ::mlir::ROCDL::mfma_f32_32x32x16_bf8_fp8, ::mlir::ROCDL::mfma_f32_32x32x16_f16, ::mlir::ROCDL::mfma_f32_32x32x16_fp8_bf8, ::mlir::ROCDL::mfma_f32_32x32x16_fp8_fp8, ::mlir::ROCDL::mfma_f32_32x32x1f32, ::mlir::ROCDL::mfma_f32_32x32x2bf16, ::mlir::ROCDL::mfma_f32_32x32x2f32, ::mlir::ROCDL::mfma_f32_32x32x4_xf32, ::mlir::ROCDL::mfma_f32_32x32x4bf16, ::mlir::ROCDL::mfma_f32_32x32x4bf16_1k, ::mlir::ROCDL::mfma_f32_32x32x4f16, ::mlir::ROCDL::mfma_f32_32x32x8bf16_1k, ::mlir::ROCDL::mfma_f32_32x32x8f16, ::mlir::ROCDL::mfma_f32_4x4x1f32, ::mlir::ROCDL::mfma_f32_4x4x2bf16, ::mlir::ROCDL::mfma_f32_4x4x4bf16_1k, ::mlir::ROCDL::mfma_f32_4x4x4f16, ::mlir::ROCDL::mfma_f64_16x16x4f64, ::mlir::ROCDL::mfma_f64_4x4x4f64, ::mlir::ROCDL::mfma_i32_16x16x16i8, ::mlir::ROCDL::mfma_i32_16x16x32_i8, ::mlir::ROCDL::mfma_i32_16x16x4i8, ::mlir::ROCDL::mfma_i32_16x16x64_i8, ::mlir::ROCDL::mfma_i32_32x32x16_i8, ::mlir::ROCDL::mfma_i32_32x32x32_i8, ::mlir::ROCDL::mfma_i32_32x32x4i8, ::mlir::ROCDL::mfma_i32_32x32x8i8, ::mlir::ROCDL::mfma_i32_4x4x4i8, ::mlir::ROCDL::mfma_scale_f32_16x16x128_f8f6f4, ::mlir::ROCDL::mfma_scale_f32_32x32x64_f8f6f4, ::mlir::ROCDL::sdot2, ::mlir::ROCDL::sdot4, ::mlir::ROCDL::sdot8, ::mlir::ROCDL::smfmac_f32_16x16x128_bf8_bf8, ::mlir::ROCDL::smfmac_f32_16x16x128_bf8_fp8, ::mlir::ROCDL::smfmac_f32_16x16x128_fp8_bf8, ::mlir::ROCDL::smfmac_f32_16x16x128_fp8_fp8, ::mlir::ROCDL::smfmac_f32_16x16x32_bf16, ::mlir::ROCDL::smfmac_f32_16x16x32_f16, ::mlir::ROCDL::smfmac_f32_16x16x64_bf16, ::mlir::ROCDL::smfmac_f32_16x16x64_bf8_bf8, ::mlir::ROCDL::smfmac_f32_16x16x64_bf8_fp8, ::mlir::ROCDL::smfmac_f32_16x16x64_f16, ::mlir::ROCDL::smfmac_f32_16x16x64_fp8_bf8, ::mlir::ROCDL::smfmac_f32_16x16x64_fp8_fp8, ::mlir::ROCDL::smfmac_f32_32x32x16_bf16, ::mlir::ROCDL::smfmac_f32_32x32x16_f16, ::mlir::ROCDL::smfmac_f32_32x32x32_bf16, ::mlir::ROCDL::smfmac_f32_32x32x32_bf8_bf8, ::mlir::ROCDL::smfmac_f32_32x32x32_bf8_fp8, ::mlir::ROCDL::smfmac_f32_32x32x32_f16, ::mlir::ROCDL::smfmac_f32_32x32x32_fp8_bf8, ::mlir::ROCDL::smfmac_f32_32x32x32_fp8_fp8, ::mlir::ROCDL::smfmac_f32_32x32x64_bf8_bf8, ::mlir::ROCDL::smfmac_f32_32x32x64_bf8_fp8, ::mlir::ROCDL::smfmac_f32_32x32x64_fp8_bf8, ::mlir::ROCDL::smfmac_f32_32x32x64_fp8_fp8, ::mlir::ROCDL::smfmac_i32_16x16x128_i8, ::mlir::ROCDL::smfmac_i32_16x16x64_i8, ::mlir::ROCDL::smfmac_i32_32x32x32_i8, ::mlir::ROCDL::smfmac_i32_32x32x64_i8, ::mlir::ROCDL::sudot4, ::mlir::ROCDL::sudot8, ::mlir::ROCDL::swmmac_bf16_16x16x32_bf16, ::mlir::ROCDL::swmmac_bf16_16x16x64_bf16, ::mlir::ROCDL::swmmac_bf16f32_16x16x64_bf16, ::mlir::ROCDL::swmmac_f16_16x16x128_bf8_bf8, ::mlir::ROCDL::swmmac_f16_16x16x128_bf8_fp8, ::mlir::ROCDL::swmmac_f16_16x16x128_fp8_bf8, ::mlir::ROCDL::swmmac_f16_16x16x128_fp8_fp8, ::mlir::ROCDL::swmmac_f16_16x16x32_f16, ::mlir::ROCDL::swmmac_f16_16x16x64_f16, ::mlir::ROCDL::swmmac_f32_16x16x128_bf8_bf8, ::mlir::ROCDL::swmmac_f32_16x16x128_bf8_fp8, ::mlir::ROCDL::swmmac_f32_16x16x128_fp8_bf8, ::mlir::ROCDL::swmmac_f32_16x16x128_fp8_fp8, ::mlir::ROCDL::swmmac_f32_16x16x32_bf16, ::mlir::ROCDL::swmmac_f32_16x16x32_bf8_bf8, ::mlir::ROCDL::swmmac_f32_16x16x32_bf8_fp8, ::mlir::ROCDL::swmmac_f32_16x16x32_f16, ::mlir::ROCDL::swmmac_f32_16x16x32_fp8_bf8, ::mlir::ROCDL::swmmac_f32_16x16x32_fp8_fp8, ::mlir::ROCDL::swmmac_f32_16x16x64_bf16, ::mlir::ROCDL::swmmac_f32_16x16x64_f16, ::mlir::ROCDL::swmmac_i32_16x16x128_iu8, ::mlir::ROCDL::swmmac_i32_16x16x32_iu4, ::mlir::ROCDL::swmmac_i32_16x16x32_iu8, ::mlir::ROCDL::swmmac_i32_16x16x64_iu4, ::mlir::ROCDL::udot2, ::mlir::ROCDL::udot4, ::mlir::ROCDL::udot8, ::mlir::ROCDL::wmma_bf16_16x16x16_bf16, ::mlir::ROCDL::wmma_bf16_16x16x32_bf16, ::mlir::ROCDL::wmma_bf16f32_16x16x32_bf16, ::mlir::ROCDL::wmma_f16_16x16x128_bf8_bf8, ::mlir::ROCDL::wmma_f16_16x16x128_bf8_fp8, ::mlir::ROCDL::wmma_f16_16x16x128_fp8_bf8, ::mlir::ROCDL::wmma_f16_16x16x128_fp8_fp8, ::mlir::ROCDL::wmma_f16_16x16x16_f16, ::mlir::ROCDL::wmma_f16_16x16x32_f16, ::mlir::ROCDL::wmma_f16_16x16x64_bf8_bf8, ::mlir::ROCDL::wmma_f16_16x16x64_bf8_fp8, ::mlir::ROCDL::wmma_f16_16x16x64_fp8_bf8, ::mlir::ROCDL::wmma_f16_16x16x64_fp8_fp8, ::mlir::ROCDL::wmma_f32_16x16x128_bf8_bf8, ::mlir::ROCDL::wmma_f32_16x16x128_bf8_fp8, ::mlir::ROCDL::wmma_f32_16x16x128_fp8_bf8, ::mlir::ROCDL::wmma_f32_16x16x128_fp8_fp8, ::mlir::ROCDL::wmma_f32_16x16x16_bf16, ::mlir::ROCDL::wmma_f32_16x16x16_bf8_bf8, ::mlir::ROCDL::wmma_f32_16x16x16_bf8_fp8, ::mlir::ROCDL::wmma_f32_16x16x16_f16, ::mlir::ROCDL::wmma_f32_16x16x16_fp8_bf8, ::mlir::ROCDL::wmma_f32_16x16x16_fp8_fp8, ::mlir::ROCDL::wmma_f32_16x16x32_bf16, ::mlir::ROCDL::wmma_f32_16x16x32_f16, ::mlir::ROCDL::wmma_f32_16x16x4_f32, ::mlir::ROCDL::wmma_f32_16x16x64_bf8_bf8, ::mlir::ROCDL::wmma_f32_16x16x64_bf8_fp8, ::mlir::ROCDL::wmma_f32_16x16x64_fp8_bf8, ::mlir::ROCDL::wmma_f32_16x16x64_fp8_fp8, ::mlir::ROCDL::wmma_i32_16x16x16_iu4, ::mlir::ROCDL::wmma_i32_16x16x16_iu8, ::mlir::ROCDL::wmma_i32_16x16x32_iu4, ::mlir::ROCDL::wmma_i32_16x16x64_iu8, ::mlir::ROCDL::wmma_scale16_f32_16x16x128_f8f6f4, ::mlir::ROCDL::wmma_scale16_f32_32x16x128_f4, ::mlir::ROCDL::wmma_scale_f32_16x16x128_f8f6f4, ::mlir::ROCDL::wmma_scale_f32_32x16x128_f4 #endif // GET_OP_LIST #ifdef GET_OP_CLASSES #undef GET_OP_CLASSES //===----------------------------------------------------------------------===// // Local Utility Method Definitions //===----------------------------------------------------------------------===// static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps1( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((::mlir::LLVM::isCompatibleFloatingPointType(type)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be floating point LLVM type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps2( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((type.isSignlessInteger(1)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 1-bit signless integer, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps3( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((::mlir::LLVM::isCompatibleOuterType(type)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM dialect-compatible type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps4( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::llvm::isa<::mlir::LLVM::LLVMPointerType>(type))) && ((::llvm::cast<::mlir::LLVM::LLVMPointerType>(type).getAddressSpace() == 3)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM pointer in address space 3, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps5( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::llvm::isa<::mlir::LLVM::LLVMPointerType>(type))) && ((::llvm::cast<::mlir::LLVM::LLVMPointerType>(type).getAddressSpace() == 1)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM pointer in address space 1, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps6( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((type.isSignlessInteger(32)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 32-bit signless integer, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps7( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((type.isF32()))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 32-bit float, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps8( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(32)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 3))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit signless integer values of length 3, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps9( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (::llvm::isa<::mlir::BFloat16Type>(elementType)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 16))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of bfloat16 type values of length 16, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps10( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF16()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 16))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 16-bit float values of length 16, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps11( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF32()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 16))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit float values of length 16, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps12( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(32)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 2))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit signless integer values of length 2, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps13( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (::llvm::isa<::mlir::BFloat16Type>(elementType)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 8))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of bfloat16 type values of length 8, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps14( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF16()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 8))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 16-bit float values of length 8, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps15( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF32()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 8))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit float values of length 8, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps16( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(32)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 6))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit signless integer values of length 6, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps17( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF16()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 2))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 16-bit float values of length 2, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps18( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (::llvm::isa<::mlir::BFloat16Type>(elementType)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 32))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of bfloat16 type values of length 32, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps19( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF16()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 32))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 16-bit float values of length 32, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps20( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF32()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 32))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit float values of length 32, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps21( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (::llvm::isa<::mlir::BFloat16Type>(elementType)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 2))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of bfloat16 type values of length 2, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps22( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(16)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 2))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 16-bit signless integer values of length 2, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps23( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF32()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 2))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit float values of length 2, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps24( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((::llvm::isa<::mlir::BFloat16Type>(type)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be bfloat16 type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps25( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((type.isF16()))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 16-bit float, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps26( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((type.isSignlessInteger(64)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 64-bit signless integer, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps27( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::mlir::LLVM::isCompatibleFloatingPointType(type))) || (((::mlir::LLVM::isCompatibleVectorType(type))) && ((::mlir::LLVM::isCompatibleFloatingPointType(::llvm::cast<::mlir::VectorType>(type).getElementType())))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be floating point LLVM type or LLVM dialect-compatible vector of floating point LLVM type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps28( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::llvm::isa<::mlir::LLVM::LLVMPointerType>(type))) && ((::llvm::cast<::mlir::LLVM::LLVMPointerType>(type).getAddressSpace() == 0)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM pointer in address space 0, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps29( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((::llvm::isa<::mlir::LLVM::LLVMPointerType>(type)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM pointer type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps30( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((type.isSignlessInteger(16)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 16-bit signless integer, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps31( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::llvm::isa<::mlir::LLVM::LLVMStructType>(type))) && ((::llvm::cast<::mlir::LLVM::LLVMStructType>(type).getBody()[0].isSignlessInteger(32))) && ((::llvm::cast<::mlir::LLVM::LLVMStructType>(type).getBody()[1].isSignlessInteger(32))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM dialect-compatible struct of 32-bit signless integerand32-bit signless integer, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps32( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(32)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 4))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit signless integer values of length 4, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps33( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::llvm::isa<::mlir::LLVM::LLVMPointerType>(type))) && ((::llvm::cast<::mlir::LLVM::LLVMPointerType>(type).getAddressSpace() == 8)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM pointer in address space 8, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps34( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(32)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 8))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit signless integer values of length 8, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps35( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(16)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 4))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 16-bit signless integer values of length 4, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps36( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF32()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 4))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit float values of length 4, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps37( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF16()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 4))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 16-bit float values of length 4, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps38( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((type.isF64()))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 64-bit float, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps39( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isF64()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 4))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 64-bit float values of length 4, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps40( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(32)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 16))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit signless integer values of length 16, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps41( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(32)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 32))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 32-bit signless integer values of length 32, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps42( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::mlir::LLVM::isCompatibleVectorType(type))) && ((::llvm::cast<::mlir::VectorType>(type).getElementType().isSignlessInteger(32))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM dialect-compatible vector of 32-bit signless integer, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps43( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::mlir::LLVM::isCompatibleVectorType(type))) && ((::llvm::cast<::mlir::VectorType>(type).getElementType().isF32())))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM dialect-compatible vector of 32-bit float, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps44( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((type.isF32())) || (((::mlir::LLVM::isCompatibleVectorType(type))) && ((::llvm::cast<::mlir::VectorType>(type).getElementType().isF32()))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 32-bit float or LLVM dialect-compatible vector of 32-bit float, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps45( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((::llvm::isa<::mlir::FixedVectorType>(type))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(16)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) && (((::llvm::isa<::mlir::FixedVectorType>(type))) && ((::llvm::cast<::mlir::VectorType>(type).getNumElements() == 8))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be fixed-length vector of 16-bit signless integer values of length 8, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps46( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::mlir::LLVM::isCompatibleVectorType(type))) && ((::llvm::isa<::mlir::IntegerType>(::llvm::cast<::mlir::VectorType>(type).getElementType()))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM dialect-compatible vector of integer, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps47( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::llvm::isa<::mlir::BFloat16Type>(type))) || (((::mlir::LLVM::isCompatibleVectorType(type))) && ((::llvm::isa<::mlir::BFloat16Type>(::llvm::cast<::mlir::VectorType>(type).getElementType())))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be bfloat16 type or LLVM dialect-compatible vector of bfloat16 type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps48( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::llvm::isa<::mlir::IntegerType>(type))) || (((::mlir::LLVM::isCompatibleVectorType(type))) && ((::llvm::isa<::mlir::IntegerType>(::llvm::cast<::mlir::VectorType>(type).getElementType())))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be integer or LLVM dialect-compatible vector of integer, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps49( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((type.isF16())) || (((::mlir::LLVM::isCompatibleVectorType(type))) && ((::llvm::cast<::mlir::VectorType>(type).getElementType().isF16()))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be 16-bit float or LLVM dialect-compatible vector of 16-bit float, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_ROCDLOps50( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((::mlir::LLVM::isCompatibleVectorType(type))) && ((::llvm::cast<::mlir::VectorType>(type).getElementType().isF16())))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be LLVM dialect-compatible vector of 16-bit float, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps1( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::IntegerAttr>(attr))) && ((::llvm::cast<::mlir::IntegerAttr>(attr).getType().isSignlessInteger(32))))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: 32-bit signless integer attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps1( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps1(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps2( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::IntegerAttr>(attr))) && ((::llvm::cast<::mlir::IntegerAttr>(attr).getType().isSignlessInteger(16))))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: 16-bit signless integer attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps2( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps2(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps3( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps3( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps3(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps4( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(attr))) || (((::llvm::isa<::mlir::IntegerAttr>(attr))) && ((::llvm::cast<::mlir::IntegerAttr>(attr).getType().isSignlessInteger(32)))))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps4( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps4(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps5( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::ArrayAttr>(attr))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(attr), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: LLVM dialect alias scope array"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps5( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps5(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps6( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::ArrayAttr>(attr))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(attr), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps6( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps6(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps7( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::IntegerAttr>(attr))) && ((::llvm::cast<::mlir::IntegerAttr>(attr).getType().isSignlessInteger(1))))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: 1-bit signless integer attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps7( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps7(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps8( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(attr))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(attr))) || (((::llvm::isa<::mlir::IntegerAttr>(attr))) && ((::llvm::cast<::mlir::IntegerAttr>(attr).getType().isSignlessInteger(32)))))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: pre-gfx12 or gfx942 AMDGPU cache policy attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps8( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps8(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps9( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::ArrayAttr>(attr))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(attr), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::DictionaryAttr>(attr))); })))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: Array of dictionary attributes"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps9( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps9(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps10( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(attr))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(attr))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(attr))) || (((::llvm::isa<::mlir::IntegerAttr>(attr))) && ((::llvm::cast<::mlir::IntegerAttr>(attr).getType().isSignlessInteger(32)))))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps10( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps10(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps11( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(attr))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(attr))) || ((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(attr))) || (((::llvm::isa<::mlir::IntegerAttr>(attr))) && ((::llvm::cast<::mlir::IntegerAttr>(attr).getType().isSignlessInteger(32)))))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: non-atomic AMDGPU buffer cache policy attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps11( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps11(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps12( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::ROCDL::SchedGroupMaskAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: instruction type mask for scheduling barriers"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps12( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps12(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps13( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps13( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps13(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps14( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::ROCDL::MFMANegModifierAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: negation modifier bitfield for gfx94x double-precision MFMA"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps14( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps14(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps15( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps15( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps15(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps16( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: WMMA C operand modifiers"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps16( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps16(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps17( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: matrix scale row selector"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps17( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps17(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps18( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: matrix scale exponent formats"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_ROCDLOps18( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_ROCDLOps18(attr, attrName, [op]() { return op->emitOpError(); }); } namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLCos definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLCosGenericAdaptorBase::ROCDLCosGenericAdaptorBase(ROCDLCos op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLCosAdaptor::ROCDLCosAdaptor(ROCDLCos op) : ROCDLCosGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLCosAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLCos::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLCos::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLCos::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLCos::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLCos::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLCos::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLCos::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLCos::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLCos ROCDLCos::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLCos ROCDLCos::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLCos::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLCos ROCDLCos::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLCos ROCDLCos::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLCos::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLCos ROCDLCos::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLCos ROCDLCos::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLCos::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLCos ROCDLCos::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLCos ROCDLCos::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLCos::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLCos::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLCos::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLCos::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLCos::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLCos) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLExp definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLExpGenericAdaptorBase::ROCDLExpGenericAdaptorBase(ROCDLExp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLExpAdaptor::ROCDLExpAdaptor(ROCDLExp op) : ROCDLExpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLExpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLExp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLExp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLExp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLExp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLExp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLExp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLExp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLExp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLExp ROCDLExp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLExp ROCDLExp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLExp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLExp ROCDLExp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLExp ROCDLExp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLExp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLExp ROCDLExp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLExp ROCDLExp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLExp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLExp ROCDLExp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLExp ROCDLExp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLExp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLExp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLExp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLExp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLExp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLExp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLExp2 definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLExp2GenericAdaptorBase::ROCDLExp2GenericAdaptorBase(ROCDLExp2 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLExp2Adaptor::ROCDLExp2Adaptor(ROCDLExp2 op) : ROCDLExp2GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLExp2Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLExp2::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLExp2::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLExp2::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLExp2::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLExp2::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLExp2::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLExp2::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLExp2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLExp2 ROCDLExp2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLExp2 ROCDLExp2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLExp2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLExp2 ROCDLExp2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLExp2 ROCDLExp2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLExp2::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLExp2 ROCDLExp2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLExp2 ROCDLExp2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLExp2::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLExp2 ROCDLExp2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLExp2 ROCDLExp2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLExp2::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLExp2::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLExp2::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLExp2::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLExp2::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLExp2) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLLog definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLLogGenericAdaptorBase::ROCDLLogGenericAdaptorBase(ROCDLLog op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLLogAdaptor::ROCDLLogAdaptor(ROCDLLog op) : ROCDLLogGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLLogAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLLog::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLLog::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLLog::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLLog::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLLog::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLLog::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLLog::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLLog::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLLog ROCDLLog::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLLog ROCDLLog::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLLog::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLLog ROCDLLog::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLLog ROCDLLog::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLLog::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLLog ROCDLLog::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLLog ROCDLLog::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLLog::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLLog ROCDLLog::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLLog ROCDLLog::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLLog::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLLog::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLLog::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLLog::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLLog::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLLog) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLRcp definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLRcpGenericAdaptorBase::ROCDLRcpGenericAdaptorBase(ROCDLRcp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLRcpAdaptor::ROCDLRcpAdaptor(ROCDLRcp op) : ROCDLRcpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLRcpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLRcp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLRcp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLRcp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLRcp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLRcp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLRcp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLRcp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLRcp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLRcp ROCDLRcp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLRcp ROCDLRcp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLRcp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLRcp ROCDLRcp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLRcp ROCDLRcp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLRcp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLRcp ROCDLRcp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLRcp ROCDLRcp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLRcp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLRcp ROCDLRcp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLRcp ROCDLRcp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLRcp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLRcp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLRcp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLRcp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLRcp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLRcp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLRsq definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLRsqGenericAdaptorBase::ROCDLRsqGenericAdaptorBase(ROCDLRsq op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLRsqAdaptor::ROCDLRsqAdaptor(ROCDLRsq op) : ROCDLRsqGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLRsqAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLRsq::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLRsq::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLRsq::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLRsq::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLRsq::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLRsq::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLRsq::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLRsq::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLRsq ROCDLRsq::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLRsq ROCDLRsq::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLRsq::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLRsq ROCDLRsq::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLRsq ROCDLRsq::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLRsq::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLRsq ROCDLRsq::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLRsq ROCDLRsq::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLRsq::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLRsq ROCDLRsq::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLRsq ROCDLRsq::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLRsq::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLRsq::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLRsq::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLRsq::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLRsq::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLRsq) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLSin definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLSinGenericAdaptorBase::ROCDLSinGenericAdaptorBase(ROCDLSin op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLSinAdaptor::ROCDLSinAdaptor(ROCDLSin op) : ROCDLSinGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLSinAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLSin::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLSin::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLSin::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLSin::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLSin::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLSin::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLSin::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLSin::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLSin ROCDLSin::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLSin ROCDLSin::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLSin::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLSin ROCDLSin::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLSin ROCDLSin::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLSin::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLSin ROCDLSin::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLSin ROCDLSin::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLSin::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLSin ROCDLSin::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLSin ROCDLSin::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLSin::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLSin::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLSin::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLSin::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLSin::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLSin) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLSqrt definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLSqrtGenericAdaptorBase::ROCDLSqrtGenericAdaptorBase(ROCDLSqrt op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLSqrtAdaptor::ROCDLSqrtAdaptor(ROCDLSqrt op) : ROCDLSqrtGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLSqrtAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLSqrt::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLSqrt::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLSqrt::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLSqrt::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLSqrt::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLSqrt::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLSqrt::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLSqrt::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLSqrt ROCDLSqrt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLSqrt ROCDLSqrt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLSqrt::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLSqrt ROCDLSqrt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLSqrt ROCDLSqrt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLSqrt::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLSqrt ROCDLSqrt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLSqrt ROCDLSqrt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLSqrt::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLSqrt ROCDLSqrt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLSqrt ROCDLSqrt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLSqrt::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLSqrt::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLSqrt::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLSqrt::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLSqrt::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLSqrt) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ROCDLTanh definitions //===----------------------------------------------------------------------===// namespace detail { ROCDLTanhGenericAdaptorBase::ROCDLTanhGenericAdaptorBase(ROCDLTanh op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ROCDLTanhAdaptor::ROCDLTanhAdaptor(ROCDLTanh op) : ROCDLTanhGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ROCDLTanhAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ROCDLTanh::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ROCDLTanh::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ROCDLTanh::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ROCDLTanh::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ROCDLTanh::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ROCDLTanh::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ROCDLTanh::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ROCDLTanh::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value arg) { odsState.addOperands(arg); odsState.addTypes(res); } ROCDLTanh ROCDLTanh::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLTanh ROCDLTanh::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(res), std::forward(arg)); } void ROCDLTanh::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { odsState.addOperands(arg); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ROCDLTanh ROCDLTanh::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(arg)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLTanh ROCDLTanh::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value arg) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(arg)); } void ROCDLTanh::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLTanh ROCDLTanh::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLTanh ROCDLTanh::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ROCDLTanh::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ROCDLTanh ROCDLTanh::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ROCDLTanh ROCDLTanh::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ROCDLTanh::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ROCDLTanh::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ROCDLTanh::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand argRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> argOperands(&argRawOperand, 1); ::llvm::SMLoc argOperandsLoc; (void)argOperandsLoc; ::mlir::Type argRawType{}; ::llvm::ArrayRef<::mlir::Type> argTypes(&argRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); argOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(argRawOperand)) return ::mlir::failure(); if (parser.parseType(argRawType)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); if (parser.parseType(resRawType)) return ::mlir::failure(); result.addTypes(resTypes); if (parser.resolveOperands(argOperands, argTypes, argOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ROCDLTanh::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getArg(); _odsPrinter << ' '; _odsPrinter << getArg().getType(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getRes().getType(); } void ROCDLTanh::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ROCDLTanh) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::AsyncmarkOp definitions //===----------------------------------------------------------------------===// namespace detail { AsyncmarkOpGenericAdaptorBase::AsyncmarkOpGenericAdaptorBase(AsyncmarkOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail AsyncmarkOpAdaptor::AsyncmarkOpAdaptor(AsyncmarkOp op) : AsyncmarkOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult AsyncmarkOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult AsyncmarkOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute AsyncmarkOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code AsyncmarkOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional AsyncmarkOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void AsyncmarkOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void AsyncmarkOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult AsyncmarkOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void AsyncmarkOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState) { } AsyncmarkOp AsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } AsyncmarkOp AsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder) { return create(builder, builder.getLoc()); } void AsyncmarkOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes) { assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } AsyncmarkOp AsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } AsyncmarkOp AsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes) { return create(builder, builder.getLoc(), std::forward(resultTypes)); } void AsyncmarkOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } AsyncmarkOp AsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } AsyncmarkOp AsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void AsyncmarkOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } AsyncmarkOp AsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } AsyncmarkOp AsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult AsyncmarkOp::verifyInvariantsImpl() { return ::mlir::success(); } ::llvm::LogicalResult AsyncmarkOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult AsyncmarkOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void AsyncmarkOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::AsyncmarkOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BallotOp definitions //===----------------------------------------------------------------------===// namespace detail { BallotOpGenericAdaptorBase::BallotOpGenericAdaptorBase(BallotOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail BallotOpAdaptor::BallotOpAdaptor(BallotOp op) : BallotOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BallotOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult BallotOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute BallotOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BallotOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional BallotOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void BallotOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void BallotOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult BallotOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void BallotOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value pred) { odsState.addOperands(pred); odsState.addTypes(res); } BallotOp BallotOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value pred) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(pred)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BallotOp BallotOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value pred) { return create(builder, builder.getLoc(), std::forward(res), std::forward(pred)); } void BallotOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value pred) { odsState.addOperands(pred); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } BallotOp BallotOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value pred) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(pred)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BallotOp BallotOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value pred) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(pred)); } void BallotOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BallotOp BallotOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BallotOp BallotOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BallotOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BallotOp BallotOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BallotOp BallotOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BallotOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps2(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult BallotOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BallotOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand predRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> predOperands(&predRawOperand, 1); ::llvm::SMLoc predOperandsLoc; (void)predOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); predOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(predRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(1); result.addTypes(resTypes); if (parser.resolveOperands(predOperands, odsBuildableType0, predOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void BallotOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPred(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BallotOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BarrierInitOp definitions //===----------------------------------------------------------------------===// namespace detail { BarrierInitOpGenericAdaptorBase::BarrierInitOpGenericAdaptorBase(BarrierInitOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t BarrierInitOpGenericAdaptorBase::getMemberCnt() { auto attr = getMemberCntAttr(); return attr.getValue().getZExtValue(); } } // namespace detail BarrierInitOpAdaptor::BarrierInitOpAdaptor(BarrierInitOp op) : BarrierInitOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BarrierInitOpAdaptor::verify(::mlir::Location loc) { auto tblgen_memberCnt = getProperties().memberCnt; (void)tblgen_memberCnt; if (!tblgen_memberCnt) return emitError(loc, "'rocdl.s.barrier.init' op requires attribute 'memberCnt'"); if (tblgen_memberCnt && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_memberCnt))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_memberCnt).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.s.barrier.init' op attribute 'memberCnt' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult BarrierInitOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.memberCnt; auto attr = dict.get("memberCnt"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `memberCnt` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BarrierInitOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.memberCnt; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("memberCnt", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BarrierInitOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.memberCnt.getAsOpaquePointer())); } std::optional BarrierInitOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "memberCnt") return prop.memberCnt; return std::nullopt; } void BarrierInitOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "memberCnt") { prop.memberCnt = ::llvm::dyn_cast_or_null>(value); return; } } void BarrierInitOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.memberCnt) attrs.append("memberCnt", prop.memberCnt); } ::llvm::LogicalResult BarrierInitOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getMemberCntAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "memberCnt", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BarrierInitOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.memberCnt))) return ::mlir::failure(); return ::mlir::success(); } void BarrierInitOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.memberCnt); } uint32_t BarrierInitOp::getMemberCnt() { auto attr = getMemberCntAttr(); return attr.getValue().getZExtValue(); } void BarrierInitOp::setMemberCnt(uint32_t attrValue) { getProperties().memberCnt = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void BarrierInitOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { odsState.addOperands(ptr); odsState.getOrAddProperties().memberCnt = memberCnt; } BarrierInitOp BarrierInitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr), std::forward(memberCnt)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierInitOp BarrierInitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { return create(builder, builder.getLoc(), std::forward(ptr), std::forward(memberCnt)); } void BarrierInitOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { odsState.addOperands(ptr); odsState.getOrAddProperties().memberCnt = memberCnt; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierInitOp BarrierInitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(memberCnt)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierInitOp BarrierInitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(memberCnt)); } void BarrierInitOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr, uint32_t memberCnt) { odsState.addOperands(ptr); odsState.getOrAddProperties().memberCnt = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), memberCnt); } BarrierInitOp BarrierInitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr, uint32_t memberCnt) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr), std::forward(memberCnt)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierInitOp BarrierInitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr, uint32_t memberCnt) { return create(builder, builder.getLoc(), std::forward(ptr), std::forward(memberCnt)); } void BarrierInitOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, uint32_t memberCnt) { odsState.addOperands(ptr); odsState.getOrAddProperties().memberCnt = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), memberCnt); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierInitOp BarrierInitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, uint32_t memberCnt) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(memberCnt)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierInitOp BarrierInitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, uint32_t memberCnt) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(memberCnt)); } void BarrierInitOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BarrierInitOp BarrierInitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierInitOp BarrierInitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BarrierInitOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierInitOp BarrierInitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierInitOp BarrierInitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BarrierInitOp::verifyInvariantsImpl() { auto tblgen_memberCnt = getProperties().memberCnt; (void)tblgen_memberCnt; if (!tblgen_memberCnt) return emitOpError("requires attribute 'memberCnt'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_memberCnt, "memberCnt"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult BarrierInitOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BarrierInitOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::IntegerAttr memberCntAttr; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (parser.parseKeyword("member_cnt")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(memberCntAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (memberCntAttr) result.getOrAddProperties().memberCnt = memberCntAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void BarrierInitOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); _odsPrinter << ' ' << "member_cnt"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getMemberCntAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("memberCnt"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BarrierInitOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BarrierInitOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BarrierJoinOp definitions //===----------------------------------------------------------------------===// namespace detail { BarrierJoinOpGenericAdaptorBase::BarrierJoinOpGenericAdaptorBase(BarrierJoinOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail BarrierJoinOpAdaptor::BarrierJoinOpAdaptor(BarrierJoinOp op) : BarrierJoinOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BarrierJoinOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult BarrierJoinOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute BarrierJoinOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BarrierJoinOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional BarrierJoinOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void BarrierJoinOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void BarrierJoinOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult BarrierJoinOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void BarrierJoinOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr) { odsState.addOperands(ptr); } BarrierJoinOp BarrierJoinOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierJoinOp BarrierJoinOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(ptr)); } void BarrierJoinOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { odsState.addOperands(ptr); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierJoinOp BarrierJoinOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierJoinOp BarrierJoinOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr)); } void BarrierJoinOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierJoinOp BarrierJoinOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierJoinOp BarrierJoinOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BarrierJoinOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierJoinOp BarrierJoinOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierJoinOp BarrierJoinOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BarrierJoinOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult BarrierJoinOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BarrierJoinOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void BarrierJoinOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BarrierJoinOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BarrierLeaveOp definitions //===----------------------------------------------------------------------===// namespace detail { BarrierLeaveOpGenericAdaptorBase::BarrierLeaveOpGenericAdaptorBase(BarrierLeaveOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t BarrierLeaveOpGenericAdaptorBase::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } } // namespace detail BarrierLeaveOpAdaptor::BarrierLeaveOpAdaptor(BarrierLeaveOp op) : BarrierLeaveOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BarrierLeaveOpAdaptor::verify(::mlir::Location loc) { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitError(loc, "'rocdl.s.barrier.leave' op requires attribute 'id'"); if (tblgen_id && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_id))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_id).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.barrier.leave' op attribute 'id' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult BarrierLeaveOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.id; auto attr = dict.get("id"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `id` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BarrierLeaveOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.id; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("id", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BarrierLeaveOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.id.getAsOpaquePointer())); } std::optional BarrierLeaveOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "id") return prop.id; return std::nullopt; } void BarrierLeaveOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "id") { prop.id = ::llvm::dyn_cast_or_null>(value); return; } } void BarrierLeaveOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.id) attrs.append("id", prop.id); } ::llvm::LogicalResult BarrierLeaveOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getIdAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "id", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BarrierLeaveOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.id))) return ::mlir::failure(); return ::mlir::success(); } void BarrierLeaveOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.id); } uint16_t BarrierLeaveOp::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } void BarrierLeaveOp::setId(uint16_t attrValue) { getProperties().id = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void BarrierLeaveOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; } BarrierLeaveOp BarrierLeaveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierLeaveOp BarrierLeaveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(id)); } void BarrierLeaveOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierLeaveOp BarrierLeaveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierLeaveOp BarrierLeaveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void BarrierLeaveOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), id); } BarrierLeaveOp BarrierLeaveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierLeaveOp BarrierLeaveOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t id) { return create(builder, builder.getLoc(), std::forward(id)); } void BarrierLeaveOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), id); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierLeaveOp BarrierLeaveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierLeaveOp BarrierLeaveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void BarrierLeaveOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BarrierLeaveOp BarrierLeaveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierLeaveOp BarrierLeaveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BarrierLeaveOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierLeaveOp BarrierLeaveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierLeaveOp BarrierLeaveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BarrierLeaveOp::verifyInvariantsImpl() { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitOpError("requires attribute 'id'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_id, "id"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult BarrierLeaveOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BarrierLeaveOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr idAttr; if (parser.parseKeyword("id")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(idAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (idAttr) result.getOrAddProperties().id = idAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void BarrierLeaveOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' ' << "id"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getIdAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("id"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BarrierLeaveOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BarrierLeaveOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BarrierOp definitions //===----------------------------------------------------------------------===// namespace detail { BarrierOpGenericAdaptorBase::BarrierOpGenericAdaptorBase(BarrierOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail BarrierOpAdaptor::BarrierOpAdaptor(BarrierOp op) : BarrierOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BarrierOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult BarrierOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute BarrierOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BarrierOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional BarrierOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void BarrierOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void BarrierOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult BarrierOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void BarrierOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState) { } BarrierOp BarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierOp BarrierOp::create(::mlir::ImplicitLocOpBuilder &builder) { return create(builder, builder.getLoc()); } void BarrierOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes) { assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierOp BarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierOp BarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes) { return create(builder, builder.getLoc(), std::forward(resultTypes)); } void BarrierOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierOp BarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierOp BarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BarrierOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierOp BarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierOp BarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BarrierOp::verifyInvariantsImpl() { return ::mlir::success(); } ::llvm::LogicalResult BarrierOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BarrierOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void BarrierOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BarrierOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BarrierSignalIsfirstOp definitions //===----------------------------------------------------------------------===// namespace detail { BarrierSignalIsfirstOpGenericAdaptorBase::BarrierSignalIsfirstOpGenericAdaptorBase(BarrierSignalIsfirstOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t BarrierSignalIsfirstOpGenericAdaptorBase::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } } // namespace detail BarrierSignalIsfirstOpAdaptor::BarrierSignalIsfirstOpAdaptor(BarrierSignalIsfirstOp op) : BarrierSignalIsfirstOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BarrierSignalIsfirstOpAdaptor::verify(::mlir::Location loc) { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitError(loc, "'rocdl.s.barrier.signal.isfirst' op requires attribute 'id'"); if (tblgen_id && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_id))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_id).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.s.barrier.signal.isfirst' op attribute 'id' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalIsfirstOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.id; auto attr = dict.get("id"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `id` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BarrierSignalIsfirstOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.id; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("id", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BarrierSignalIsfirstOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.id.getAsOpaquePointer())); } std::optional BarrierSignalIsfirstOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "id") return prop.id; return std::nullopt; } void BarrierSignalIsfirstOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "id") { prop.id = ::llvm::dyn_cast_or_null>(value); return; } } void BarrierSignalIsfirstOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.id) attrs.append("id", prop.id); } ::llvm::LogicalResult BarrierSignalIsfirstOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getIdAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "id", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalIsfirstOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.id))) return ::mlir::failure(); return ::mlir::success(); } void BarrierSignalIsfirstOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.id); } uint32_t BarrierSignalIsfirstOp::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } void BarrierSignalIsfirstOp::setId(uint32_t attrValue) { getProperties().id = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void BarrierSignalIsfirstOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; odsState.addTypes(res); } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(res), std::forward(id)); } void BarrierSignalIsfirstOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void BarrierSignalIsfirstOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, uint32_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), id); odsState.addTypes(res); } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, uint32_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, uint32_t id) { return create(builder, builder.getLoc(), std::forward(res), std::forward(id)); } void BarrierSignalIsfirstOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint32_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), id); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint32_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint32_t id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void BarrierSignalIsfirstOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BarrierSignalIsfirstOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalIsfirstOp BarrierSignalIsfirstOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BarrierSignalIsfirstOp::verifyInvariantsImpl() { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitOpError("requires attribute 'id'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_id, "id"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps2(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalIsfirstOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BarrierSignalIsfirstOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr idAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (parser.parseKeyword("id")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(idAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (idAttr) result.getOrAddProperties().id = idAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void BarrierSignalIsfirstOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' ' << "id"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getIdAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("id"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BarrierSignalIsfirstOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BarrierSignalIsfirstOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BarrierSignalOp definitions //===----------------------------------------------------------------------===// namespace detail { BarrierSignalOpGenericAdaptorBase::BarrierSignalOpGenericAdaptorBase(BarrierSignalOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t BarrierSignalOpGenericAdaptorBase::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } } // namespace detail BarrierSignalOpAdaptor::BarrierSignalOpAdaptor(BarrierSignalOp op) : BarrierSignalOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BarrierSignalOpAdaptor::verify(::mlir::Location loc) { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitError(loc, "'rocdl.s.barrier.signal' op requires attribute 'id'"); if (tblgen_id && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_id))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_id).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.s.barrier.signal' op attribute 'id' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.id; auto attr = dict.get("id"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `id` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BarrierSignalOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.id; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("id", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BarrierSignalOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.id.getAsOpaquePointer())); } std::optional BarrierSignalOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "id") return prop.id; return std::nullopt; } void BarrierSignalOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "id") { prop.id = ::llvm::dyn_cast_or_null>(value); return; } } void BarrierSignalOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.id) attrs.append("id", prop.id); } ::llvm::LogicalResult BarrierSignalOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getIdAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "id", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.id))) return ::mlir::failure(); return ::mlir::success(); } void BarrierSignalOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.id); } uint32_t BarrierSignalOp::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } void BarrierSignalOp::setId(uint32_t attrValue) { getProperties().id = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void BarrierSignalOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; } BarrierSignalOp BarrierSignalOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalOp BarrierSignalOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(id)); } void BarrierSignalOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierSignalOp BarrierSignalOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalOp BarrierSignalOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void BarrierSignalOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint32_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), id); } BarrierSignalOp BarrierSignalOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint32_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalOp BarrierSignalOp::create(::mlir::ImplicitLocOpBuilder &builder, uint32_t id) { return create(builder, builder.getLoc(), std::forward(id)); } void BarrierSignalOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint32_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), id); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierSignalOp BarrierSignalOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint32_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalOp BarrierSignalOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint32_t id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void BarrierSignalOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BarrierSignalOp BarrierSignalOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalOp BarrierSignalOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BarrierSignalOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierSignalOp BarrierSignalOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalOp BarrierSignalOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BarrierSignalOp::verifyInvariantsImpl() { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitOpError("requires attribute 'id'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_id, "id"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BarrierSignalOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr idAttr; if (parser.parseKeyword("id")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(idAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (idAttr) result.getOrAddProperties().id = idAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void BarrierSignalOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' ' << "id"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getIdAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("id"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BarrierSignalOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BarrierSignalOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BarrierSignalVarOp definitions //===----------------------------------------------------------------------===// namespace detail { BarrierSignalVarOpGenericAdaptorBase::BarrierSignalVarOpGenericAdaptorBase(BarrierSignalVarOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t BarrierSignalVarOpGenericAdaptorBase::getMemberCnt() { auto attr = getMemberCntAttr(); return attr.getValue().getZExtValue(); } } // namespace detail BarrierSignalVarOpAdaptor::BarrierSignalVarOpAdaptor(BarrierSignalVarOp op) : BarrierSignalVarOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BarrierSignalVarOpAdaptor::verify(::mlir::Location loc) { auto tblgen_memberCnt = getProperties().memberCnt; (void)tblgen_memberCnt; if (!tblgen_memberCnt) return emitError(loc, "'rocdl.s.barrier.signal.var' op requires attribute 'memberCnt'"); if (tblgen_memberCnt && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_memberCnt))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_memberCnt).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.s.barrier.signal.var' op attribute 'memberCnt' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalVarOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.memberCnt; auto attr = dict.get("memberCnt"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `memberCnt` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BarrierSignalVarOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.memberCnt; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("memberCnt", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BarrierSignalVarOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.memberCnt.getAsOpaquePointer())); } std::optional BarrierSignalVarOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "memberCnt") return prop.memberCnt; return std::nullopt; } void BarrierSignalVarOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "memberCnt") { prop.memberCnt = ::llvm::dyn_cast_or_null>(value); return; } } void BarrierSignalVarOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.memberCnt) attrs.append("memberCnt", prop.memberCnt); } ::llvm::LogicalResult BarrierSignalVarOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getMemberCntAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "memberCnt", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalVarOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.memberCnt))) return ::mlir::failure(); return ::mlir::success(); } void BarrierSignalVarOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.memberCnt); } uint32_t BarrierSignalVarOp::getMemberCnt() { auto attr = getMemberCntAttr(); return attr.getValue().getZExtValue(); } void BarrierSignalVarOp::setMemberCnt(uint32_t attrValue) { getProperties().memberCnt = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void BarrierSignalVarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { odsState.addOperands(ptr); odsState.getOrAddProperties().memberCnt = memberCnt; } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr), std::forward(memberCnt)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { return create(builder, builder.getLoc(), std::forward(ptr), std::forward(memberCnt)); } void BarrierSignalVarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { odsState.addOperands(ptr); odsState.getOrAddProperties().memberCnt = memberCnt; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(memberCnt)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::IntegerAttr memberCnt) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(memberCnt)); } void BarrierSignalVarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr, uint32_t memberCnt) { odsState.addOperands(ptr); odsState.getOrAddProperties().memberCnt = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), memberCnt); } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr, uint32_t memberCnt) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr), std::forward(memberCnt)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr, uint32_t memberCnt) { return create(builder, builder.getLoc(), std::forward(ptr), std::forward(memberCnt)); } void BarrierSignalVarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, uint32_t memberCnt) { odsState.addOperands(ptr); odsState.getOrAddProperties().memberCnt = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), memberCnt); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, uint32_t memberCnt) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(memberCnt)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, uint32_t memberCnt) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(memberCnt)); } void BarrierSignalVarOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BarrierSignalVarOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierSignalVarOp BarrierSignalVarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BarrierSignalVarOp::verifyInvariantsImpl() { auto tblgen_memberCnt = getProperties().memberCnt; (void)tblgen_memberCnt; if (!tblgen_memberCnt) return emitOpError("requires attribute 'memberCnt'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_memberCnt, "memberCnt"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult BarrierSignalVarOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BarrierSignalVarOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::IntegerAttr memberCntAttr; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (parser.parseKeyword("member_cnt")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(memberCntAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (memberCntAttr) result.getOrAddProperties().memberCnt = memberCntAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void BarrierSignalVarOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); _odsPrinter << ' ' << "member_cnt"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getMemberCntAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("memberCnt"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BarrierSignalVarOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BarrierSignalVarOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BarrierWaitOp definitions //===----------------------------------------------------------------------===// namespace detail { BarrierWaitOpGenericAdaptorBase::BarrierWaitOpGenericAdaptorBase(BarrierWaitOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t BarrierWaitOpGenericAdaptorBase::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } } // namespace detail BarrierWaitOpAdaptor::BarrierWaitOpAdaptor(BarrierWaitOp op) : BarrierWaitOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BarrierWaitOpAdaptor::verify(::mlir::Location loc) { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitError(loc, "'rocdl.s.barrier.wait' op requires attribute 'id'"); if (tblgen_id && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_id))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_id).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.barrier.wait' op attribute 'id' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult BarrierWaitOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.id; auto attr = dict.get("id"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `id` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BarrierWaitOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.id; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("id", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BarrierWaitOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.id.getAsOpaquePointer())); } std::optional BarrierWaitOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "id") return prop.id; return std::nullopt; } void BarrierWaitOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "id") { prop.id = ::llvm::dyn_cast_or_null>(value); return; } } void BarrierWaitOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.id) attrs.append("id", prop.id); } ::llvm::LogicalResult BarrierWaitOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getIdAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "id", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BarrierWaitOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.id))) return ::mlir::failure(); return ::mlir::success(); } void BarrierWaitOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.id); } uint16_t BarrierWaitOp::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } void BarrierWaitOp::setId(uint16_t attrValue) { getProperties().id = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void BarrierWaitOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; } BarrierWaitOp BarrierWaitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierWaitOp BarrierWaitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(id)); } void BarrierWaitOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierWaitOp BarrierWaitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierWaitOp BarrierWaitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void BarrierWaitOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), id); } BarrierWaitOp BarrierWaitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierWaitOp BarrierWaitOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t id) { return create(builder, builder.getLoc(), std::forward(id)); } void BarrierWaitOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), id); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } BarrierWaitOp BarrierWaitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierWaitOp BarrierWaitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void BarrierWaitOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BarrierWaitOp BarrierWaitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierWaitOp BarrierWaitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BarrierWaitOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BarrierWaitOp BarrierWaitOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BarrierWaitOp BarrierWaitOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BarrierWaitOp::verifyInvariantsImpl() { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitOpError("requires attribute 'id'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_id, "id"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult BarrierWaitOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BarrierWaitOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr idAttr; if (parser.parseKeyword("id")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(idAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (idAttr) result.getOrAddProperties().id = idAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void BarrierWaitOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' ' << "id"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getIdAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("id"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BarrierWaitOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BarrierWaitOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BlockIdXOp definitions //===----------------------------------------------------------------------===// namespace detail { BlockIdXOpGenericAdaptorBase::BlockIdXOpGenericAdaptorBase(BlockIdXOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> BlockIdXOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail BlockIdXOpAdaptor::BlockIdXOpAdaptor(BlockIdXOp op) : BlockIdXOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BlockIdXOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.workgroup.id.x' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult BlockIdXOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BlockIdXOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BlockIdXOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional BlockIdXOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void BlockIdXOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void BlockIdXOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult BlockIdXOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BlockIdXOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void BlockIdXOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> BlockIdXOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void BlockIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } BlockIdXOp BlockIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdXOp BlockIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void BlockIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } BlockIdXOp BlockIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdXOp BlockIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void BlockIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } BlockIdXOp BlockIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdXOp BlockIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void BlockIdXOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BlockIdXOp BlockIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdXOp BlockIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BlockIdXOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BlockIdXOp BlockIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdXOp BlockIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BlockIdXOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult BlockIdXOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BlockIdXOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void BlockIdXOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void BlockIdXOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BlockIdXOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BlockIdXOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BlockIdYOp definitions //===----------------------------------------------------------------------===// namespace detail { BlockIdYOpGenericAdaptorBase::BlockIdYOpGenericAdaptorBase(BlockIdYOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> BlockIdYOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail BlockIdYOpAdaptor::BlockIdYOpAdaptor(BlockIdYOp op) : BlockIdYOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BlockIdYOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.workgroup.id.y' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult BlockIdYOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BlockIdYOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BlockIdYOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional BlockIdYOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void BlockIdYOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void BlockIdYOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult BlockIdYOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BlockIdYOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void BlockIdYOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> BlockIdYOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void BlockIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } BlockIdYOp BlockIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdYOp BlockIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void BlockIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } BlockIdYOp BlockIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdYOp BlockIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void BlockIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } BlockIdYOp BlockIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdYOp BlockIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void BlockIdYOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BlockIdYOp BlockIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdYOp BlockIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BlockIdYOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BlockIdYOp BlockIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdYOp BlockIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BlockIdYOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult BlockIdYOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BlockIdYOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void BlockIdYOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void BlockIdYOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BlockIdYOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BlockIdYOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::BlockIdZOp definitions //===----------------------------------------------------------------------===// namespace detail { BlockIdZOpGenericAdaptorBase::BlockIdZOpGenericAdaptorBase(BlockIdZOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> BlockIdZOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail BlockIdZOpAdaptor::BlockIdZOpAdaptor(BlockIdZOp op) : BlockIdZOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult BlockIdZOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.workgroup.id.z' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult BlockIdZOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute BlockIdZOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code BlockIdZOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional BlockIdZOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void BlockIdZOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void BlockIdZOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult BlockIdZOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult BlockIdZOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void BlockIdZOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> BlockIdZOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void BlockIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } BlockIdZOp BlockIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdZOp BlockIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void BlockIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } BlockIdZOp BlockIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdZOp BlockIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void BlockIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } BlockIdZOp BlockIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdZOp BlockIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void BlockIdZOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } BlockIdZOp BlockIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdZOp BlockIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void BlockIdZOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } BlockIdZOp BlockIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } BlockIdZOp BlockIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult BlockIdZOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult BlockIdZOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult BlockIdZOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void BlockIdZOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void BlockIdZOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::BlockIdZOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::BlockIdZOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterIdXOp definitions //===----------------------------------------------------------------------===// namespace detail { ClusterIdXOpGenericAdaptorBase::ClusterIdXOpGenericAdaptorBase(ClusterIdXOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterIdXOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ClusterIdXOpAdaptor::ClusterIdXOpAdaptor(ClusterIdXOp op) : ClusterIdXOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterIdXOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.cluster.id.x' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ClusterIdXOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterIdXOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterIdXOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ClusterIdXOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ClusterIdXOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterIdXOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ClusterIdXOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterIdXOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ClusterIdXOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterIdXOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ClusterIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ClusterIdXOp ClusterIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdXOp ClusterIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ClusterIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ClusterIdXOp ClusterIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdXOp ClusterIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ClusterIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterIdXOp ClusterIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdXOp ClusterIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ClusterIdXOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterIdXOp ClusterIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdXOp ClusterIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterIdXOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterIdXOp ClusterIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdXOp ClusterIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ClusterIdXOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterIdXOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterIdXOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ClusterIdXOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ClusterIdXOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterIdXOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterIdXOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterIdYOp definitions //===----------------------------------------------------------------------===// namespace detail { ClusterIdYOpGenericAdaptorBase::ClusterIdYOpGenericAdaptorBase(ClusterIdYOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterIdYOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ClusterIdYOpAdaptor::ClusterIdYOpAdaptor(ClusterIdYOp op) : ClusterIdYOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterIdYOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.cluster.id.y' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ClusterIdYOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterIdYOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterIdYOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ClusterIdYOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ClusterIdYOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterIdYOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ClusterIdYOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterIdYOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ClusterIdYOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterIdYOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ClusterIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ClusterIdYOp ClusterIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdYOp ClusterIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ClusterIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ClusterIdYOp ClusterIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdYOp ClusterIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ClusterIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterIdYOp ClusterIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdYOp ClusterIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ClusterIdYOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterIdYOp ClusterIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdYOp ClusterIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterIdYOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterIdYOp ClusterIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdYOp ClusterIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ClusterIdYOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterIdYOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterIdYOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ClusterIdYOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ClusterIdYOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterIdYOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterIdYOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterIdZOp definitions //===----------------------------------------------------------------------===// namespace detail { ClusterIdZOpGenericAdaptorBase::ClusterIdZOpGenericAdaptorBase(ClusterIdZOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterIdZOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ClusterIdZOpAdaptor::ClusterIdZOpAdaptor(ClusterIdZOp op) : ClusterIdZOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterIdZOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.cluster.id.z' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ClusterIdZOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterIdZOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterIdZOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ClusterIdZOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ClusterIdZOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterIdZOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ClusterIdZOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterIdZOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ClusterIdZOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterIdZOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ClusterIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ClusterIdZOp ClusterIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdZOp ClusterIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ClusterIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ClusterIdZOp ClusterIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdZOp ClusterIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ClusterIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterIdZOp ClusterIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdZOp ClusterIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ClusterIdZOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterIdZOp ClusterIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdZOp ClusterIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterIdZOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterIdZOp ClusterIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterIdZOp ClusterIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ClusterIdZOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterIdZOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterIdZOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ClusterIdZOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ClusterIdZOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterIdZOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterIdZOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterLoadAsyncToLDSB128Op definitions //===----------------------------------------------------------------------===// namespace detail { ClusterLoadAsyncToLDSB128OpGenericAdaptorBase::ClusterLoadAsyncToLDSB128OpGenericAdaptorBase(ClusterLoadAsyncToLDSB128Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t ClusterLoadAsyncToLDSB128OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute ClusterLoadAsyncToLDSB128OpGenericAdaptorBase::getCpolAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().cpol); return attr; } ::mlir::Attribute ClusterLoadAsyncToLDSB128OpGenericAdaptorBase::getCpol() { auto attr = getCpolAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB128OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB128OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB128OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail ClusterLoadAsyncToLDSB128OpAdaptor::ClusterLoadAsyncToLDSB128OpAdaptor(ClusterLoadAsyncToLDSB128Op op) : ClusterLoadAsyncToLDSB128OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterLoadAsyncToLDSB128OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cpol = getProperties().cpol; (void)tblgen_cpol; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b128' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b128' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_cpol && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_cpol))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_cpol))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cpol).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b128' op attribute 'cpol' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b128' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b128' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b128' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB128Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cpol; auto attr = dict.get("cpol"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cpol` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterLoadAsyncToLDSB128Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.cpol; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cpol", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterLoadAsyncToLDSB128Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.cpol.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional ClusterLoadAsyncToLDSB128Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "cpol") return prop.cpol; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void ClusterLoadAsyncToLDSB128Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cpol") { prop.cpol = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterLoadAsyncToLDSB128Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.cpol) attrs.append("cpol", prop.cpol); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB128Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCpolAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "cpol", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB128Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.cpol))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void ClusterLoadAsyncToLDSB128Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.cpol); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t ClusterLoadAsyncToLDSB128Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute ClusterLoadAsyncToLDSB128Op::getCpol() { auto attr = getCpolAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB128Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB128Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB128Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void ClusterLoadAsyncToLDSB128Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void ClusterLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = offset; if (cpol) { odsState.getOrAddProperties().cpol = cpol; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = offset; if (cpol) { odsState.getOrAddProperties().cpol = cpol; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().cpol = cpol; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().cpol = cpol; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB128Op ClusterLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void ClusterLoadAsyncToLDSB128Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.cpol) properties.cpol = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB128Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cpol = getProperties().cpol; (void)tblgen_cpol; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_cpol, "cpol"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB128Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterLoadAsyncToLDSB128Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute cpolAttr; ::mlir::OpAsmParser::UnresolvedOperand maskRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> maskOperands(&maskRawOperand, 1); ::llvm::SMLoc maskOperandsLoc; (void)maskOperandsLoc; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, cpolAttr); if (odsResult) return ::mlir::failure(); if (cpolAttr) result.getOrAddProperties().cpol = cpolAttr; } if (parser.parseComma()) return ::mlir::failure(); maskOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(maskRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(maskOperands, odsBuildableType0, maskOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ClusterLoadAsyncToLDSB128Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getCpolAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getMask(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("cpol"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getCpolAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("cpol"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void ClusterLoadAsyncToLDSB128Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> ClusterLoadAsyncToLDSB128Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterLoadAsyncToLDSB128Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterLoadAsyncToLDSB128OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterLoadAsyncToLDSB32Op definitions //===----------------------------------------------------------------------===// namespace detail { ClusterLoadAsyncToLDSB32OpGenericAdaptorBase::ClusterLoadAsyncToLDSB32OpGenericAdaptorBase(ClusterLoadAsyncToLDSB32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t ClusterLoadAsyncToLDSB32OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute ClusterLoadAsyncToLDSB32OpGenericAdaptorBase::getCpolAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().cpol); return attr; } ::mlir::Attribute ClusterLoadAsyncToLDSB32OpGenericAdaptorBase::getCpol() { auto attr = getCpolAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB32OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB32OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB32OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail ClusterLoadAsyncToLDSB32OpAdaptor::ClusterLoadAsyncToLDSB32OpAdaptor(ClusterLoadAsyncToLDSB32Op op) : ClusterLoadAsyncToLDSB32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterLoadAsyncToLDSB32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cpol = getProperties().cpol; (void)tblgen_cpol; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b32' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b32' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_cpol && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_cpol))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_cpol))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cpol).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b32' op attribute 'cpol' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b32' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b32' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b32' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cpol; auto attr = dict.get("cpol"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cpol` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterLoadAsyncToLDSB32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.cpol; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cpol", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterLoadAsyncToLDSB32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.cpol.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional ClusterLoadAsyncToLDSB32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "cpol") return prop.cpol; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void ClusterLoadAsyncToLDSB32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cpol") { prop.cpol = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterLoadAsyncToLDSB32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.cpol) attrs.append("cpol", prop.cpol); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCpolAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "cpol", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.cpol))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void ClusterLoadAsyncToLDSB32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.cpol); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t ClusterLoadAsyncToLDSB32Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute ClusterLoadAsyncToLDSB32Op::getCpol() { auto attr = getCpolAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB32Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB32Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB32Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void ClusterLoadAsyncToLDSB32Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void ClusterLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = offset; if (cpol) { odsState.getOrAddProperties().cpol = cpol; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = offset; if (cpol) { odsState.getOrAddProperties().cpol = cpol; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().cpol = cpol; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().cpol = cpol; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB32Op ClusterLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void ClusterLoadAsyncToLDSB32Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.cpol) properties.cpol = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB32Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cpol = getProperties().cpol; (void)tblgen_cpol; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_cpol, "cpol"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterLoadAsyncToLDSB32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute cpolAttr; ::mlir::OpAsmParser::UnresolvedOperand maskRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> maskOperands(&maskRawOperand, 1); ::llvm::SMLoc maskOperandsLoc; (void)maskOperandsLoc; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, cpolAttr); if (odsResult) return ::mlir::failure(); if (cpolAttr) result.getOrAddProperties().cpol = cpolAttr; } if (parser.parseComma()) return ::mlir::failure(); maskOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(maskRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(maskOperands, odsBuildableType0, maskOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ClusterLoadAsyncToLDSB32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getCpolAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getMask(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("cpol"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getCpolAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("cpol"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void ClusterLoadAsyncToLDSB32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> ClusterLoadAsyncToLDSB32Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterLoadAsyncToLDSB32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterLoadAsyncToLDSB32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterLoadAsyncToLDSB64Op definitions //===----------------------------------------------------------------------===// namespace detail { ClusterLoadAsyncToLDSB64OpGenericAdaptorBase::ClusterLoadAsyncToLDSB64OpGenericAdaptorBase(ClusterLoadAsyncToLDSB64Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t ClusterLoadAsyncToLDSB64OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute ClusterLoadAsyncToLDSB64OpGenericAdaptorBase::getCpolAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().cpol); return attr; } ::mlir::Attribute ClusterLoadAsyncToLDSB64OpGenericAdaptorBase::getCpol() { auto attr = getCpolAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB64OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB64OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB64OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail ClusterLoadAsyncToLDSB64OpAdaptor::ClusterLoadAsyncToLDSB64OpAdaptor(ClusterLoadAsyncToLDSB64Op op) : ClusterLoadAsyncToLDSB64OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterLoadAsyncToLDSB64OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cpol = getProperties().cpol; (void)tblgen_cpol; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b64' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b64' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_cpol && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_cpol))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_cpol))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cpol).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b64' op attribute 'cpol' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB64Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cpol; auto attr = dict.get("cpol"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cpol` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterLoadAsyncToLDSB64Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.cpol; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cpol", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterLoadAsyncToLDSB64Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.cpol.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional ClusterLoadAsyncToLDSB64Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "cpol") return prop.cpol; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void ClusterLoadAsyncToLDSB64Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cpol") { prop.cpol = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterLoadAsyncToLDSB64Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.cpol) attrs.append("cpol", prop.cpol); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB64Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCpolAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "cpol", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB64Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.cpol))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void ClusterLoadAsyncToLDSB64Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.cpol); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t ClusterLoadAsyncToLDSB64Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute ClusterLoadAsyncToLDSB64Op::getCpol() { auto attr = getCpolAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB64Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB64Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB64Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void ClusterLoadAsyncToLDSB64Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void ClusterLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = offset; if (cpol) { odsState.getOrAddProperties().cpol = cpol; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = offset; if (cpol) { odsState.getOrAddProperties().cpol = cpol; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().cpol = cpol; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().cpol = cpol; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB64Op ClusterLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void ClusterLoadAsyncToLDSB64Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.cpol) properties.cpol = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB64Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cpol = getProperties().cpol; (void)tblgen_cpol; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_cpol, "cpol"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB64Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterLoadAsyncToLDSB64Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute cpolAttr; ::mlir::OpAsmParser::UnresolvedOperand maskRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> maskOperands(&maskRawOperand, 1); ::llvm::SMLoc maskOperandsLoc; (void)maskOperandsLoc; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, cpolAttr); if (odsResult) return ::mlir::failure(); if (cpolAttr) result.getOrAddProperties().cpol = cpolAttr; } if (parser.parseComma()) return ::mlir::failure(); maskOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(maskRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(maskOperands, odsBuildableType0, maskOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ClusterLoadAsyncToLDSB64Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getCpolAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getMask(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("cpol"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getCpolAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("cpol"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void ClusterLoadAsyncToLDSB64Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> ClusterLoadAsyncToLDSB64Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterLoadAsyncToLDSB64Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterLoadAsyncToLDSB64OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterLoadAsyncToLDSB8Op definitions //===----------------------------------------------------------------------===// namespace detail { ClusterLoadAsyncToLDSB8OpGenericAdaptorBase::ClusterLoadAsyncToLDSB8OpGenericAdaptorBase(ClusterLoadAsyncToLDSB8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t ClusterLoadAsyncToLDSB8OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute ClusterLoadAsyncToLDSB8OpGenericAdaptorBase::getCpolAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().cpol); return attr; } ::mlir::Attribute ClusterLoadAsyncToLDSB8OpGenericAdaptorBase::getCpol() { auto attr = getCpolAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB8OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB8OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB8OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail ClusterLoadAsyncToLDSB8OpAdaptor::ClusterLoadAsyncToLDSB8OpAdaptor(ClusterLoadAsyncToLDSB8Op op) : ClusterLoadAsyncToLDSB8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterLoadAsyncToLDSB8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cpol = getProperties().cpol; (void)tblgen_cpol; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b8' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b8' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_cpol && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_cpol))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_cpol))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cpol).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b8' op attribute 'cpol' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b8' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b8' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.cluster.load.async.to.lds.b8' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cpol; auto attr = dict.get("cpol"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cpol` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterLoadAsyncToLDSB8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.cpol; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cpol", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterLoadAsyncToLDSB8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.cpol.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional ClusterLoadAsyncToLDSB8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "cpol") return prop.cpol; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void ClusterLoadAsyncToLDSB8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cpol") { prop.cpol = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterLoadAsyncToLDSB8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.cpol) attrs.append("cpol", prop.cpol); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCpolAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "cpol", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.cpol))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void ClusterLoadAsyncToLDSB8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.cpol); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t ClusterLoadAsyncToLDSB8Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute ClusterLoadAsyncToLDSB8Op::getCpol() { auto attr = getCpolAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB8Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB8Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ClusterLoadAsyncToLDSB8Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void ClusterLoadAsyncToLDSB8Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void ClusterLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = offset; if (cpol) { odsState.getOrAddProperties().cpol = cpol; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = offset; if (cpol) { odsState.getOrAddProperties().cpol = cpol; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().cpol = cpol; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.addOperands(mask); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().cpol = cpol; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute cpol, ::mlir::Value mask, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(cpol), std::forward(mask), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ClusterLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterLoadAsyncToLDSB8Op ClusterLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void ClusterLoadAsyncToLDSB8Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.cpol) properties.cpol = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB8Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cpol = getProperties().cpol; (void)tblgen_cpol; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_cpol, "cpol"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterLoadAsyncToLDSB8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterLoadAsyncToLDSB8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute cpolAttr; ::mlir::OpAsmParser::UnresolvedOperand maskRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> maskOperands(&maskRawOperand, 1); ::llvm::SMLoc maskOperandsLoc; (void)maskOperandsLoc; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, cpolAttr); if (odsResult) return ::mlir::failure(); if (cpolAttr) result.getOrAddProperties().cpol = cpolAttr; } if (parser.parseComma()) return ::mlir::failure(); maskOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(maskRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(maskOperands, odsBuildableType0, maskOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ClusterLoadAsyncToLDSB8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getCpolAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getMask(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("cpol"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getCpolAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("cpol"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void ClusterLoadAsyncToLDSB8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> ClusterLoadAsyncToLDSB8Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterLoadAsyncToLDSB8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterLoadAsyncToLDSB8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterWorkgroupIdXOp definitions //===----------------------------------------------------------------------===// namespace detail { ClusterWorkgroupIdXOpGenericAdaptorBase::ClusterWorkgroupIdXOpGenericAdaptorBase(ClusterWorkgroupIdXOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterWorkgroupIdXOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ClusterWorkgroupIdXOpAdaptor::ClusterWorkgroupIdXOpAdaptor(ClusterWorkgroupIdXOp op) : ClusterWorkgroupIdXOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterWorkgroupIdXOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.cluster.workgroup.id.x' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdXOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterWorkgroupIdXOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterWorkgroupIdXOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ClusterWorkgroupIdXOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ClusterWorkgroupIdXOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterWorkgroupIdXOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ClusterWorkgroupIdXOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdXOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ClusterWorkgroupIdXOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterWorkgroupIdXOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ClusterWorkgroupIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ClusterWorkgroupIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ClusterWorkgroupIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ClusterWorkgroupIdXOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterWorkgroupIdXOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdXOp ClusterWorkgroupIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ClusterWorkgroupIdXOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdXOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterWorkgroupIdXOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ClusterWorkgroupIdXOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ClusterWorkgroupIdXOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterWorkgroupIdXOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterWorkgroupIdXOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterWorkgroupIdYOp definitions //===----------------------------------------------------------------------===// namespace detail { ClusterWorkgroupIdYOpGenericAdaptorBase::ClusterWorkgroupIdYOpGenericAdaptorBase(ClusterWorkgroupIdYOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterWorkgroupIdYOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ClusterWorkgroupIdYOpAdaptor::ClusterWorkgroupIdYOpAdaptor(ClusterWorkgroupIdYOp op) : ClusterWorkgroupIdYOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterWorkgroupIdYOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.cluster.workgroup.id.y' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdYOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterWorkgroupIdYOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterWorkgroupIdYOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ClusterWorkgroupIdYOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ClusterWorkgroupIdYOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterWorkgroupIdYOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ClusterWorkgroupIdYOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdYOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ClusterWorkgroupIdYOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterWorkgroupIdYOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ClusterWorkgroupIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ClusterWorkgroupIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ClusterWorkgroupIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ClusterWorkgroupIdYOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterWorkgroupIdYOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdYOp ClusterWorkgroupIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ClusterWorkgroupIdYOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdYOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterWorkgroupIdYOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ClusterWorkgroupIdYOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ClusterWorkgroupIdYOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterWorkgroupIdYOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterWorkgroupIdYOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ClusterWorkgroupIdZOp definitions //===----------------------------------------------------------------------===// namespace detail { ClusterWorkgroupIdZOpGenericAdaptorBase::ClusterWorkgroupIdZOpGenericAdaptorBase(ClusterWorkgroupIdZOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterWorkgroupIdZOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ClusterWorkgroupIdZOpAdaptor::ClusterWorkgroupIdZOpAdaptor(ClusterWorkgroupIdZOp op) : ClusterWorkgroupIdZOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ClusterWorkgroupIdZOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.cluster.workgroup.id.z' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdZOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ClusterWorkgroupIdZOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ClusterWorkgroupIdZOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ClusterWorkgroupIdZOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ClusterWorkgroupIdZOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ClusterWorkgroupIdZOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ClusterWorkgroupIdZOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdZOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ClusterWorkgroupIdZOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ClusterWorkgroupIdZOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ClusterWorkgroupIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ClusterWorkgroupIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ClusterWorkgroupIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ClusterWorkgroupIdZOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ClusterWorkgroupIdZOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ClusterWorkgroupIdZOp ClusterWorkgroupIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ClusterWorkgroupIdZOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ClusterWorkgroupIdZOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ClusterWorkgroupIdZOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ClusterWorkgroupIdZOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ClusterWorkgroupIdZOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ClusterWorkgroupIdZOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ClusterWorkgroupIdZOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtF32Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtF32Bf8OpGenericAdaptorBase::CvtF32Bf8OpGenericAdaptorBase(CvtF32Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtF32Bf8OpGenericAdaptorBase::getByteSel() { auto attr = getByteSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtF32Bf8OpAdaptor::CvtF32Bf8OpAdaptor(CvtF32Bf8Op op) : CvtF32Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtF32Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_byteSel = getProperties().byteSel; (void)tblgen_byteSel; if (!tblgen_byteSel) return emitError(loc, "'rocdl.cvt.f32.bf8' op requires attribute 'byteSel'"); if (tblgen_byteSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_byteSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_byteSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.f32.bf8' op attribute 'byteSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtF32Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.byteSel; auto attr = dict.get("byteSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `byteSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtF32Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.byteSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("byteSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtF32Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.byteSel.getAsOpaquePointer())); } std::optional CvtF32Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "byteSel") return prop.byteSel; return std::nullopt; } void CvtF32Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "byteSel") { prop.byteSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtF32Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.byteSel) attrs.append("byteSel", prop.byteSel); } ::llvm::LogicalResult CvtF32Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getByteSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "byteSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtF32Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.byteSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtF32Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.byteSel); } uint32_t CvtF32Bf8Op::getByteSel() { auto attr = getByteSelAttr(); return attr.getValue().getZExtValue(); } void CvtF32Bf8Op::setByteSel(uint32_t attrValue) { getProperties().byteSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { odsState.addOperands(srcA); odsState.getOrAddProperties().byteSel = byteSel; odsState.addTypes(res); } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(byteSel)); } void CvtF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { odsState.addOperands(srcA); odsState.getOrAddProperties().byteSel = byteSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(byteSel)); } void CvtF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, uint32_t byteSel) { odsState.addOperands(srcA); odsState.getOrAddProperties().byteSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), byteSel); odsState.addTypes(res); } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, uint32_t byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, uint32_t byteSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(byteSel)); } void CvtF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, uint32_t byteSel) { odsState.addOperands(srcA); odsState.getOrAddProperties().byteSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), byteSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, uint32_t byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, uint32_t byteSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(byteSel)); } void CvtF32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtF32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Bf8Op CvtF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtF32Bf8Op::verifyInvariantsImpl() { auto tblgen_byteSel = getProperties().byteSel; (void)tblgen_byteSel; if (!tblgen_byteSel) return emitOpError("requires attribute 'byteSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_byteSel, "byteSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtF32Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtF32Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcAOperands(&srcARawOperand, 1); ::llvm::SMLoc srcAOperandsLoc; (void)srcAOperandsLoc; ::mlir::IntegerAttr byteSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcARawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(byteSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (byteSelAttr) result.getOrAddProperties().byteSel = byteSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcAOperands, odsBuildableType0, srcAOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtF32Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("byteSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrcA(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getByteSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtF32Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtF32Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtF32Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtF32Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtF32Fp8OpGenericAdaptorBase::CvtF32Fp8OpGenericAdaptorBase(CvtF32Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtF32Fp8OpGenericAdaptorBase::getByteSel() { auto attr = getByteSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtF32Fp8OpAdaptor::CvtF32Fp8OpAdaptor(CvtF32Fp8Op op) : CvtF32Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtF32Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_byteSel = getProperties().byteSel; (void)tblgen_byteSel; if (!tblgen_byteSel) return emitError(loc, "'rocdl.cvt.f32.fp8' op requires attribute 'byteSel'"); if (tblgen_byteSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_byteSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_byteSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.f32.fp8' op attribute 'byteSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtF32Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.byteSel; auto attr = dict.get("byteSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `byteSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtF32Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.byteSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("byteSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtF32Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.byteSel.getAsOpaquePointer())); } std::optional CvtF32Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "byteSel") return prop.byteSel; return std::nullopt; } void CvtF32Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "byteSel") { prop.byteSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtF32Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.byteSel) attrs.append("byteSel", prop.byteSel); } ::llvm::LogicalResult CvtF32Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getByteSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "byteSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtF32Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.byteSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtF32Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.byteSel); } uint32_t CvtF32Fp8Op::getByteSel() { auto attr = getByteSelAttr(); return attr.getValue().getZExtValue(); } void CvtF32Fp8Op::setByteSel(uint32_t attrValue) { getProperties().byteSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { odsState.addOperands(srcA); odsState.getOrAddProperties().byteSel = byteSel; odsState.addTypes(res); } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(byteSel)); } void CvtF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { odsState.addOperands(srcA); odsState.getOrAddProperties().byteSel = byteSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::IntegerAttr byteSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(byteSel)); } void CvtF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, uint32_t byteSel) { odsState.addOperands(srcA); odsState.getOrAddProperties().byteSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), byteSel); odsState.addTypes(res); } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, uint32_t byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, uint32_t byteSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(byteSel)); } void CvtF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, uint32_t byteSel) { odsState.addOperands(srcA); odsState.getOrAddProperties().byteSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), byteSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, uint32_t byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, uint32_t byteSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(byteSel)); } void CvtF32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtF32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtF32Fp8Op CvtF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtF32Fp8Op::verifyInvariantsImpl() { auto tblgen_byteSel = getProperties().byteSel; (void)tblgen_byteSel; if (!tblgen_byteSel) return emitOpError("requires attribute 'byteSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_byteSel, "byteSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtF32Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtF32Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcAOperands(&srcARawOperand, 1); ::llvm::SMLoc srcAOperandsLoc; (void)srcAOperandsLoc; ::mlir::IntegerAttr byteSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcARawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(byteSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (byteSelAttr) result.getOrAddProperties().byteSel = byteSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcAOperands, odsBuildableType0, srcAOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtF32Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("byteSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrcA(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getByteSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtF32Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtF32Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtF32Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkBf8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkBf8F32OpGenericAdaptorBase::CvtPkBf8F32OpGenericAdaptorBase(CvtPkBf8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtPkBf8F32OpGenericAdaptorBase::getWordSel() { auto attr = getWordSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkBf8F32OpAdaptor::CvtPkBf8F32OpAdaptor(CvtPkBf8F32Op op) : CvtPkBf8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkBf8F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_wordSel = getProperties().wordSel; (void)tblgen_wordSel; if (!tblgen_wordSel) return emitError(loc, "'rocdl.cvt.pk.bf8.f32' op requires attribute 'wordSel'"); if (tblgen_wordSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_wordSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_wordSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.pk.bf8.f32' op attribute 'wordSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkBf8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.wordSel; auto attr = dict.get("wordSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `wordSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkBf8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.wordSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("wordSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkBf8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.wordSel.getAsOpaquePointer())); } std::optional CvtPkBf8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "wordSel") return prop.wordSel; return std::nullopt; } void CvtPkBf8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "wordSel") { prop.wordSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkBf8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.wordSel) attrs.append("wordSel", prop.wordSel); } ::llvm::LogicalResult CvtPkBf8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getWordSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "wordSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkBf8F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.wordSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkBf8F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.wordSel); } bool CvtPkBf8F32Op::getWordSel() { auto attr = getWordSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkBf8F32Op::setWordSel(bool attrValue) { getProperties().wordSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtPkBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().wordSel = wordSel; odsState.addTypes(res); } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); } void CvtPkBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().wordSel = wordSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); } void CvtPkBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().wordSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), wordSel); odsState.addTypes(res); } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); } void CvtPkBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().wordSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), wordSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); } void CvtPkBf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkBf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkBf8F32Op CvtPkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkBf8F32Op::verifyInvariantsImpl() { auto tblgen_wordSel = getProperties().wordSel; (void)tblgen_wordSel; if (!tblgen_wordSel) return emitOpError("requires attribute 'wordSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_wordSel, "wordSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkBf8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkBf8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcAOperands(&srcARawOperand, 1); ::llvm::SMLoc srcAOperandsLoc; (void)srcAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcBOperands(&srcBRawOperand, 1); ::llvm::SMLoc srcBOperandsLoc; (void)srcBOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::IntegerAttr wordSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcBRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(wordSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (wordSelAttr) result.getOrAddProperties().wordSel = wordSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getF32Type(); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcAOperands, odsBuildableType0, srcAOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcBOperands, odsBuildableType0, srcBOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(oldOperands, odsBuildableType1, oldOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkBf8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("wordSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrcA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrcB(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getWordSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkBf8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkBf8F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkBf8F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkF32Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkF32Bf8OpGenericAdaptorBase::CvtPkF32Bf8OpGenericAdaptorBase(CvtPkF32Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtPkF32Bf8OpGenericAdaptorBase::getWordSel() { auto attr = getWordSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkF32Bf8OpAdaptor::CvtPkF32Bf8OpAdaptor(CvtPkF32Bf8Op op) : CvtPkF32Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkF32Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_wordSel = getProperties().wordSel; (void)tblgen_wordSel; if (!tblgen_wordSel) return emitError(loc, "'rocdl.cvt.pk.f32.bf8' op requires attribute 'wordSel'"); if (tblgen_wordSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_wordSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_wordSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.pk.f32.bf8' op attribute 'wordSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkF32Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.wordSel; auto attr = dict.get("wordSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `wordSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkF32Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.wordSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("wordSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkF32Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.wordSel.getAsOpaquePointer())); } std::optional CvtPkF32Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "wordSel") return prop.wordSel; return std::nullopt; } void CvtPkF32Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "wordSel") { prop.wordSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkF32Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.wordSel) attrs.append("wordSel", prop.wordSel); } ::llvm::LogicalResult CvtPkF32Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getWordSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "wordSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkF32Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.wordSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkF32Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.wordSel); } bool CvtPkF32Bf8Op::getWordSel() { auto attr = getWordSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkF32Bf8Op::setWordSel(bool attrValue) { getProperties().wordSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtPkF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { odsState.addOperands(src); odsState.getOrAddProperties().wordSel = wordSel; odsState.addTypes(res); } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(wordSel)); } void CvtPkF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { odsState.addOperands(src); odsState.getOrAddProperties().wordSel = wordSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(wordSel)); } void CvtPkF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, bool wordSel) { odsState.addOperands(src); odsState.getOrAddProperties().wordSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), wordSel); odsState.addTypes(res); } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, bool wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, bool wordSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(wordSel)); } void CvtPkF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, bool wordSel) { odsState.addOperands(src); odsState.getOrAddProperties().wordSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), wordSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, bool wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, bool wordSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(wordSel)); } void CvtPkF32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkF32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Bf8Op CvtPkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkF32Bf8Op::verifyInvariantsImpl() { auto tblgen_wordSel = getProperties().wordSel; (void)tblgen_wordSel; if (!tblgen_wordSel) return emitOpError("requires attribute 'wordSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_wordSel, "wordSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkF32Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkF32Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr wordSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(wordSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (wordSelAttr) result.getOrAddProperties().wordSel = wordSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkF32Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("wordSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getWordSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkF32Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkF32Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkF32Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkF32Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkF32Fp8OpGenericAdaptorBase::CvtPkF32Fp8OpGenericAdaptorBase(CvtPkF32Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtPkF32Fp8OpGenericAdaptorBase::getWordSel() { auto attr = getWordSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkF32Fp8OpAdaptor::CvtPkF32Fp8OpAdaptor(CvtPkF32Fp8Op op) : CvtPkF32Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkF32Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_wordSel = getProperties().wordSel; (void)tblgen_wordSel; if (!tblgen_wordSel) return emitError(loc, "'rocdl.cvt.pk.f32.fp8' op requires attribute 'wordSel'"); if (tblgen_wordSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_wordSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_wordSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.pk.f32.fp8' op attribute 'wordSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkF32Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.wordSel; auto attr = dict.get("wordSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `wordSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkF32Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.wordSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("wordSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkF32Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.wordSel.getAsOpaquePointer())); } std::optional CvtPkF32Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "wordSel") return prop.wordSel; return std::nullopt; } void CvtPkF32Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "wordSel") { prop.wordSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkF32Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.wordSel) attrs.append("wordSel", prop.wordSel); } ::llvm::LogicalResult CvtPkF32Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getWordSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "wordSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkF32Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.wordSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkF32Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.wordSel); } bool CvtPkF32Fp8Op::getWordSel() { auto attr = getWordSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkF32Fp8Op::setWordSel(bool attrValue) { getProperties().wordSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtPkF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { odsState.addOperands(src); odsState.getOrAddProperties().wordSel = wordSel; odsState.addTypes(res); } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(wordSel)); } void CvtPkF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { odsState.addOperands(src); odsState.getOrAddProperties().wordSel = wordSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::IntegerAttr wordSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(wordSel)); } void CvtPkF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, bool wordSel) { odsState.addOperands(src); odsState.getOrAddProperties().wordSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), wordSel); odsState.addTypes(res); } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, bool wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, bool wordSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(wordSel)); } void CvtPkF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, bool wordSel) { odsState.addOperands(src); odsState.getOrAddProperties().wordSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), wordSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, bool wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, bool wordSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(wordSel)); } void CvtPkF32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkF32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkF32Fp8Op CvtPkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkF32Fp8Op::verifyInvariantsImpl() { auto tblgen_wordSel = getProperties().wordSel; (void)tblgen_wordSel; if (!tblgen_wordSel) return emitOpError("requires attribute 'wordSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_wordSel, "wordSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkF32Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkF32Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr wordSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(wordSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (wordSelAttr) result.getOrAddProperties().wordSel = wordSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkF32Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("wordSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getWordSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkF32Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkF32Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkF32Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkFp8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkFp8F32OpGenericAdaptorBase::CvtPkFp8F32OpGenericAdaptorBase(CvtPkFp8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtPkFp8F32OpGenericAdaptorBase::getWordSel() { auto attr = getWordSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkFp8F32OpAdaptor::CvtPkFp8F32OpAdaptor(CvtPkFp8F32Op op) : CvtPkFp8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkFp8F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_wordSel = getProperties().wordSel; (void)tblgen_wordSel; if (!tblgen_wordSel) return emitError(loc, "'rocdl.cvt.pk.fp8.f32' op requires attribute 'wordSel'"); if (tblgen_wordSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_wordSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_wordSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.pk.fp8.f32' op attribute 'wordSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkFp8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.wordSel; auto attr = dict.get("wordSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `wordSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkFp8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.wordSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("wordSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkFp8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.wordSel.getAsOpaquePointer())); } std::optional CvtPkFp8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "wordSel") return prop.wordSel; return std::nullopt; } void CvtPkFp8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "wordSel") { prop.wordSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkFp8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.wordSel) attrs.append("wordSel", prop.wordSel); } ::llvm::LogicalResult CvtPkFp8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getWordSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "wordSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkFp8F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.wordSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkFp8F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.wordSel); } bool CvtPkFp8F32Op::getWordSel() { auto attr = getWordSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkFp8F32Op::setWordSel(bool attrValue) { getProperties().wordSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtPkFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().wordSel = wordSel; odsState.addTypes(res); } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); } void CvtPkFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().wordSel = wordSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr wordSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); } void CvtPkFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().wordSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), wordSel); odsState.addTypes(res); } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); } void CvtPkFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().wordSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), wordSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, bool wordSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(wordSel)); } void CvtPkFp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkFp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkFp8F32Op CvtPkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkFp8F32Op::verifyInvariantsImpl() { auto tblgen_wordSel = getProperties().wordSel; (void)tblgen_wordSel; if (!tblgen_wordSel) return emitOpError("requires attribute 'wordSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_wordSel, "wordSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkFp8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkFp8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcAOperands(&srcARawOperand, 1); ::llvm::SMLoc srcAOperandsLoc; (void)srcAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcBOperands(&srcBRawOperand, 1); ::llvm::SMLoc srcBOperandsLoc; (void)srcBOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::IntegerAttr wordSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcBRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(wordSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (wordSelAttr) result.getOrAddProperties().wordSel = wordSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getF32Type(); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcAOperands, odsBuildableType0, srcAOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcBOperands, odsBuildableType0, srcBOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(oldOperands, odsBuildableType1, oldOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkFp8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("wordSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrcA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrcB(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getWordSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkFp8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkFp8F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkFp8F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkRtz definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkRtzGenericAdaptorBase::CvtPkRtzGenericAdaptorBase(CvtPkRtz op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtPkRtzAdaptor::CvtPkRtzAdaptor(CvtPkRtz op) : CvtPkRtzGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkRtzAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtPkRtz::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtPkRtz::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkRtz::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtPkRtz::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtPkRtz::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtPkRtz::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtPkRtz::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtPkRtz::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addTypes(res); } CvtPkRtz CvtPkRtz::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkRtz CvtPkRtz::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB)); } void CvtPkRtz::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB) { odsState.addOperands(srcA); odsState.addOperands(srcB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkRtz CvtPkRtz::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkRtz CvtPkRtz::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB)); } void CvtPkRtz::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkRtz CvtPkRtz::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkRtz CvtPkRtz::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkRtz::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkRtz CvtPkRtz::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkRtz CvtPkRtz::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkRtz::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkRtz::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkRtz::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcAOperands(&srcARawOperand, 1); ::llvm::SMLoc srcAOperandsLoc; (void)srcAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcBOperands(&srcBRawOperand, 1); ::llvm::SMLoc srcBOperandsLoc; (void)srcBOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcBRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcAOperands, odsBuildableType0, srcAOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcBOperands, odsBuildableType0, srcBOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkRtz::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrcA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrcB(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkRtz::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkRtz) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk16Bf16Bf6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk16Bf16Bf6OpGenericAdaptorBase::CvtPkScalePk16Bf16Bf6OpGenericAdaptorBase(CvtPkScalePk16Bf16Bf6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk16Bf16Bf6OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk16Bf16Bf6OpAdaptor::CvtPkScalePk16Bf16Bf6OpAdaptor(CvtPkScalePk16Bf16Bf6Op op) : CvtPkScalePk16Bf16Bf6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk16Bf16Bf6OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk16.bf16.bf6' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk16.bf16.bf6' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16Bf16Bf6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk16Bf16Bf6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk16Bf16Bf6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk16Bf16Bf6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk16Bf16Bf6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk16Bf16Bf6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk16Bf16Bf6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16Bf16Bf6Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16Bf16Bf6Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk16Bf16Bf6Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk16Bf16Bf6Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk16Bf16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16Bf16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16Bf16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16Bf16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16Bf16Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk16Bf16Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Bf6Op CvtPkScalePk16Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk16Bf16Bf6Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps9(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16Bf16Bf6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk16Bf16Bf6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({3} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16Bf16Bf6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk16Bf16Bf6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk16Bf16Bf6Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk16Bf16Bf6OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk16Bf16Fp6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk16Bf16Fp6OpGenericAdaptorBase::CvtPkScalePk16Bf16Fp6OpGenericAdaptorBase(CvtPkScalePk16Bf16Fp6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk16Bf16Fp6OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk16Bf16Fp6OpAdaptor::CvtPkScalePk16Bf16Fp6OpAdaptor(CvtPkScalePk16Bf16Fp6Op op) : CvtPkScalePk16Bf16Fp6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk16Bf16Fp6OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk16.bf16.fp6' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk16.bf16.fp6' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16Bf16Fp6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk16Bf16Fp6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk16Bf16Fp6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk16Bf16Fp6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk16Bf16Fp6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk16Bf16Fp6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk16Bf16Fp6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16Bf16Fp6Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16Bf16Fp6Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk16Bf16Fp6Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk16Bf16Fp6Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk16Bf16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16Bf16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16Bf16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16Bf16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16Bf16Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk16Bf16Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16Bf16Fp6Op CvtPkScalePk16Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk16Bf16Fp6Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps9(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16Bf16Fp6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk16Bf16Fp6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({3} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16Bf16Fp6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk16Bf16Fp6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk16Bf16Fp6Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk16Bf16Fp6OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk16F16Bf6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk16F16Bf6OpGenericAdaptorBase::CvtPkScalePk16F16Bf6OpGenericAdaptorBase(CvtPkScalePk16F16Bf6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk16F16Bf6OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk16F16Bf6OpAdaptor::CvtPkScalePk16F16Bf6OpAdaptor(CvtPkScalePk16F16Bf6Op op) : CvtPkScalePk16F16Bf6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk16F16Bf6OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk16.f16.bf6' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk16.f16.bf6' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F16Bf6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk16F16Bf6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk16F16Bf6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk16F16Bf6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk16F16Bf6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk16F16Bf6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk16F16Bf6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F16Bf6Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16F16Bf6Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk16F16Bf6Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk16F16Bf6Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk16F16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F16Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk16F16Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Bf6Op CvtPkScalePk16F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk16F16Bf6Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps10(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F16Bf6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk16F16Bf6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({3} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16F16Bf6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk16F16Bf6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk16F16Bf6Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk16F16Bf6OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk16F16Fp6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk16F16Fp6OpGenericAdaptorBase::CvtPkScalePk16F16Fp6OpGenericAdaptorBase(CvtPkScalePk16F16Fp6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk16F16Fp6OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk16F16Fp6OpAdaptor::CvtPkScalePk16F16Fp6OpAdaptor(CvtPkScalePk16F16Fp6Op op) : CvtPkScalePk16F16Fp6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk16F16Fp6OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk16.f16.fp6' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk16.f16.fp6' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F16Fp6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk16F16Fp6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk16F16Fp6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk16F16Fp6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk16F16Fp6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk16F16Fp6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk16F16Fp6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F16Fp6Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16F16Fp6Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk16F16Fp6Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk16F16Fp6Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk16F16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F16Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk16F16Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F16Fp6Op CvtPkScalePk16F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk16F16Fp6Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps10(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F16Fp6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk16F16Fp6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({3} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16F16Fp6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk16F16Fp6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk16F16Fp6Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk16F16Fp6OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk16F32Bf6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk16F32Bf6OpGenericAdaptorBase::CvtPkScalePk16F32Bf6OpGenericAdaptorBase(CvtPkScalePk16F32Bf6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk16F32Bf6OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk16F32Bf6OpAdaptor::CvtPkScalePk16F32Bf6OpAdaptor(CvtPkScalePk16F32Bf6Op op) : CvtPkScalePk16F32Bf6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk16F32Bf6OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk16.f32.bf6' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk16.f32.bf6' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F32Bf6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk16F32Bf6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk16F32Bf6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk16F32Bf6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk16F32Bf6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk16F32Bf6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk16F32Bf6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F32Bf6Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16F32Bf6Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk16F32Bf6Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk16F32Bf6Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk16F32Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F32Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F32Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F32Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F32Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk16F32Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Bf6Op CvtPkScalePk16F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk16F32Bf6Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F32Bf6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk16F32Bf6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({3} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16F32Bf6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk16F32Bf6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk16F32Bf6Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk16F32Bf6OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk16F32Fp6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk16F32Fp6OpGenericAdaptorBase::CvtPkScalePk16F32Fp6OpGenericAdaptorBase(CvtPkScalePk16F32Fp6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk16F32Fp6OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk16F32Fp6OpAdaptor::CvtPkScalePk16F32Fp6OpAdaptor(CvtPkScalePk16F32Fp6Op op) : CvtPkScalePk16F32Fp6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk16F32Fp6OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk16.f32.fp6' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk16.f32.fp6' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F32Fp6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk16F32Fp6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk16F32Fp6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk16F32Fp6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk16F32Fp6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk16F32Fp6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk16F32Fp6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F32Fp6Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16F32Fp6Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk16F32Fp6Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk16F32Fp6Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk16F32Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F32Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F32Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F32Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk16F32Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk16F32Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk16F32Fp6Op CvtPkScalePk16F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk16F32Fp6Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk16F32Fp6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk16F32Fp6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({3} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk16F32Fp6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk16F32Fp6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk16F32Fp6Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk16F32Fp6OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8Bf16Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8Bf16Bf8OpGenericAdaptorBase::CvtPkScalePk8Bf16Bf8OpGenericAdaptorBase(CvtPkScalePk8Bf16Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8Bf16Bf8OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8Bf16Bf8OpAdaptor::CvtPkScalePk8Bf16Bf8OpAdaptor(CvtPkScalePk8Bf16Bf8Op op) : CvtPkScalePk8Bf16Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8Bf16Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.bf16.bf8' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.bf16.bf8' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8Bf16Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8Bf16Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8Bf16Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8Bf16Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8Bf16Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8Bf16Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8Bf16Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8Bf16Bf8Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8Bf16Bf8Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8Bf16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8Bf16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Bf8Op CvtPkScalePk8Bf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8Bf16Bf8Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8Bf16Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8Bf16Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8Bf16Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8Bf16Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8Bf16Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8Bf16Fp4Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8Bf16Fp4OpGenericAdaptorBase::CvtPkScalePk8Bf16Fp4OpGenericAdaptorBase(CvtPkScalePk8Bf16Fp4Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8Bf16Fp4OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8Bf16Fp4OpAdaptor::CvtPkScalePk8Bf16Fp4OpAdaptor(CvtPkScalePk8Bf16Fp4Op op) : CvtPkScalePk8Bf16Fp4OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8Bf16Fp4OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.bf16.fp4' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.bf16.fp4' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp4Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8Bf16Fp4Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8Bf16Fp4Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8Bf16Fp4Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8Bf16Fp4Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8Bf16Fp4Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp4Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp4Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8Bf16Fp4Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8Bf16Fp4Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8Bf16Fp4Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8Bf16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8Bf16Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp4Op CvtPkScalePk8Bf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp4Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp4Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8Bf16Fp4Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType0, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8Bf16Fp4Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8Bf16Fp4Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8Bf16Fp4Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8Bf16Fp4OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8Bf16Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8Bf16Fp8OpGenericAdaptorBase::CvtPkScalePk8Bf16Fp8OpGenericAdaptorBase(CvtPkScalePk8Bf16Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8Bf16Fp8OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8Bf16Fp8OpAdaptor::CvtPkScalePk8Bf16Fp8OpAdaptor(CvtPkScalePk8Bf16Fp8Op op) : CvtPkScalePk8Bf16Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8Bf16Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.bf16.fp8' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.bf16.fp8' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8Bf16Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8Bf16Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8Bf16Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8Bf16Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8Bf16Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8Bf16Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8Bf16Fp8Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8Bf16Fp8Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8Bf16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8Bf16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8Bf16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8Bf16Fp8Op CvtPkScalePk8Bf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp8Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8Bf16Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8Bf16Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8Bf16Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8Bf16Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8Bf16Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8Bf16Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8F16Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8F16Bf8OpGenericAdaptorBase::CvtPkScalePk8F16Bf8OpGenericAdaptorBase(CvtPkScalePk8F16Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8F16Bf8OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8F16Bf8OpAdaptor::CvtPkScalePk8F16Bf8OpAdaptor(CvtPkScalePk8F16Bf8Op op) : CvtPkScalePk8F16Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8F16Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.f16.bf8' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.f16.bf8' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8F16Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8F16Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8F16Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8F16Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8F16Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8F16Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F16Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8F16Bf8Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8F16Bf8Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8F16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8F16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Bf8Op CvtPkScalePk8F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8F16Bf8Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8F16Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F16Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8F16Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8F16Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8F16Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8F16Fp4Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8F16Fp4OpGenericAdaptorBase::CvtPkScalePk8F16Fp4OpGenericAdaptorBase(CvtPkScalePk8F16Fp4Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8F16Fp4OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8F16Fp4OpAdaptor::CvtPkScalePk8F16Fp4OpAdaptor(CvtPkScalePk8F16Fp4Op op) : CvtPkScalePk8F16Fp4OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8F16Fp4OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.f16.fp4' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.f16.fp4' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Fp4Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8F16Fp4Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8F16Fp4Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8F16Fp4Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8F16Fp4Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8F16Fp4Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8F16Fp4Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Fp4Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F16Fp4Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8F16Fp4Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8F16Fp4Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8F16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8F16Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp4Op CvtPkScalePk8F16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8F16Fp4Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Fp4Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8F16Fp4Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType0, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F16Fp4Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8F16Fp4Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8F16Fp4Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8F16Fp4OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8F16Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8F16Fp8OpGenericAdaptorBase::CvtPkScalePk8F16Fp8OpGenericAdaptorBase(CvtPkScalePk8F16Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8F16Fp8OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8F16Fp8OpAdaptor::CvtPkScalePk8F16Fp8OpAdaptor(CvtPkScalePk8F16Fp8Op op) : CvtPkScalePk8F16Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8F16Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.f16.fp8' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.f16.fp8' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8F16Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8F16Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8F16Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8F16Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8F16Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8F16Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F16Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8F16Fp8Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8F16Fp8Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8F16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8F16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F16Fp8Op CvtPkScalePk8F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8F16Fp8Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F16Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8F16Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F16Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8F16Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8F16Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8F16Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8F32Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8F32Bf8OpGenericAdaptorBase::CvtPkScalePk8F32Bf8OpGenericAdaptorBase(CvtPkScalePk8F32Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8F32Bf8OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8F32Bf8OpAdaptor::CvtPkScalePk8F32Bf8OpAdaptor(CvtPkScalePk8F32Bf8Op op) : CvtPkScalePk8F32Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8F32Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.f32.bf8' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.f32.bf8' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8F32Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8F32Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8F32Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8F32Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8F32Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8F32Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F32Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8F32Bf8Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8F32Bf8Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8F32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8F32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Bf8Op CvtPkScalePk8F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8F32Bf8Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8F32Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F32Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8F32Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8F32Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8F32Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8F32Fp4Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8F32Fp4OpGenericAdaptorBase::CvtPkScalePk8F32Fp4OpGenericAdaptorBase(CvtPkScalePk8F32Fp4Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8F32Fp4OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8F32Fp4OpAdaptor::CvtPkScalePk8F32Fp4OpAdaptor(CvtPkScalePk8F32Fp4Op op) : CvtPkScalePk8F32Fp4OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8F32Fp4OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.f32.fp4' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.f32.fp4' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Fp4Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8F32Fp4Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8F32Fp4Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8F32Fp4Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8F32Fp4Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8F32Fp4Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8F32Fp4Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Fp4Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F32Fp4Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8F32Fp4Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8F32Fp4Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8F32Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8F32Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp4Op CvtPkScalePk8F32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8F32Fp4Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Fp4Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8F32Fp4Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType0, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F32Fp4Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8F32Fp4Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8F32Fp4Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8F32Fp4OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtPkScalePk8F32Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtPkScalePk8F32Fp8OpGenericAdaptorBase::CvtPkScalePk8F32Fp8OpGenericAdaptorBase(CvtPkScalePk8F32Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtPkScalePk8F32Fp8OpGenericAdaptorBase::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtPkScalePk8F32Fp8OpAdaptor::CvtPkScalePk8F32Fp8OpAdaptor(CvtPkScalePk8F32Fp8Op op) : CvtPkScalePk8F32Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtPkScalePk8F32Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitError(loc, "'rocdl.cvt.scale.pk8.f32.fp8' op requires attribute 'scaleSel'"); if (tblgen_scaleSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_scaleSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_scaleSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scale.pk8.f32.fp8' op attribute 'scaleSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.scaleSel; auto attr = dict.get("scaleSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtPkScalePk8F32Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.scaleSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtPkScalePk8F32Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.scaleSel.getAsOpaquePointer())); } std::optional CvtPkScalePk8F32Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "scaleSel") return prop.scaleSel; return std::nullopt; } void CvtPkScalePk8F32Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "scaleSel") { prop.scaleSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtPkScalePk8F32Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.scaleSel) attrs.append("scaleSel", prop.scaleSel); } ::llvm::LogicalResult CvtPkScalePk8F32Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getScaleSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "scaleSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.scaleSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F32Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.scaleSel); } uint32_t CvtPkScalePk8F32Fp8Op::getScaleSel() { auto attr = getScaleSelAttr(); return attr.getValue().getZExtValue(); } void CvtPkScalePk8F32Fp8Op::setScaleSel(uint32_t attrValue) { getProperties().scaleSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtPkScalePk8F32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; odsState.addTypes(res); } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = scaleSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); odsState.addTypes(res); } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().scaleSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), scaleSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t scaleSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(scaleSel)); } void CvtPkScalePk8F32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtPkScalePk8F32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtPkScalePk8F32Fp8Op CvtPkScalePk8F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtPkScalePk8F32Fp8Op::verifyInvariantsImpl() { auto tblgen_scaleSel = getProperties().scaleSel; (void)tblgen_scaleSel; if (!tblgen_scaleSel) return emitOpError("requires attribute 'scaleSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_scaleSel, "scaleSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtPkScalePk8F32Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtPkScalePk8F32Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::IntegerAttr scaleSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (scaleSelAttr) result.getOrAddProperties().scaleSel = scaleSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtPkScalePk8F32Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("scaleSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getScaleSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtPkScalePk8F32Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtPkScalePk8F32Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtPkScalePk8F32Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF322xPk16Bf6F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF322xPk16Bf6F32OpGenericAdaptorBase::CvtScaleF322xPk16Bf6F32OpGenericAdaptorBase(CvtScaleF322xPk16Bf6F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF322xPk16Bf6F32OpAdaptor::CvtScaleF322xPk16Bf6F32OpAdaptor(CvtScaleF322xPk16Bf6F32Op op) : CvtScaleF322xPk16Bf6F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF322xPk16Bf6F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF322xPk16Bf6F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF322xPk16Bf6F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF322xPk16Bf6F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF322xPk16Bf6F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF322xPk16Bf6F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF322xPk16Bf6F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF322xPk16Bf6F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF322xPk16Bf6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF322xPk16Bf6F32Op CvtScaleF322xPk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src0), std::forward(src1), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF322xPk16Bf6F32Op CvtScaleF322xPk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src0), std::forward(src1), std::forward(scale)); } void CvtScaleF322xPk16Bf6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF322xPk16Bf6F32Op CvtScaleF322xPk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src0), std::forward(src1), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF322xPk16Bf6F32Op CvtScaleF322xPk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src0), std::forward(src1), std::forward(scale)); } void CvtScaleF322xPk16Bf6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF322xPk16Bf6F32Op CvtScaleF322xPk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF322xPk16Bf6F32Op CvtScaleF322xPk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF322xPk16Bf6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF322xPk16Bf6F32Op CvtScaleF322xPk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF322xPk16Bf6F32Op CvtScaleF322xPk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF322xPk16Bf6F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF322xPk16Bf6F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF322xPk16Bf6F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(src0Operands, odsBuildableType0, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src1Operands, odsBuildableType0, src1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF322xPk16Bf6F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF322xPk16Bf6F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF322xPk16Bf6F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF322xPk16Fp6F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF322xPk16Fp6F32OpGenericAdaptorBase::CvtScaleF322xPk16Fp6F32OpGenericAdaptorBase(CvtScaleF322xPk16Fp6F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF322xPk16Fp6F32OpAdaptor::CvtScaleF322xPk16Fp6F32OpAdaptor(CvtScaleF322xPk16Fp6F32Op op) : CvtScaleF322xPk16Fp6F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF322xPk16Fp6F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF322xPk16Fp6F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF322xPk16Fp6F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF322xPk16Fp6F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF322xPk16Fp6F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF322xPk16Fp6F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF322xPk16Fp6F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF322xPk16Fp6F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF322xPk16Fp6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF322xPk16Fp6F32Op CvtScaleF322xPk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src0), std::forward(src1), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF322xPk16Fp6F32Op CvtScaleF322xPk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src0), std::forward(src1), std::forward(scale)); } void CvtScaleF322xPk16Fp6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF322xPk16Fp6F32Op CvtScaleF322xPk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src0), std::forward(src1), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF322xPk16Fp6F32Op CvtScaleF322xPk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src0), std::forward(src1), std::forward(scale)); } void CvtScaleF322xPk16Fp6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF322xPk16Fp6F32Op CvtScaleF322xPk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF322xPk16Fp6F32Op CvtScaleF322xPk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF322xPk16Fp6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF322xPk16Fp6F32Op CvtScaleF322xPk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF322xPk16Fp6F32Op CvtScaleF322xPk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF322xPk16Fp6F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF322xPk16Fp6F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF322xPk16Fp6F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(src0Operands, odsBuildableType0, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src1Operands, odsBuildableType0, src1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF322xPk16Fp6F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF322xPk16Fp6F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF322xPk16Fp6F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32F16Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32F16Bf8OpGenericAdaptorBase::CvtScaleF32F16Bf8OpGenericAdaptorBase(CvtScaleF32F16Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32F16Bf8OpGenericAdaptorBase::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } bool CvtScaleF32F16Bf8OpGenericAdaptorBase::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32F16Bf8OpAdaptor::CvtScaleF32F16Bf8OpAdaptor(CvtScaleF32F16Bf8Op op) : CvtScaleF32F16Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32F16Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.f16.bf8' op requires attribute 'dstLoHiSel'"); auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.f16.bf8' op requires attribute 'srcSelIndex'"); if (tblgen_srcSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.f16.bf8' op attribute 'srcSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_dstLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.f16.bf8' op attribute 'dstLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F16Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstLoHiSel; auto attr = dict.get("dstLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.srcSelIndex; auto attr = dict.get("srcSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32F16Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstLoHiSel", propStorage)); } { const auto &propStorage = prop.srcSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32F16Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstLoHiSel.getAsOpaquePointer()), llvm::hash_value(prop.srcSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32F16Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstLoHiSel") return prop.dstLoHiSel; if (name == "srcSelIndex") return prop.srcSelIndex; return std::nullopt; } void CvtScaleF32F16Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstLoHiSel") { prop.dstLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } if (name == "srcSelIndex") { prop.srcSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32F16Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstLoHiSel) attrs.append("dstLoHiSel", prop.dstLoHiSel); if (prop.srcSelIndex) attrs.append("srcSelIndex", prop.srcSelIndex); } ::llvm::LogicalResult CvtScaleF32F16Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "dstLoHiSel", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSrcSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "srcSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F16Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstLoHiSel))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.srcSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32F16Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstLoHiSel); writer.writeAttribute(prop.srcSelIndex); } uint32_t CvtScaleF32F16Bf8Op::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } bool CvtScaleF32F16Bf8Op::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32F16Bf8Op::setSrcSelIndex(uint32_t attrValue) { getProperties().srcSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32F16Bf8Op::setDstLoHiSel(bool attrValue) { getProperties().dstLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32F16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; odsState.addTypes(res); } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); } void CvtScaleF32F16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); } void CvtScaleF32F16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); odsState.addTypes(res); } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); } void CvtScaleF32F16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); } void CvtScaleF32F16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32F16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Bf8Op CvtScaleF32F16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32F16Bf8Op::verifyInvariantsImpl() { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitOpError("requires attribute 'dstLoHiSel'"); auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitOpError("requires attribute 'srcSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_srcSelIndex, "srcSelIndex"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_dstLoHiSel, "dstLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F16Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32F16Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcSelIndexAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstLoHiSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (srcSelIndexAttr) result.getOrAddProperties().srcSelIndex = srcSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (dstLoHiSelAttr) result.getOrAddProperties().dstLoHiSel = dstLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, odsBuildableType1, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32F16Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcSelIndex"); elidedAttrs.push_back("dstLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32F16Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32F16Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32F16Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32F16Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32F16Fp8OpGenericAdaptorBase::CvtScaleF32F16Fp8OpGenericAdaptorBase(CvtScaleF32F16Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32F16Fp8OpGenericAdaptorBase::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } bool CvtScaleF32F16Fp8OpGenericAdaptorBase::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32F16Fp8OpAdaptor::CvtScaleF32F16Fp8OpAdaptor(CvtScaleF32F16Fp8Op op) : CvtScaleF32F16Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32F16Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.f16.fp8' op requires attribute 'dstLoHiSel'"); auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.f16.fp8' op requires attribute 'srcSelIndex'"); if (tblgen_srcSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.f16.fp8' op attribute 'srcSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_dstLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.f16.fp8' op attribute 'dstLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F16Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstLoHiSel; auto attr = dict.get("dstLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.srcSelIndex; auto attr = dict.get("srcSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32F16Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstLoHiSel", propStorage)); } { const auto &propStorage = prop.srcSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32F16Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstLoHiSel.getAsOpaquePointer()), llvm::hash_value(prop.srcSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32F16Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstLoHiSel") return prop.dstLoHiSel; if (name == "srcSelIndex") return prop.srcSelIndex; return std::nullopt; } void CvtScaleF32F16Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstLoHiSel") { prop.dstLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } if (name == "srcSelIndex") { prop.srcSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32F16Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstLoHiSel) attrs.append("dstLoHiSel", prop.dstLoHiSel); if (prop.srcSelIndex) attrs.append("srcSelIndex", prop.srcSelIndex); } ::llvm::LogicalResult CvtScaleF32F16Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "dstLoHiSel", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSrcSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "srcSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F16Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstLoHiSel))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.srcSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32F16Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstLoHiSel); writer.writeAttribute(prop.srcSelIndex); } uint32_t CvtScaleF32F16Fp8Op::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } bool CvtScaleF32F16Fp8Op::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32F16Fp8Op::setSrcSelIndex(uint32_t attrValue) { getProperties().srcSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32F16Fp8Op::setDstLoHiSel(bool attrValue) { getProperties().dstLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32F16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; odsState.addTypes(res); } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); } void CvtScaleF32F16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); } void CvtScaleF32F16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); odsState.addTypes(res); } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); } void CvtScaleF32F16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(srcSelIndex), std::forward(dstLoHiSel)); } void CvtScaleF32F16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32F16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F16Fp8Op CvtScaleF32F16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32F16Fp8Op::verifyInvariantsImpl() { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitOpError("requires attribute 'dstLoHiSel'"); auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitOpError("requires attribute 'srcSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_srcSelIndex, "srcSelIndex"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_dstLoHiSel, "dstLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F16Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32F16Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcSelIndexAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstLoHiSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (srcSelIndexAttr) result.getOrAddProperties().srcSelIndex = srcSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (dstLoHiSelAttr) result.getOrAddProperties().dstLoHiSel = dstLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, odsBuildableType1, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32F16Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcSelIndex"); elidedAttrs.push_back("dstLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32F16Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32F16Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32F16Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32F32Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32F32Bf8OpGenericAdaptorBase::CvtScaleF32F32Bf8OpGenericAdaptorBase(CvtScaleF32F32Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32F32Bf8OpGenericAdaptorBase::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32F32Bf8OpAdaptor::CvtScaleF32F32Bf8OpAdaptor(CvtScaleF32F32Bf8Op op) : CvtScaleF32F32Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32F32Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.f32.bf8' op requires attribute 'srcSelIndex'"); if (tblgen_srcSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.f32.bf8' op attribute 'srcSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F32Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcSelIndex; auto attr = dict.get("srcSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32F32Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32F32Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32F32Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcSelIndex") return prop.srcSelIndex; return std::nullopt; } void CvtScaleF32F32Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcSelIndex") { prop.srcSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32F32Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcSelIndex) attrs.append("srcSelIndex", prop.srcSelIndex); } ::llvm::LogicalResult CvtScaleF32F32Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "srcSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F32Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32F32Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcSelIndex); } uint32_t CvtScaleF32F32Bf8Op::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32F32Bf8Op::setSrcSelIndex(uint32_t attrValue) { getProperties().srcSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32F32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.addTypes(res); } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32F32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32F32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.addTypes(res); } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32F32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32F32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32F32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Bf8Op CvtScaleF32F32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32F32Bf8Op::verifyInvariantsImpl() { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitOpError("requires attribute 'srcSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_srcSelIndex, "srcSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F32Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32F32Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcSelIndexAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (srcSelIndexAttr) result.getOrAddProperties().srcSelIndex = srcSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::FloatType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32F32Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::FloatType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32F32Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32F32Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32F32Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32F32Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32F32Fp8OpGenericAdaptorBase::CvtScaleF32F32Fp8OpGenericAdaptorBase(CvtScaleF32F32Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32F32Fp8OpGenericAdaptorBase::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32F32Fp8OpAdaptor::CvtScaleF32F32Fp8OpAdaptor(CvtScaleF32F32Fp8Op op) : CvtScaleF32F32Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32F32Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.f32.fp8' op requires attribute 'srcSelIndex'"); if (tblgen_srcSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.f32.fp8' op attribute 'srcSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F32Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcSelIndex; auto attr = dict.get("srcSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32F32Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32F32Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32F32Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcSelIndex") return prop.srcSelIndex; return std::nullopt; } void CvtScaleF32F32Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcSelIndex") { prop.srcSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32F32Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcSelIndex) attrs.append("srcSelIndex", prop.srcSelIndex); } ::llvm::LogicalResult CvtScaleF32F32Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "srcSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F32Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32F32Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcSelIndex); } uint32_t CvtScaleF32F32Fp8Op::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32F32Fp8Op::setSrcSelIndex(uint32_t attrValue) { getProperties().srcSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32F32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.addTypes(res); } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32F32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32F32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.addTypes(res); } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32F32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32F32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32F32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32F32Fp8Op CvtScaleF32F32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32F32Fp8Op::verifyInvariantsImpl() { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitOpError("requires attribute 'srcSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_srcSelIndex, "srcSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32F32Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32F32Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcSelIndexAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (srcSelIndexAttr) result.getOrAddProperties().srcSelIndex = srcSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::FloatType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32F32Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::FloatType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32F32Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32F32Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32F32Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk16Bf6Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk16Bf6Bf16OpGenericAdaptorBase::CvtScaleF32Pk16Bf6Bf16OpGenericAdaptorBase(CvtScaleF32Pk16Bf6Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk16Bf6Bf16OpAdaptor::CvtScaleF32Pk16Bf6Bf16OpAdaptor(CvtScaleF32Pk16Bf6Bf16Op op) : CvtScaleF32Pk16Bf6Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk16Bf6Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk16Bf6Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk16Bf6Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk16Bf6Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk16Bf6Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk16Bf6Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk16Bf6Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk16Bf6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk16Bf6Bf16Op CvtScaleF32Pk16Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6Bf16Op CvtScaleF32Pk16Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Bf6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6Bf16Op CvtScaleF32Pk16Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6Bf16Op CvtScaleF32Pk16Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Bf6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6Bf16Op CvtScaleF32Pk16Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6Bf16Op CvtScaleF32Pk16Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk16Bf6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6Bf16Op CvtScaleF32Pk16Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6Bf16Op CvtScaleF32Pk16Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps9(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk16Bf6Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk16Bf6Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk16Bf6Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk16Bf6Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk16Bf6F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk16Bf6F16OpGenericAdaptorBase::CvtScaleF32Pk16Bf6F16OpGenericAdaptorBase(CvtScaleF32Pk16Bf6F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk16Bf6F16OpAdaptor::CvtScaleF32Pk16Bf6F16OpAdaptor(CvtScaleF32Pk16Bf6F16Op op) : CvtScaleF32Pk16Bf6F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk16Bf6F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk16Bf6F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk16Bf6F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk16Bf6F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk16Bf6F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk16Bf6F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk16Bf6F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk16Bf6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk16Bf6F16Op CvtScaleF32Pk16Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6F16Op CvtScaleF32Pk16Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Bf6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6F16Op CvtScaleF32Pk16Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6F16Op CvtScaleF32Pk16Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Bf6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6F16Op CvtScaleF32Pk16Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6F16Op CvtScaleF32Pk16Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk16Bf6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6F16Op CvtScaleF32Pk16Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6F16Op CvtScaleF32Pk16Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps10(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk16Bf6F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk16Bf6F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk16Bf6F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk16Bf6F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk16Bf6F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk16Bf6F32OpGenericAdaptorBase::CvtScaleF32Pk16Bf6F32OpGenericAdaptorBase(CvtScaleF32Pk16Bf6F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk16Bf6F32OpAdaptor::CvtScaleF32Pk16Bf6F32OpAdaptor(CvtScaleF32Pk16Bf6F32Op op) : CvtScaleF32Pk16Bf6F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk16Bf6F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk16Bf6F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk16Bf6F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk16Bf6F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk16Bf6F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk16Bf6F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk16Bf6F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk16Bf6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk16Bf6F32Op CvtScaleF32Pk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6F32Op CvtScaleF32Pk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Bf6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6F32Op CvtScaleF32Pk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6F32Op CvtScaleF32Pk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Bf6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6F32Op CvtScaleF32Pk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6F32Op CvtScaleF32Pk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk16Bf6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Bf6F32Op CvtScaleF32Pk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Bf6F32Op CvtScaleF32Pk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Bf6F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk16Bf6F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk16Bf6F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk16Bf6F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk16Bf6F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk16Fp6Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk16Fp6Bf16OpGenericAdaptorBase::CvtScaleF32Pk16Fp6Bf16OpGenericAdaptorBase(CvtScaleF32Pk16Fp6Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk16Fp6Bf16OpAdaptor::CvtScaleF32Pk16Fp6Bf16OpAdaptor(CvtScaleF32Pk16Fp6Bf16Op op) : CvtScaleF32Pk16Fp6Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk16Fp6Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk16Fp6Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk16Fp6Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk16Fp6Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk16Fp6Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk16Fp6Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk16Fp6Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk16Fp6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk16Fp6Bf16Op CvtScaleF32Pk16Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6Bf16Op CvtScaleF32Pk16Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Fp6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6Bf16Op CvtScaleF32Pk16Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6Bf16Op CvtScaleF32Pk16Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Fp6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6Bf16Op CvtScaleF32Pk16Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6Bf16Op CvtScaleF32Pk16Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk16Fp6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6Bf16Op CvtScaleF32Pk16Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6Bf16Op CvtScaleF32Pk16Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps9(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk16Fp6Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk16Fp6Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk16Fp6Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk16Fp6Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk16Fp6F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk16Fp6F16OpGenericAdaptorBase::CvtScaleF32Pk16Fp6F16OpGenericAdaptorBase(CvtScaleF32Pk16Fp6F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk16Fp6F16OpAdaptor::CvtScaleF32Pk16Fp6F16OpAdaptor(CvtScaleF32Pk16Fp6F16Op op) : CvtScaleF32Pk16Fp6F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk16Fp6F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk16Fp6F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk16Fp6F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk16Fp6F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk16Fp6F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk16Fp6F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk16Fp6F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk16Fp6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk16Fp6F16Op CvtScaleF32Pk16Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6F16Op CvtScaleF32Pk16Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Fp6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6F16Op CvtScaleF32Pk16Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6F16Op CvtScaleF32Pk16Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Fp6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6F16Op CvtScaleF32Pk16Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6F16Op CvtScaleF32Pk16Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk16Fp6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6F16Op CvtScaleF32Pk16Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6F16Op CvtScaleF32Pk16Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps10(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk16Fp6F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk16Fp6F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk16Fp6F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk16Fp6F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk16Fp6F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk16Fp6F32OpGenericAdaptorBase::CvtScaleF32Pk16Fp6F32OpGenericAdaptorBase(CvtScaleF32Pk16Fp6F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk16Fp6F32OpAdaptor::CvtScaleF32Pk16Fp6F32OpAdaptor(CvtScaleF32Pk16Fp6F32Op op) : CvtScaleF32Pk16Fp6F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk16Fp6F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk16Fp6F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk16Fp6F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk16Fp6F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk16Fp6F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk16Fp6F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk16Fp6F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk16Fp6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk16Fp6F32Op CvtScaleF32Pk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6F32Op CvtScaleF32Pk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Fp6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6F32Op CvtScaleF32Pk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6F32Op CvtScaleF32Pk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk16Fp6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6F32Op CvtScaleF32Pk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6F32Op CvtScaleF32Pk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk16Fp6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk16Fp6F32Op CvtScaleF32Pk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk16Fp6F32Op CvtScaleF32Pk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk16Fp6F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk16Fp6F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk16Fp6F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk16Fp6F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk16Fp6F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32Bf16Bf6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32Bf16Bf6OpGenericAdaptorBase::CvtScaleF32Pk32Bf16Bf6OpGenericAdaptorBase(CvtScaleF32Pk32Bf16Bf6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32Bf16Bf6OpAdaptor::CvtScaleF32Pk32Bf16Bf6OpAdaptor(CvtScaleF32Pk32Bf16Bf6Op op) : CvtScaleF32Pk32Bf16Bf6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32Bf16Bf6OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Bf16Bf6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32Bf16Bf6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32Bf16Bf6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32Bf16Bf6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32Bf16Bf6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32Bf16Bf6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32Bf16Bf6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32Bf16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32Bf16Bf6Op CvtScaleF32Pk32Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf16Bf6Op CvtScaleF32Pk32Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Bf16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf16Bf6Op CvtScaleF32Pk32Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf16Bf6Op CvtScaleF32Pk32Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Bf16Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf16Bf6Op CvtScaleF32Pk32Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf16Bf6Op CvtScaleF32Pk32Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32Bf16Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf16Bf6Op CvtScaleF32Pk32Bf16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf16Bf6Op CvtScaleF32Pk32Bf16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32Bf16Bf6Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps18(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Bf16Bf6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32Bf16Bf6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({6} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32Bf16Bf6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32Bf16Bf6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32Bf16Bf6Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32Bf16Fp6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32Bf16Fp6OpGenericAdaptorBase::CvtScaleF32Pk32Bf16Fp6OpGenericAdaptorBase(CvtScaleF32Pk32Bf16Fp6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32Bf16Fp6OpAdaptor::CvtScaleF32Pk32Bf16Fp6OpAdaptor(CvtScaleF32Pk32Bf16Fp6Op op) : CvtScaleF32Pk32Bf16Fp6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32Bf16Fp6OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Bf16Fp6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32Bf16Fp6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32Bf16Fp6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32Bf16Fp6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32Bf16Fp6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32Bf16Fp6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32Bf16Fp6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32Bf16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32Bf16Fp6Op CvtScaleF32Pk32Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf16Fp6Op CvtScaleF32Pk32Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Bf16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf16Fp6Op CvtScaleF32Pk32Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf16Fp6Op CvtScaleF32Pk32Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Bf16Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf16Fp6Op CvtScaleF32Pk32Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf16Fp6Op CvtScaleF32Pk32Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32Bf16Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf16Fp6Op CvtScaleF32Pk32Bf16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf16Fp6Op CvtScaleF32Pk32Bf16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32Bf16Fp6Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps18(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Bf16Fp6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32Bf16Fp6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({6} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32Bf16Fp6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32Bf16Fp6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32Bf16Fp6Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32Bf6Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32Bf6Bf16OpGenericAdaptorBase::CvtScaleF32Pk32Bf6Bf16OpGenericAdaptorBase(CvtScaleF32Pk32Bf6Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32Bf6Bf16OpAdaptor::CvtScaleF32Pk32Bf6Bf16OpAdaptor(CvtScaleF32Pk32Bf6Bf16Op op) : CvtScaleF32Pk32Bf6Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32Bf6Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Bf6Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32Bf6Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32Bf6Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32Bf6Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32Bf6Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32Bf6Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32Bf6Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32Bf6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32Bf6Bf16Op CvtScaleF32Pk32Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf6Bf16Op CvtScaleF32Pk32Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Bf6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf6Bf16Op CvtScaleF32Pk32Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf6Bf16Op CvtScaleF32Pk32Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Bf6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf6Bf16Op CvtScaleF32Pk32Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf6Bf16Op CvtScaleF32Pk32Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32Bf6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf6Bf16Op CvtScaleF32Pk32Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf6Bf16Op CvtScaleF32Pk32Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32Bf6Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps18(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Bf6Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32Bf6Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32Bf6Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32Bf6Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32Bf6Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32Bf6F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32Bf6F16OpGenericAdaptorBase::CvtScaleF32Pk32Bf6F16OpGenericAdaptorBase(CvtScaleF32Pk32Bf6F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32Bf6F16OpAdaptor::CvtScaleF32Pk32Bf6F16OpAdaptor(CvtScaleF32Pk32Bf6F16Op op) : CvtScaleF32Pk32Bf6F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32Bf6F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Bf6F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32Bf6F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32Bf6F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32Bf6F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32Bf6F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32Bf6F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32Bf6F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32Bf6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32Bf6F16Op CvtScaleF32Pk32Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf6F16Op CvtScaleF32Pk32Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Bf6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf6F16Op CvtScaleF32Pk32Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf6F16Op CvtScaleF32Pk32Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Bf6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf6F16Op CvtScaleF32Pk32Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf6F16Op CvtScaleF32Pk32Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32Bf6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Bf6F16Op CvtScaleF32Pk32Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Bf6F16Op CvtScaleF32Pk32Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32Bf6F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps19(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Bf6F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32Bf6F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32Bf6F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32Bf6F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32Bf6F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32F16Bf6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32F16Bf6OpGenericAdaptorBase::CvtScaleF32Pk32F16Bf6OpGenericAdaptorBase(CvtScaleF32Pk32F16Bf6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32F16Bf6OpAdaptor::CvtScaleF32Pk32F16Bf6OpAdaptor(CvtScaleF32Pk32F16Bf6Op op) : CvtScaleF32Pk32F16Bf6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32F16Bf6OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32F16Bf6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32F16Bf6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32F16Bf6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32F16Bf6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32F16Bf6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32F16Bf6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32F16Bf6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32F16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32F16Bf6Op CvtScaleF32Pk32F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F16Bf6Op CvtScaleF32Pk32F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32F16Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F16Bf6Op CvtScaleF32Pk32F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F16Bf6Op CvtScaleF32Pk32F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32F16Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F16Bf6Op CvtScaleF32Pk32F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F16Bf6Op CvtScaleF32Pk32F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32F16Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F16Bf6Op CvtScaleF32Pk32F16Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F16Bf6Op CvtScaleF32Pk32F16Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32F16Bf6Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps19(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32F16Bf6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32F16Bf6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({6} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32F16Bf6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32F16Bf6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32F16Bf6Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32F16Fp6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32F16Fp6OpGenericAdaptorBase::CvtScaleF32Pk32F16Fp6OpGenericAdaptorBase(CvtScaleF32Pk32F16Fp6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32F16Fp6OpAdaptor::CvtScaleF32Pk32F16Fp6OpAdaptor(CvtScaleF32Pk32F16Fp6Op op) : CvtScaleF32Pk32F16Fp6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32F16Fp6OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32F16Fp6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32F16Fp6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32F16Fp6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32F16Fp6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32F16Fp6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32F16Fp6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32F16Fp6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32F16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32F16Fp6Op CvtScaleF32Pk32F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F16Fp6Op CvtScaleF32Pk32F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32F16Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F16Fp6Op CvtScaleF32Pk32F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F16Fp6Op CvtScaleF32Pk32F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32F16Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F16Fp6Op CvtScaleF32Pk32F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F16Fp6Op CvtScaleF32Pk32F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32F16Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F16Fp6Op CvtScaleF32Pk32F16Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F16Fp6Op CvtScaleF32Pk32F16Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32F16Fp6Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps19(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32F16Fp6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32F16Fp6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({6} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32F16Fp6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32F16Fp6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32F16Fp6Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32F32Bf6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32F32Bf6OpGenericAdaptorBase::CvtScaleF32Pk32F32Bf6OpGenericAdaptorBase(CvtScaleF32Pk32F32Bf6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32F32Bf6OpAdaptor::CvtScaleF32Pk32F32Bf6OpAdaptor(CvtScaleF32Pk32F32Bf6Op op) : CvtScaleF32Pk32F32Bf6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32F32Bf6OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32F32Bf6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32F32Bf6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32F32Bf6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32F32Bf6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32F32Bf6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32F32Bf6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32F32Bf6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32F32Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32F32Bf6Op CvtScaleF32Pk32F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F32Bf6Op CvtScaleF32Pk32F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32F32Bf6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F32Bf6Op CvtScaleF32Pk32F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F32Bf6Op CvtScaleF32Pk32F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32F32Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F32Bf6Op CvtScaleF32Pk32F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F32Bf6Op CvtScaleF32Pk32F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32F32Bf6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F32Bf6Op CvtScaleF32Pk32F32Bf6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F32Bf6Op CvtScaleF32Pk32F32Bf6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32F32Bf6Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32F32Bf6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32F32Bf6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({6} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32F32Bf6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32F32Bf6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32F32Bf6Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32F32Fp6Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32F32Fp6OpGenericAdaptorBase::CvtScaleF32Pk32F32Fp6OpGenericAdaptorBase(CvtScaleF32Pk32F32Fp6Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32F32Fp6OpAdaptor::CvtScaleF32Pk32F32Fp6OpAdaptor(CvtScaleF32Pk32F32Fp6Op op) : CvtScaleF32Pk32F32Fp6OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32F32Fp6OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32F32Fp6Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32F32Fp6Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32F32Fp6Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32F32Fp6Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32F32Fp6Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32F32Fp6Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32F32Fp6Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32F32Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32F32Fp6Op CvtScaleF32Pk32F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F32Fp6Op CvtScaleF32Pk32F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32F32Fp6Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F32Fp6Op CvtScaleF32Pk32F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F32Fp6Op CvtScaleF32Pk32F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32F32Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F32Fp6Op CvtScaleF32Pk32F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F32Fp6Op CvtScaleF32Pk32F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32F32Fp6Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32F32Fp6Op CvtScaleF32Pk32F32Fp6Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32F32Fp6Op CvtScaleF32Pk32F32Fp6Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32F32Fp6Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32F32Fp6Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32F32Fp6Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({6} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32F32Fp6Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32F32Fp6Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32F32Fp6Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32Fp6Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32Fp6Bf16OpGenericAdaptorBase::CvtScaleF32Pk32Fp6Bf16OpGenericAdaptorBase(CvtScaleF32Pk32Fp6Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32Fp6Bf16OpAdaptor::CvtScaleF32Pk32Fp6Bf16OpAdaptor(CvtScaleF32Pk32Fp6Bf16Op op) : CvtScaleF32Pk32Fp6Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32Fp6Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Fp6Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32Fp6Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32Fp6Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32Fp6Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32Fp6Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32Fp6Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32Fp6Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32Fp6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32Fp6Bf16Op CvtScaleF32Pk32Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Fp6Bf16Op CvtScaleF32Pk32Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Fp6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Fp6Bf16Op CvtScaleF32Pk32Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Fp6Bf16Op CvtScaleF32Pk32Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Fp6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Fp6Bf16Op CvtScaleF32Pk32Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Fp6Bf16Op CvtScaleF32Pk32Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32Fp6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Fp6Bf16Op CvtScaleF32Pk32Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Fp6Bf16Op CvtScaleF32Pk32Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32Fp6Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps18(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Fp6Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32Fp6Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32Fp6Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32Fp6Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32Fp6Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk32Fp6F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk32Fp6F16OpGenericAdaptorBase::CvtScaleF32Pk32Fp6F16OpGenericAdaptorBase(CvtScaleF32Pk32Fp6F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk32Fp6F16OpAdaptor::CvtScaleF32Pk32Fp6F16OpAdaptor(CvtScaleF32Pk32Fp6F16Op op) : CvtScaleF32Pk32Fp6F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk32Fp6F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Fp6F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk32Fp6F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk32Fp6F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk32Fp6F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk32Fp6F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk32Fp6F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk32Fp6F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk32Fp6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk32Fp6F16Op CvtScaleF32Pk32Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Fp6F16Op CvtScaleF32Pk32Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Fp6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Fp6F16Op CvtScaleF32Pk32Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Fp6F16Op CvtScaleF32Pk32Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk32Fp6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Fp6F16Op CvtScaleF32Pk32Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Fp6F16Op CvtScaleF32Pk32Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk32Fp6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk32Fp6F16Op CvtScaleF32Pk32Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk32Fp6F16Op CvtScaleF32Pk32Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk32Fp6F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps19(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk32Fp6F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk32Fp6F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk32Fp6F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk32Fp6F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk32Fp6F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Bf8Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Bf8Bf16OpGenericAdaptorBase::CvtScaleF32Pk8Bf8Bf16OpGenericAdaptorBase(CvtScaleF32Pk8Bf8Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Bf8Bf16OpAdaptor::CvtScaleF32Pk8Bf8Bf16OpAdaptor(CvtScaleF32Pk8Bf8Bf16Op op) : CvtScaleF32Pk8Bf8Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Bf8Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Bf8Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Bf8Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Bf8Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Bf8Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Bf8Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Bf8Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Bf8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Bf8Bf16Op CvtScaleF32Pk8Bf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8Bf16Op CvtScaleF32Pk8Bf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Bf8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8Bf16Op CvtScaleF32Pk8Bf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8Bf16Op CvtScaleF32Pk8Bf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Bf8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8Bf16Op CvtScaleF32Pk8Bf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8Bf16Op CvtScaleF32Pk8Bf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Bf8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8Bf16Op CvtScaleF32Pk8Bf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8Bf16Op CvtScaleF32Pk8Bf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Bf8Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Bf8Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Bf8Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Bf8Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Bf8F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Bf8F16OpGenericAdaptorBase::CvtScaleF32Pk8Bf8F16OpGenericAdaptorBase(CvtScaleF32Pk8Bf8F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Bf8F16OpAdaptor::CvtScaleF32Pk8Bf8F16OpAdaptor(CvtScaleF32Pk8Bf8F16Op op) : CvtScaleF32Pk8Bf8F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Bf8F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Bf8F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Bf8F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Bf8F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Bf8F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Bf8F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Bf8F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Bf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Bf8F16Op CvtScaleF32Pk8Bf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8F16Op CvtScaleF32Pk8Bf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Bf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8F16Op CvtScaleF32Pk8Bf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8F16Op CvtScaleF32Pk8Bf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Bf8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8F16Op CvtScaleF32Pk8Bf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8F16Op CvtScaleF32Pk8Bf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Bf8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8F16Op CvtScaleF32Pk8Bf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8F16Op CvtScaleF32Pk8Bf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Bf8F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Bf8F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Bf8F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Bf8F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Bf8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Bf8F32OpGenericAdaptorBase::CvtScaleF32Pk8Bf8F32OpGenericAdaptorBase(CvtScaleF32Pk8Bf8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Bf8F32OpAdaptor::CvtScaleF32Pk8Bf8F32OpAdaptor(CvtScaleF32Pk8Bf8F32Op op) : CvtScaleF32Pk8Bf8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Bf8F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Bf8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Bf8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Bf8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Bf8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Bf8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Bf8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Bf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Bf8F32Op CvtScaleF32Pk8Bf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8F32Op CvtScaleF32Pk8Bf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Bf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8F32Op CvtScaleF32Pk8Bf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8F32Op CvtScaleF32Pk8Bf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Bf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8F32Op CvtScaleF32Pk8Bf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8F32Op CvtScaleF32Pk8Bf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Bf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Bf8F32Op CvtScaleF32Pk8Bf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Bf8F32Op CvtScaleF32Pk8Bf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Bf8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Bf8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Bf8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Bf8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Bf8F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Fp4Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Fp4Bf16OpGenericAdaptorBase::CvtScaleF32Pk8Fp4Bf16OpGenericAdaptorBase(CvtScaleF32Pk8Fp4Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Fp4Bf16OpAdaptor::CvtScaleF32Pk8Fp4Bf16OpAdaptor(CvtScaleF32Pk8Fp4Bf16Op op) : CvtScaleF32Pk8Fp4Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Fp4Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Fp4Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Fp4Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Fp4Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Fp4Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Fp4Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Fp4Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Fp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Fp4Bf16Op CvtScaleF32Pk8Fp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4Bf16Op CvtScaleF32Pk8Fp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4Bf16Op CvtScaleF32Pk8Fp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4Bf16Op CvtScaleF32Pk8Fp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp4Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4Bf16Op CvtScaleF32Pk8Fp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4Bf16Op CvtScaleF32Pk8Fp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Fp4Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4Bf16Op CvtScaleF32Pk8Fp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4Bf16Op CvtScaleF32Pk8Fp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Fp4Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Fp4Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Fp4Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Fp4Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Fp4F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Fp4F16OpGenericAdaptorBase::CvtScaleF32Pk8Fp4F16OpGenericAdaptorBase(CvtScaleF32Pk8Fp4F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Fp4F16OpAdaptor::CvtScaleF32Pk8Fp4F16OpAdaptor(CvtScaleF32Pk8Fp4F16Op op) : CvtScaleF32Pk8Fp4F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Fp4F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Fp4F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Fp4F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Fp4F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Fp4F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Fp4F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Fp4F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Fp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Fp4F16Op CvtScaleF32Pk8Fp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4F16Op CvtScaleF32Pk8Fp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4F16Op CvtScaleF32Pk8Fp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4F16Op CvtScaleF32Pk8Fp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp4F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4F16Op CvtScaleF32Pk8Fp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4F16Op CvtScaleF32Pk8Fp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Fp4F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4F16Op CvtScaleF32Pk8Fp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4F16Op CvtScaleF32Pk8Fp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Fp4F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Fp4F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Fp4F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Fp4F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Fp4F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Fp4F32OpGenericAdaptorBase::CvtScaleF32Pk8Fp4F32OpGenericAdaptorBase(CvtScaleF32Pk8Fp4F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Fp4F32OpAdaptor::CvtScaleF32Pk8Fp4F32OpAdaptor(CvtScaleF32Pk8Fp4F32Op op) : CvtScaleF32Pk8Fp4F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Fp4F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Fp4F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Fp4F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Fp4F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Fp4F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Fp4F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Fp4F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Fp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Fp4F32Op CvtScaleF32Pk8Fp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4F32Op CvtScaleF32Pk8Fp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4F32Op CvtScaleF32Pk8Fp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4F32Op CvtScaleF32Pk8Fp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp4F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4F32Op CvtScaleF32Pk8Fp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4F32Op CvtScaleF32Pk8Fp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Fp4F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp4F32Op CvtScaleF32Pk8Fp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp4F32Op CvtScaleF32Pk8Fp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp4F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Fp4F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Fp4F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Fp4F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Fp4F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Fp8Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Fp8Bf16OpGenericAdaptorBase::CvtScaleF32Pk8Fp8Bf16OpGenericAdaptorBase(CvtScaleF32Pk8Fp8Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Fp8Bf16OpAdaptor::CvtScaleF32Pk8Fp8Bf16OpAdaptor(CvtScaleF32Pk8Fp8Bf16Op op) : CvtScaleF32Pk8Fp8Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Fp8Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Fp8Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Fp8Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Fp8Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Fp8Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Fp8Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Fp8Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Fp8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Fp8Bf16Op CvtScaleF32Pk8Fp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8Bf16Op CvtScaleF32Pk8Fp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8Bf16Op CvtScaleF32Pk8Fp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8Bf16Op CvtScaleF32Pk8Fp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8Bf16Op CvtScaleF32Pk8Fp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8Bf16Op CvtScaleF32Pk8Fp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Fp8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8Bf16Op CvtScaleF32Pk8Fp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8Bf16Op CvtScaleF32Pk8Fp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Fp8Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Fp8Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Fp8Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Fp8Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Fp8F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Fp8F16OpGenericAdaptorBase::CvtScaleF32Pk8Fp8F16OpGenericAdaptorBase(CvtScaleF32Pk8Fp8F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Fp8F16OpAdaptor::CvtScaleF32Pk8Fp8F16OpAdaptor(CvtScaleF32Pk8Fp8F16Op op) : CvtScaleF32Pk8Fp8F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Fp8F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Fp8F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Fp8F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Fp8F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Fp8F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Fp8F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Fp8F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Fp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Fp8F16Op CvtScaleF32Pk8Fp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8F16Op CvtScaleF32Pk8Fp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8F16Op CvtScaleF32Pk8Fp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8F16Op CvtScaleF32Pk8Fp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8F16Op CvtScaleF32Pk8Fp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8F16Op CvtScaleF32Pk8Fp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Fp8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8F16Op CvtScaleF32Pk8Fp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8F16Op CvtScaleF32Pk8Fp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Fp8F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Fp8F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Fp8F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Fp8F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32Pk8Fp8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32Pk8Fp8F32OpGenericAdaptorBase::CvtScaleF32Pk8Fp8F32OpGenericAdaptorBase(CvtScaleF32Pk8Fp8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32Pk8Fp8F32OpAdaptor::CvtScaleF32Pk8Fp8F32OpAdaptor(CvtScaleF32Pk8Fp8F32Op op) : CvtScaleF32Pk8Fp8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32Pk8Fp8F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32Pk8Fp8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32Pk8Fp8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32Pk8Fp8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32Pk8Fp8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32Pk8Fp8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32Pk8Fp8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32Pk8Fp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32Pk8Fp8F32Op CvtScaleF32Pk8Fp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8F32Op CvtScaleF32Pk8Fp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8F32Op CvtScaleF32Pk8Fp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8F32Op CvtScaleF32Pk8Fp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale)); } void CvtScaleF32Pk8Fp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8F32Op CvtScaleF32Pk8Fp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8F32Op CvtScaleF32Pk8Fp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32Pk8Fp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32Pk8Fp8F32Op CvtScaleF32Pk8Fp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32Pk8Fp8F32Op CvtScaleF32Pk8Fp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32Pk8Fp8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32Pk8Fp8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32Pk8Fp8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32Pk8Fp8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32Pk8Fp8F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkBf16Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkBf16Bf8OpGenericAdaptorBase::CvtScaleF32PkBf16Bf8OpGenericAdaptorBase(CvtScaleF32PkBf16Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkBf16Bf8OpGenericAdaptorBase::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkBf16Bf8OpAdaptor::CvtScaleF32PkBf16Bf8OpAdaptor(CvtScaleF32PkBf16Bf8Op op) : CvtScaleF32PkBf16Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkBf16Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf16.bf8' op requires attribute 'srcLoHiSel'"); if (tblgen_srcLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf16.bf8' op attribute 'srcLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcLoHiSel; auto attr = dict.get("srcLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkBf16Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkBf16Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkBf16Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcLoHiSel") return prop.srcLoHiSel; return std::nullopt; } void CvtScaleF32PkBf16Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcLoHiSel") { prop.srcLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkBf16Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcLoHiSel) attrs.append("srcLoHiSel", prop.srcLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkBf16Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "srcLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf16Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcLoHiSel); } bool CvtScaleF32PkBf16Bf8Op::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkBf16Bf8Op::setSrcLoHiSel(bool attrValue) { getProperties().srcLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkBf16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; odsState.addTypes(res); } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkBf16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkBf16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); odsState.addTypes(res); } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkBf16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkBf16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkBf16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Bf8Op CvtScaleF32PkBf16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkBf16Bf8Op::verifyInvariantsImpl() { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitOpError("requires attribute 'srcLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_srcLoHiSel, "srcLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkBf16Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcLoHiSelAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (srcLoHiSelAttr) result.getOrAddProperties().srcLoHiSel = srcLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf16Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkBf16Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkBf16Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkBf16Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkBf16Fp4Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkBf16Fp4OpGenericAdaptorBase::CvtScaleF32PkBf16Fp4OpGenericAdaptorBase(CvtScaleF32PkBf16Fp4Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32PkBf16Fp4OpGenericAdaptorBase::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkBf16Fp4OpAdaptor::CvtScaleF32PkBf16Fp4OpAdaptor(CvtScaleF32PkBf16Fp4Op op) : CvtScaleF32PkBf16Fp4OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkBf16Fp4OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf16.fp4' op requires attribute 'srcSelIndex'"); if (tblgen_srcSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf16.fp4' op attribute 'srcSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp4Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcSelIndex; auto attr = dict.get("srcSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkBf16Fp4Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkBf16Fp4Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32PkBf16Fp4Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcSelIndex") return prop.srcSelIndex; return std::nullopt; } void CvtScaleF32PkBf16Fp4Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcSelIndex") { prop.srcSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkBf16Fp4Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcSelIndex) attrs.append("srcSelIndex", prop.srcSelIndex); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp4Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "srcSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp4Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf16Fp4Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcSelIndex); } uint32_t CvtScaleF32PkBf16Fp4Op::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkBf16Fp4Op::setSrcSelIndex(uint32_t attrValue) { getProperties().srcSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32PkBf16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.addTypes(res); } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkBf16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkBf16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.addTypes(res); } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkBf16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkBf16Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkBf16Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp4Op CvtScaleF32PkBf16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp4Op::verifyInvariantsImpl() { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitOpError("requires attribute 'srcSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_srcSelIndex, "srcSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp4Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkBf16Fp4Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcSelIndexAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (srcSelIndexAttr) result.getOrAddProperties().srcSelIndex = srcSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf16Fp4Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkBf16Fp4Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkBf16Fp4Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkBf16Fp4OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkBf16Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkBf16Fp8OpGenericAdaptorBase::CvtScaleF32PkBf16Fp8OpGenericAdaptorBase(CvtScaleF32PkBf16Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkBf16Fp8OpGenericAdaptorBase::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkBf16Fp8OpAdaptor::CvtScaleF32PkBf16Fp8OpAdaptor(CvtScaleF32PkBf16Fp8Op op) : CvtScaleF32PkBf16Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkBf16Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf16.fp8' op requires attribute 'srcLoHiSel'"); if (tblgen_srcLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf16.fp8' op attribute 'srcLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcLoHiSel; auto attr = dict.get("srcLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkBf16Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkBf16Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkBf16Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcLoHiSel") return prop.srcLoHiSel; return std::nullopt; } void CvtScaleF32PkBf16Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcLoHiSel") { prop.srcLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkBf16Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcLoHiSel) attrs.append("srcLoHiSel", prop.srcLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "srcLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf16Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcLoHiSel); } bool CvtScaleF32PkBf16Fp8Op::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkBf16Fp8Op::setSrcLoHiSel(bool attrValue) { getProperties().srcLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkBf16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; odsState.addTypes(res); } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkBf16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkBf16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); odsState.addTypes(res); } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkBf16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkBf16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkBf16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf16Fp8Op CvtScaleF32PkBf16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp8Op::verifyInvariantsImpl() { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitOpError("requires attribute 'srcLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_srcLoHiSel, "srcLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf16Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkBf16Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcLoHiSelAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (srcLoHiSelAttr) result.getOrAddProperties().srcLoHiSel = srcLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf16Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkBf16Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkBf16Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkBf16Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkBf8Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkBf8Bf16OpGenericAdaptorBase::CvtScaleF32PkBf8Bf16OpGenericAdaptorBase(CvtScaleF32PkBf8Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkBf8Bf16OpGenericAdaptorBase::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkBf8Bf16OpAdaptor::CvtScaleF32PkBf8Bf16OpAdaptor(CvtScaleF32PkBf8Bf16Op op) : CvtScaleF32PkBf8Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkBf8Bf16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf8.bf16' op requires attribute 'dstLoHiSel'"); if (tblgen_dstLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf8.bf16' op attribute 'dstLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstLoHiSel; auto attr = dict.get("dstLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkBf8Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkBf8Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkBf8Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstLoHiSel") return prop.dstLoHiSel; return std::nullopt; } void CvtScaleF32PkBf8Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstLoHiSel") { prop.dstLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkBf8Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstLoHiSel) attrs.append("dstLoHiSel", prop.dstLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkBf8Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "dstLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8Bf16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf8Bf16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstLoHiSel); } bool CvtScaleF32PkBf8Bf16Op::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkBf8Bf16Op::setDstLoHiSel(bool attrValue) { getProperties().dstLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkBf8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; odsState.addTypes(res); } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); odsState.addTypes(res); } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkBf8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8Bf16Op CvtScaleF32PkBf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkBf8Bf16Op::verifyInvariantsImpl() { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitOpError("requires attribute 'dstLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_dstLoHiSel, "dstLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkBf8Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstLoHiSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (dstLoHiSelAttr) result.getOrAddProperties().dstLoHiSel = dstLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(16)); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf8Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkBf8Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkBf8Bf16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkBf8Bf16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkBf8F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkBf8F16OpGenericAdaptorBase::CvtScaleF32PkBf8F16OpGenericAdaptorBase(CvtScaleF32PkBf8F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkBf8F16OpGenericAdaptorBase::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkBf8F16OpAdaptor::CvtScaleF32PkBf8F16OpAdaptor(CvtScaleF32PkBf8F16Op op) : CvtScaleF32PkBf8F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkBf8F16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf8.f16' op requires attribute 'dstLoHiSel'"); if (tblgen_dstLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf8.f16' op attribute 'dstLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstLoHiSel; auto attr = dict.get("dstLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkBf8F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkBf8F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkBf8F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstLoHiSel") return prop.dstLoHiSel; return std::nullopt; } void CvtScaleF32PkBf8F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstLoHiSel") { prop.dstLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkBf8F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstLoHiSel) attrs.append("dstLoHiSel", prop.dstLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkBf8F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "dstLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8F16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf8F16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstLoHiSel); } bool CvtScaleF32PkBf8F16Op::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkBf8F16Op::setDstLoHiSel(bool attrValue) { getProperties().dstLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkBf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; odsState.addTypes(res); } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); odsState.addTypes(res); } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkBf8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F16Op CvtScaleF32PkBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkBf8F16Op::verifyInvariantsImpl() { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitOpError("requires attribute 'dstLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_dstLoHiSel, "dstLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkBf8F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstLoHiSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (dstLoHiSelAttr) result.getOrAddProperties().dstLoHiSel = dstLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(16)); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf8F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkBf8F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkBf8F16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkBf8F16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkBf8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkBf8F32OpGenericAdaptorBase::CvtScaleF32PkBf8F32OpGenericAdaptorBase(CvtScaleF32PkBf8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkBf8F32OpGenericAdaptorBase::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkBf8F32OpAdaptor::CvtScaleF32PkBf8F32OpAdaptor(CvtScaleF32PkBf8F32Op op) : CvtScaleF32PkBf8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkBf8F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf8.f32' op requires attribute 'dstLoHiSel'"); if (tblgen_dstLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.bf8.f32' op attribute 'dstLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstLoHiSel; auto attr = dict.get("dstLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkBf8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkBf8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkBf8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstLoHiSel") return prop.dstLoHiSel; return std::nullopt; } void CvtScaleF32PkBf8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstLoHiSel") { prop.dstLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkBf8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstLoHiSel) attrs.append("dstLoHiSel", prop.dstLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkBf8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "dstLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf8F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstLoHiSel); } bool CvtScaleF32PkBf8F32Op::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkBf8F32Op::setDstLoHiSel(bool attrValue) { getProperties().dstLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; odsState.addTypes(res); } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); odsState.addTypes(res); } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkBf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkBf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkBf8F32Op CvtScaleF32PkBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkBf8F32Op::verifyInvariantsImpl() { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitOpError("requires attribute 'dstLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_dstLoHiSel, "dstLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkBf8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkBf8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstLoHiSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (dstLoHiSelAttr) result.getOrAddProperties().dstLoHiSel = dstLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(16)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src1Operands, odsBuildableType1, src1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkBf8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkBf8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkBf8F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkBf8F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkF16Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkF16Bf8OpGenericAdaptorBase::CvtScaleF32PkF16Bf8OpGenericAdaptorBase(CvtScaleF32PkF16Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkF16Bf8OpGenericAdaptorBase::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkF16Bf8OpAdaptor::CvtScaleF32PkF16Bf8OpAdaptor(CvtScaleF32PkF16Bf8Op op) : CvtScaleF32PkF16Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkF16Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.f16.bf8' op requires attribute 'srcLoHiSel'"); if (tblgen_srcLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.f16.bf8' op attribute 'srcLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcLoHiSel; auto attr = dict.get("srcLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkF16Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkF16Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkF16Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcLoHiSel") return prop.srcLoHiSel; return std::nullopt; } void CvtScaleF32PkF16Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcLoHiSel") { prop.srcLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkF16Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcLoHiSel) attrs.append("srcLoHiSel", prop.srcLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkF16Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "srcLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF16Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcLoHiSel); } bool CvtScaleF32PkF16Bf8Op::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkF16Bf8Op::setSrcLoHiSel(bool attrValue) { getProperties().srcLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkF16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; odsState.addTypes(res); } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); odsState.addTypes(res); } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF16Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkF16Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Bf8Op CvtScaleF32PkF16Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkF16Bf8Op::verifyInvariantsImpl() { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitOpError("requires attribute 'srcLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_srcLoHiSel, "srcLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkF16Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcLoHiSelAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (srcLoHiSelAttr) result.getOrAddProperties().srcLoHiSel = srcLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF16Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkF16Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkF16Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkF16Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkF16Fp4Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkF16Fp4OpGenericAdaptorBase::CvtScaleF32PkF16Fp4OpGenericAdaptorBase(CvtScaleF32PkF16Fp4Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32PkF16Fp4OpGenericAdaptorBase::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkF16Fp4OpAdaptor::CvtScaleF32PkF16Fp4OpAdaptor(CvtScaleF32PkF16Fp4Op op) : CvtScaleF32PkF16Fp4OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkF16Fp4OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.pk.f16.fp4' op requires attribute 'srcSelIndex'"); if (tblgen_srcSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.f16.fp4' op attribute 'srcSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Fp4Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcSelIndex; auto attr = dict.get("srcSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkF16Fp4Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkF16Fp4Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32PkF16Fp4Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcSelIndex") return prop.srcSelIndex; return std::nullopt; } void CvtScaleF32PkF16Fp4Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcSelIndex") { prop.srcSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkF16Fp4Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcSelIndex) attrs.append("srcSelIndex", prop.srcSelIndex); } ::llvm::LogicalResult CvtScaleF32PkF16Fp4Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "srcSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Fp4Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF16Fp4Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcSelIndex); } uint32_t CvtScaleF32PkF16Fp4Op::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkF16Fp4Op::setSrcSelIndex(uint32_t attrValue) { getProperties().srcSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32PkF16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.addTypes(res); } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkF16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkF16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.addTypes(res); } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkF16Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkF16Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkF16Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp4Op CvtScaleF32PkF16Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkF16Fp4Op::verifyInvariantsImpl() { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitOpError("requires attribute 'srcSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_srcSelIndex, "srcSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Fp4Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkF16Fp4Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcSelIndexAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (srcSelIndexAttr) result.getOrAddProperties().srcSelIndex = srcSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF16Fp4Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkF16Fp4Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkF16Fp4Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkF16Fp4OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkF16Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkF16Fp8OpGenericAdaptorBase::CvtScaleF32PkF16Fp8OpGenericAdaptorBase(CvtScaleF32PkF16Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkF16Fp8OpGenericAdaptorBase::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkF16Fp8OpAdaptor::CvtScaleF32PkF16Fp8OpAdaptor(CvtScaleF32PkF16Fp8Op op) : CvtScaleF32PkF16Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkF16Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.f16.fp8' op requires attribute 'srcLoHiSel'"); if (tblgen_srcLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.f16.fp8' op attribute 'srcLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcLoHiSel; auto attr = dict.get("srcLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkF16Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkF16Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkF16Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcLoHiSel") return prop.srcLoHiSel; return std::nullopt; } void CvtScaleF32PkF16Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcLoHiSel") { prop.srcLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkF16Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcLoHiSel) attrs.append("srcLoHiSel", prop.srcLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkF16Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "srcLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF16Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcLoHiSel); } bool CvtScaleF32PkF16Fp8Op::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkF16Fp8Op::setSrcLoHiSel(bool attrValue) { getProperties().srcLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkF16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; odsState.addTypes(res); } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); odsState.addTypes(res); } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF16Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkF16Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF16Fp8Op CvtScaleF32PkF16Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkF16Fp8Op::verifyInvariantsImpl() { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitOpError("requires attribute 'srcLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_srcLoHiSel, "srcLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF16Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkF16Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcLoHiSelAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (srcLoHiSelAttr) result.getOrAddProperties().srcLoHiSel = srcLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF16Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkF16Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkF16Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkF16Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkF32Bf8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkF32Bf8OpGenericAdaptorBase::CvtScaleF32PkF32Bf8OpGenericAdaptorBase(CvtScaleF32PkF32Bf8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkF32Bf8OpGenericAdaptorBase::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkF32Bf8OpAdaptor::CvtScaleF32PkF32Bf8OpAdaptor(CvtScaleF32PkF32Bf8Op op) : CvtScaleF32PkF32Bf8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkF32Bf8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.f32.bf8' op requires attribute 'srcLoHiSel'"); if (tblgen_srcLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.f32.bf8' op attribute 'srcLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Bf8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcLoHiSel; auto attr = dict.get("srcLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkF32Bf8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkF32Bf8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkF32Bf8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcLoHiSel") return prop.srcLoHiSel; return std::nullopt; } void CvtScaleF32PkF32Bf8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcLoHiSel") { prop.srcLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkF32Bf8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcLoHiSel) attrs.append("srcLoHiSel", prop.srcLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkF32Bf8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "srcLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Bf8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF32Bf8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcLoHiSel); } bool CvtScaleF32PkF32Bf8Op::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkF32Bf8Op::setSrcLoHiSel(bool attrValue) { getProperties().srcLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; odsState.addTypes(res); } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); odsState.addTypes(res); } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF32Bf8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkF32Bf8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Bf8Op CvtScaleF32PkF32Bf8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkF32Bf8Op::verifyInvariantsImpl() { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitOpError("requires attribute 'srcLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_srcLoHiSel, "srcLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps23(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Bf8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkF32Bf8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcLoHiSelAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (srcLoHiSelAttr) result.getOrAddProperties().srcLoHiSel = srcLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF32Bf8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkF32Bf8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkF32Bf8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkF32Bf8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkF32Fp4Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkF32Fp4OpGenericAdaptorBase::CvtScaleF32PkF32Fp4OpGenericAdaptorBase(CvtScaleF32PkF32Fp4Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32PkF32Fp4OpGenericAdaptorBase::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkF32Fp4OpAdaptor::CvtScaleF32PkF32Fp4OpAdaptor(CvtScaleF32PkF32Fp4Op op) : CvtScaleF32PkF32Fp4OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkF32Fp4OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.pk.f32.fp4' op requires attribute 'srcSelIndex'"); if (tblgen_srcSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.f32.fp4' op attribute 'srcSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Fp4Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcSelIndex; auto attr = dict.get("srcSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkF32Fp4Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkF32Fp4Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32PkF32Fp4Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcSelIndex") return prop.srcSelIndex; return std::nullopt; } void CvtScaleF32PkF32Fp4Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcSelIndex") { prop.srcSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkF32Fp4Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcSelIndex) attrs.append("srcSelIndex", prop.srcSelIndex); } ::llvm::LogicalResult CvtScaleF32PkF32Fp4Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "srcSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Fp4Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF32Fp4Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcSelIndex); } uint32_t CvtScaleF32PkF32Fp4Op::getSrcSelIndex() { auto attr = getSrcSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkF32Fp4Op::setSrcSelIndex(uint32_t attrValue) { getProperties().srcSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32PkF32Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; odsState.addTypes(res); } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkF32Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = srcSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkF32Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); odsState.addTypes(res); } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkF32Fp4Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), srcSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, uint32_t srcSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcSelIndex)); } void CvtScaleF32PkF32Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkF32Fp4Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp4Op CvtScaleF32PkF32Fp4Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkF32Fp4Op::verifyInvariantsImpl() { auto tblgen_srcSelIndex = getProperties().srcSelIndex; (void)tblgen_srcSelIndex; if (!tblgen_srcSelIndex) return emitOpError("requires attribute 'srcSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_srcSelIndex, "srcSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps23(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Fp4Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkF32Fp4Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcSelIndexAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (srcSelIndexAttr) result.getOrAddProperties().srcSelIndex = srcSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF32Fp4Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkF32Fp4Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkF32Fp4Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkF32Fp4OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkF32Fp8Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkF32Fp8OpGenericAdaptorBase::CvtScaleF32PkF32Fp8OpGenericAdaptorBase(CvtScaleF32PkF32Fp8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkF32Fp8OpGenericAdaptorBase::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkF32Fp8OpAdaptor::CvtScaleF32PkF32Fp8OpAdaptor(CvtScaleF32PkF32Fp8Op op) : CvtScaleF32PkF32Fp8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkF32Fp8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.f32.fp8' op requires attribute 'srcLoHiSel'"); if (tblgen_srcLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_srcLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_srcLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.f32.fp8' op attribute 'srcLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Fp8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.srcLoHiSel; auto attr = dict.get("srcLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `srcLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkF32Fp8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.srcLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("srcLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkF32Fp8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.srcLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkF32Fp8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "srcLoHiSel") return prop.srcLoHiSel; return std::nullopt; } void CvtScaleF32PkF32Fp8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "srcLoHiSel") { prop.srcLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkF32Fp8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.srcLoHiSel) attrs.append("srcLoHiSel", prop.srcLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkF32Fp8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSrcLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "srcLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Fp8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.srcLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF32Fp8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.srcLoHiSel); } bool CvtScaleF32PkF32Fp8Op::getSrcLoHiSel() { auto attr = getSrcLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkF32Fp8Op::setSrcLoHiSel(bool attrValue) { getProperties().srcLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; odsState.addTypes(res); } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = srcLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); odsState.addTypes(res); } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF32Fp8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().srcLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), srcLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value scale, bool srcLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(scale), std::forward(srcLoHiSel)); } void CvtScaleF32PkF32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkF32Fp8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkF32Fp8Op CvtScaleF32PkF32Fp8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkF32Fp8Op::verifyInvariantsImpl() { auto tblgen_srcLoHiSel = getProperties().srcLoHiSel; (void)tblgen_srcLoHiSel; if (!tblgen_srcLoHiSel) return emitOpError("requires attribute 'srcLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_srcLoHiSel, "srcLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps23(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkF32Fp8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkF32Fp8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr srcLoHiSelAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(srcLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (srcLoHiSelAttr) result.getOrAddProperties().srcLoHiSel = srcLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkF32Fp8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("srcLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getSrcLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkF32Fp8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkF32Fp8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkF32Fp8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkFp4Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkFp4Bf16OpGenericAdaptorBase::CvtScaleF32PkFp4Bf16OpGenericAdaptorBase(CvtScaleF32PkFp4Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32PkFp4Bf16OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkFp4Bf16OpAdaptor::CvtScaleF32PkFp4Bf16OpAdaptor(CvtScaleF32PkFp4Bf16Op op) : CvtScaleF32PkFp4Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkFp4Bf16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp4.bf16' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp4.bf16' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkFp4Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkFp4Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32PkFp4Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32PkFp4Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkFp4Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32PkFp4Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4Bf16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp4Bf16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32PkFp4Bf16Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkFp4Bf16Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32PkFp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkFp4Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4Bf16Op CvtScaleF32PkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkFp4Bf16Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkFp4Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, odsBuildableType1, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp4Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkFp4Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkFp4Bf16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkFp4Bf16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkFp4F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkFp4F16OpGenericAdaptorBase::CvtScaleF32PkFp4F16OpGenericAdaptorBase(CvtScaleF32PkFp4F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32PkFp4F16OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkFp4F16OpAdaptor::CvtScaleF32PkFp4F16OpAdaptor(CvtScaleF32PkFp4F16Op op) : CvtScaleF32PkFp4F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkFp4F16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp4.f16' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp4.f16' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkFp4F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkFp4F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32PkFp4F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32PkFp4F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkFp4F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32PkFp4F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4F16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp4F16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32PkFp4F16Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkFp4F16Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32PkFp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkFp4F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F16Op CvtScaleF32PkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkFp4F16Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkFp4F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, odsBuildableType1, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp4F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkFp4F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkFp4F16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkFp4F16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkFp4F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkFp4F32OpGenericAdaptorBase::CvtScaleF32PkFp4F32OpGenericAdaptorBase(CvtScaleF32PkFp4F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32PkFp4F32OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkFp4F32OpAdaptor::CvtScaleF32PkFp4F32OpAdaptor(CvtScaleF32PkFp4F32Op op) : CvtScaleF32PkFp4F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkFp4F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp4.f32' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp4.f32' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkFp4F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkFp4F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32PkFp4F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32PkFp4F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkFp4F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32PkFp4F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp4F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32PkFp4F32Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkFp4F32Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32PkFp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32PkFp4F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkFp4F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp4F32Op CvtScaleF32PkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkFp4F32Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp4F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkFp4F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src1Operands, odsBuildableType1, src1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp4F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkFp4F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkFp4F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkFp4F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkFp8Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkFp8Bf16OpGenericAdaptorBase::CvtScaleF32PkFp8Bf16OpGenericAdaptorBase(CvtScaleF32PkFp8Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkFp8Bf16OpGenericAdaptorBase::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkFp8Bf16OpAdaptor::CvtScaleF32PkFp8Bf16OpAdaptor(CvtScaleF32PkFp8Bf16Op op) : CvtScaleF32PkFp8Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkFp8Bf16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp8.bf16' op requires attribute 'dstLoHiSel'"); if (tblgen_dstLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp8.bf16' op attribute 'dstLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstLoHiSel; auto attr = dict.get("dstLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkFp8Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkFp8Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkFp8Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstLoHiSel") return prop.dstLoHiSel; return std::nullopt; } void CvtScaleF32PkFp8Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstLoHiSel") { prop.dstLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkFp8Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstLoHiSel) attrs.append("dstLoHiSel", prop.dstLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkFp8Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "dstLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8Bf16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp8Bf16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstLoHiSel); } bool CvtScaleF32PkFp8Bf16Op::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkFp8Bf16Op::setDstLoHiSel(bool attrValue) { getProperties().dstLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkFp8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; odsState.addTypes(res); } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); odsState.addTypes(res); } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkFp8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8Bf16Op CvtScaleF32PkFp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkFp8Bf16Op::verifyInvariantsImpl() { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitOpError("requires attribute 'dstLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_dstLoHiSel, "dstLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkFp8Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstLoHiSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (dstLoHiSelAttr) result.getOrAddProperties().dstLoHiSel = dstLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(16)); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp8Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkFp8Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkFp8Bf16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkFp8Bf16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkFp8F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkFp8F16OpGenericAdaptorBase::CvtScaleF32PkFp8F16OpGenericAdaptorBase(CvtScaleF32PkFp8F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkFp8F16OpGenericAdaptorBase::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkFp8F16OpAdaptor::CvtScaleF32PkFp8F16OpAdaptor(CvtScaleF32PkFp8F16Op op) : CvtScaleF32PkFp8F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkFp8F16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp8.f16' op requires attribute 'dstLoHiSel'"); if (tblgen_dstLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp8.f16' op attribute 'dstLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstLoHiSel; auto attr = dict.get("dstLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkFp8F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkFp8F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkFp8F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstLoHiSel") return prop.dstLoHiSel; return std::nullopt; } void CvtScaleF32PkFp8F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstLoHiSel") { prop.dstLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkFp8F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstLoHiSel) attrs.append("dstLoHiSel", prop.dstLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkFp8F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "dstLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8F16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp8F16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstLoHiSel); } bool CvtScaleF32PkFp8F16Op::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkFp8F16Op::setDstLoHiSel(bool attrValue) { getProperties().dstLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkFp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; odsState.addTypes(res); } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); odsState.addTypes(res); } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkFp8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F16Op CvtScaleF32PkFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkFp8F16Op::verifyInvariantsImpl() { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitOpError("requires attribute 'dstLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_dstLoHiSel, "dstLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkFp8F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstLoHiSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (dstLoHiSelAttr) result.getOrAddProperties().dstLoHiSel = dstLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(16)); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp8F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkFp8F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkFp8F16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkFp8F16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32PkFp8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32PkFp8F32OpGenericAdaptorBase::CvtScaleF32PkFp8F32OpGenericAdaptorBase(CvtScaleF32PkFp8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool CvtScaleF32PkFp8F32OpGenericAdaptorBase::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32PkFp8F32OpAdaptor::CvtScaleF32PkFp8F32OpAdaptor(CvtScaleF32PkFp8F32Op op) : CvtScaleF32PkFp8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32PkFp8F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp8.f32' op requires attribute 'dstLoHiSel'"); if (tblgen_dstLoHiSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstLoHiSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstLoHiSel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.cvt.scalef32.pk.fp8.f32' op attribute 'dstLoHiSel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstLoHiSel; auto attr = dict.get("dstLoHiSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstLoHiSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32PkFp8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstLoHiSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstLoHiSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32PkFp8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstLoHiSel.getAsOpaquePointer())); } std::optional CvtScaleF32PkFp8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstLoHiSel") return prop.dstLoHiSel; return std::nullopt; } void CvtScaleF32PkFp8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstLoHiSel") { prop.dstLoHiSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32PkFp8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstLoHiSel) attrs.append("dstLoHiSel", prop.dstLoHiSel); } ::llvm::LogicalResult CvtScaleF32PkFp8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstLoHiSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "dstLoHiSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstLoHiSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp8F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstLoHiSel); } bool CvtScaleF32PkFp8F32Op::getDstLoHiSel() { auto attr = getDstLoHiSelAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32PkFp8F32Op::setDstLoHiSel(bool attrValue) { getProperties().dstLoHiSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void CvtScaleF32PkFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; odsState.addTypes(res); } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = dstLoHiSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, ::mlir::IntegerAttr dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); odsState.addTypes(res); } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(scale); odsState.getOrAddProperties().dstLoHiSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), dstLoHiSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value scale, bool dstLoHiSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(src1), std::forward(scale), std::forward(dstLoHiSel)); } void CvtScaleF32PkFp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32PkFp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32PkFp8F32Op CvtScaleF32PkFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32PkFp8F32Op::verifyInvariantsImpl() { auto tblgen_dstLoHiSel = getProperties().dstLoHiSel; (void)tblgen_dstLoHiSel; if (!tblgen_dstLoHiSel) return emitOpError("requires attribute 'dstLoHiSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_dstLoHiSel, "dstLoHiSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32PkFp8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32PkFp8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstLoHiSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstLoHiSelAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (dstLoHiSelAttr) result.getOrAddProperties().dstLoHiSel = dstLoHiSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({2} ,parser.getBuilder().getIntegerType(16)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src1Operands, odsBuildableType1, src1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32PkFp8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstLoHiSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstLoHiSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32PkFp8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32PkFp8F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32PkFp8F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrBf8BF16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrBf8BF16OpGenericAdaptorBase::CvtScaleF32SrBf8BF16OpGenericAdaptorBase(CvtScaleF32SrBf8BF16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrBf8BF16OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrBf8BF16OpAdaptor::CvtScaleF32SrBf8BF16OpAdaptor(CvtScaleF32SrBf8BF16Op op) : CvtScaleF32SrBf8BF16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrBf8BF16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.bf8.bf16' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.bf8.bf16' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8BF16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrBf8BF16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrBf8BF16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrBf8BF16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrBf8BF16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrBf8BF16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrBf8BF16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8BF16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrBf8BF16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrBf8BF16Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrBf8BF16Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrBf8BF16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8BF16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8BF16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8BF16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8BF16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrBf8BF16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8BF16Op CvtScaleF32SrBf8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrBf8BF16Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps24(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8BF16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrBf8BF16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getType(); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrBf8BF16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrBf8BF16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrBf8BF16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrBf8BF16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrBf8F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrBf8F16OpGenericAdaptorBase::CvtScaleF32SrBf8F16OpGenericAdaptorBase(CvtScaleF32SrBf8F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrBf8F16OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrBf8F16OpAdaptor::CvtScaleF32SrBf8F16OpAdaptor(CvtScaleF32SrBf8F16Op op) : CvtScaleF32SrBf8F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrBf8F16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.bf8.f16' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.bf8.f16' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrBf8F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrBf8F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrBf8F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrBf8F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrBf8F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrBf8F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8F16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrBf8F16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrBf8F16Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrBf8F16Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrBf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrBf8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F16Op CvtScaleF32SrBf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrBf8F16Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps25(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrBf8F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF16Type(); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrBf8F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrBf8F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrBf8F16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrBf8F16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrBf8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrBf8F32OpGenericAdaptorBase::CvtScaleF32SrBf8F32OpGenericAdaptorBase(CvtScaleF32SrBf8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrBf8F32OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrBf8F32OpAdaptor::CvtScaleF32SrBf8F32OpAdaptor(CvtScaleF32SrBf8F32Op op) : CvtScaleF32SrBf8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrBf8F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.bf8.f32' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.bf8.f32' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrBf8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrBf8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrBf8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrBf8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrBf8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrBf8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrBf8F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrBf8F32Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrBf8F32Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrBf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrBf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrBf8F32Op CvtScaleF32SrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrBf8F32Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrBf8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrBf8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrBf8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrBf8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrBf8F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrBf8F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrFp8BF16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrFp8BF16OpGenericAdaptorBase::CvtScaleF32SrFp8BF16OpGenericAdaptorBase(CvtScaleF32SrFp8BF16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrFp8BF16OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrFp8BF16OpAdaptor::CvtScaleF32SrFp8BF16OpAdaptor(CvtScaleF32SrFp8BF16Op op) : CvtScaleF32SrFp8BF16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrFp8BF16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.fp8.bf16' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.fp8.bf16' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8BF16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrFp8BF16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrFp8BF16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrFp8BF16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrFp8BF16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrFp8BF16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrFp8BF16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8BF16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrFp8BF16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrFp8BF16Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrFp8BF16Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrFp8BF16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8BF16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8BF16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8BF16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8BF16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrFp8BF16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8BF16Op CvtScaleF32SrFp8BF16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrFp8BF16Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps24(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8BF16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrFp8BF16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getType(); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrFp8BF16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrFp8BF16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrFp8BF16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrFp8BF16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrFp8F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrFp8F16OpGenericAdaptorBase::CvtScaleF32SrFp8F16OpGenericAdaptorBase(CvtScaleF32SrFp8F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrFp8F16OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrFp8F16OpAdaptor::CvtScaleF32SrFp8F16OpAdaptor(CvtScaleF32SrFp8F16Op op) : CvtScaleF32SrFp8F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrFp8F16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.fp8.f16' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.fp8.f16' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrFp8F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrFp8F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrFp8F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrFp8F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrFp8F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrFp8F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8F16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrFp8F16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrFp8F16Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrFp8F16Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrFp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrFp8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F16Op CvtScaleF32SrFp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrFp8F16Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps25(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrFp8F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF16Type(); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrFp8F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrFp8F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrFp8F16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrFp8F16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrFp8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrFp8F32OpGenericAdaptorBase::CvtScaleF32SrFp8F32OpGenericAdaptorBase(CvtScaleF32SrFp8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrFp8F32OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrFp8F32OpAdaptor::CvtScaleF32SrFp8F32OpAdaptor(CvtScaleF32SrFp8F32Op op) : CvtScaleF32SrFp8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrFp8F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.fp8.f32' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.fp8.f32' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrFp8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrFp8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrFp8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrFp8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrFp8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrFp8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrFp8F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrFp8F32Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrFp8F32Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src0); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src0, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src0), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrFp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrFp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrFp8F32Op CvtScaleF32SrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrFp8F32Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrFp8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrFp8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, odsBuildableType1, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType1, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrFp8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrFp8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrFp8F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrFp8F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk16Bf6Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk16Bf6Bf16OpGenericAdaptorBase::CvtScaleF32SrPk16Bf6Bf16OpGenericAdaptorBase(CvtScaleF32SrPk16Bf6Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk16Bf6Bf16OpAdaptor::CvtScaleF32SrPk16Bf6Bf16OpAdaptor(CvtScaleF32SrPk16Bf6Bf16Op op) : CvtScaleF32SrPk16Bf6Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk16Bf6Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk16Bf6Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk16Bf6Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk16Bf6Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk16Bf6Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk16Bf6Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk16Bf6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk16Bf6Bf16Op CvtScaleF32SrPk16Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6Bf16Op CvtScaleF32SrPk16Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Bf6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6Bf16Op CvtScaleF32SrPk16Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6Bf16Op CvtScaleF32SrPk16Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Bf6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6Bf16Op CvtScaleF32SrPk16Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6Bf16Op CvtScaleF32SrPk16Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk16Bf6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6Bf16Op CvtScaleF32SrPk16Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6Bf16Op CvtScaleF32SrPk16Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps9(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk16Bf6Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk16Bf6Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk16Bf6Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk16Bf6Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk16Bf6F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk16Bf6F16OpGenericAdaptorBase::CvtScaleF32SrPk16Bf6F16OpGenericAdaptorBase(CvtScaleF32SrPk16Bf6F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk16Bf6F16OpAdaptor::CvtScaleF32SrPk16Bf6F16OpAdaptor(CvtScaleF32SrPk16Bf6F16Op op) : CvtScaleF32SrPk16Bf6F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk16Bf6F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk16Bf6F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk16Bf6F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk16Bf6F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk16Bf6F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk16Bf6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk16Bf6F16Op CvtScaleF32SrPk16Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6F16Op CvtScaleF32SrPk16Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Bf6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6F16Op CvtScaleF32SrPk16Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6F16Op CvtScaleF32SrPk16Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Bf6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6F16Op CvtScaleF32SrPk16Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6F16Op CvtScaleF32SrPk16Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk16Bf6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6F16Op CvtScaleF32SrPk16Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6F16Op CvtScaleF32SrPk16Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps10(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk16Bf6F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk16Bf6F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk16Bf6F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk16Bf6F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk16Bf6F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk16Bf6F32OpGenericAdaptorBase::CvtScaleF32SrPk16Bf6F32OpGenericAdaptorBase(CvtScaleF32SrPk16Bf6F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk16Bf6F32OpAdaptor::CvtScaleF32SrPk16Bf6F32OpAdaptor(CvtScaleF32SrPk16Bf6F32Op op) : CvtScaleF32SrPk16Bf6F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk16Bf6F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk16Bf6F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk16Bf6F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk16Bf6F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk16Bf6F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk16Bf6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk16Bf6F32Op CvtScaleF32SrPk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6F32Op CvtScaleF32SrPk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Bf6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6F32Op CvtScaleF32SrPk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6F32Op CvtScaleF32SrPk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Bf6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6F32Op CvtScaleF32SrPk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6F32Op CvtScaleF32SrPk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk16Bf6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Bf6F32Op CvtScaleF32SrPk16Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Bf6F32Op CvtScaleF32SrPk16Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Bf6F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk16Bf6F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk16Bf6F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk16Bf6F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk16Bf6F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk16Fp6Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk16Fp6Bf16OpGenericAdaptorBase::CvtScaleF32SrPk16Fp6Bf16OpGenericAdaptorBase(CvtScaleF32SrPk16Fp6Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk16Fp6Bf16OpAdaptor::CvtScaleF32SrPk16Fp6Bf16OpAdaptor(CvtScaleF32SrPk16Fp6Bf16Op op) : CvtScaleF32SrPk16Fp6Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk16Fp6Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk16Fp6Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk16Fp6Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk16Fp6Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk16Fp6Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk16Fp6Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk16Fp6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk16Fp6Bf16Op CvtScaleF32SrPk16Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6Bf16Op CvtScaleF32SrPk16Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Fp6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6Bf16Op CvtScaleF32SrPk16Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6Bf16Op CvtScaleF32SrPk16Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Fp6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6Bf16Op CvtScaleF32SrPk16Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6Bf16Op CvtScaleF32SrPk16Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk16Fp6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6Bf16Op CvtScaleF32SrPk16Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6Bf16Op CvtScaleF32SrPk16Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps9(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk16Fp6Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk16Fp6Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk16Fp6Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk16Fp6Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk16Fp6F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk16Fp6F16OpGenericAdaptorBase::CvtScaleF32SrPk16Fp6F16OpGenericAdaptorBase(CvtScaleF32SrPk16Fp6F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk16Fp6F16OpAdaptor::CvtScaleF32SrPk16Fp6F16OpAdaptor(CvtScaleF32SrPk16Fp6F16Op op) : CvtScaleF32SrPk16Fp6F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk16Fp6F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk16Fp6F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk16Fp6F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk16Fp6F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk16Fp6F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk16Fp6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk16Fp6F16Op CvtScaleF32SrPk16Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6F16Op CvtScaleF32SrPk16Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Fp6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6F16Op CvtScaleF32SrPk16Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6F16Op CvtScaleF32SrPk16Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Fp6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6F16Op CvtScaleF32SrPk16Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6F16Op CvtScaleF32SrPk16Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk16Fp6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6F16Op CvtScaleF32SrPk16Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6F16Op CvtScaleF32SrPk16Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps10(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk16Fp6F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk16Fp6F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk16Fp6F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk16Fp6F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk16Fp6F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk16Fp6F32OpGenericAdaptorBase::CvtScaleF32SrPk16Fp6F32OpGenericAdaptorBase(CvtScaleF32SrPk16Fp6F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk16Fp6F32OpAdaptor::CvtScaleF32SrPk16Fp6F32OpAdaptor(CvtScaleF32SrPk16Fp6F32Op op) : CvtScaleF32SrPk16Fp6F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk16Fp6F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk16Fp6F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk16Fp6F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk16Fp6F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk16Fp6F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk16Fp6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk16Fp6F32Op CvtScaleF32SrPk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6F32Op CvtScaleF32SrPk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Fp6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6F32Op CvtScaleF32SrPk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6F32Op CvtScaleF32SrPk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk16Fp6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6F32Op CvtScaleF32SrPk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6F32Op CvtScaleF32SrPk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk16Fp6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk16Fp6F32Op CvtScaleF32SrPk16Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk16Fp6F32Op CvtScaleF32SrPk16Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk16Fp6F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk16Fp6F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({16} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk16Fp6F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk16Fp6F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk16Fp6F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk32Bf6Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk32Bf6Bf16OpGenericAdaptorBase::CvtScaleF32SrPk32Bf6Bf16OpGenericAdaptorBase(CvtScaleF32SrPk32Bf6Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk32Bf6Bf16OpAdaptor::CvtScaleF32SrPk32Bf6Bf16OpAdaptor(CvtScaleF32SrPk32Bf6Bf16Op op) : CvtScaleF32SrPk32Bf6Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk32Bf6Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk32Bf6Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk32Bf6Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk32Bf6Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk32Bf6Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk32Bf6Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk32Bf6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk32Bf6Bf16Op CvtScaleF32SrPk32Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6Bf16Op CvtScaleF32SrPk32Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Bf6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6Bf16Op CvtScaleF32SrPk32Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6Bf16Op CvtScaleF32SrPk32Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Bf6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6Bf16Op CvtScaleF32SrPk32Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6Bf16Op CvtScaleF32SrPk32Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk32Bf6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6Bf16Op CvtScaleF32SrPk32Bf6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6Bf16Op CvtScaleF32SrPk32Bf6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps18(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk32Bf6Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk32Bf6Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk32Bf6Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk32Bf6Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk32Bf6F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk32Bf6F16OpGenericAdaptorBase::CvtScaleF32SrPk32Bf6F16OpGenericAdaptorBase(CvtScaleF32SrPk32Bf6F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk32Bf6F16OpAdaptor::CvtScaleF32SrPk32Bf6F16OpAdaptor(CvtScaleF32SrPk32Bf6F16Op op) : CvtScaleF32SrPk32Bf6F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk32Bf6F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk32Bf6F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk32Bf6F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk32Bf6F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk32Bf6F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk32Bf6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk32Bf6F16Op CvtScaleF32SrPk32Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6F16Op CvtScaleF32SrPk32Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Bf6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6F16Op CvtScaleF32SrPk32Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6F16Op CvtScaleF32SrPk32Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Bf6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6F16Op CvtScaleF32SrPk32Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6F16Op CvtScaleF32SrPk32Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk32Bf6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6F16Op CvtScaleF32SrPk32Bf6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6F16Op CvtScaleF32SrPk32Bf6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps19(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk32Bf6F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk32Bf6F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk32Bf6F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk32Bf6F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk32Bf6F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk32Bf6F32OpGenericAdaptorBase::CvtScaleF32SrPk32Bf6F32OpGenericAdaptorBase(CvtScaleF32SrPk32Bf6F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk32Bf6F32OpAdaptor::CvtScaleF32SrPk32Bf6F32OpAdaptor(CvtScaleF32SrPk32Bf6F32Op op) : CvtScaleF32SrPk32Bf6F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk32Bf6F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk32Bf6F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk32Bf6F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk32Bf6F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk32Bf6F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk32Bf6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk32Bf6F32Op CvtScaleF32SrPk32Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6F32Op CvtScaleF32SrPk32Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Bf6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6F32Op CvtScaleF32SrPk32Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6F32Op CvtScaleF32SrPk32Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Bf6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6F32Op CvtScaleF32SrPk32Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6F32Op CvtScaleF32SrPk32Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk32Bf6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Bf6F32Op CvtScaleF32SrPk32Bf6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Bf6F32Op CvtScaleF32SrPk32Bf6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Bf6F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk32Bf6F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk32Bf6F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk32Bf6F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk32Bf6F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk32Fp6Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk32Fp6Bf16OpGenericAdaptorBase::CvtScaleF32SrPk32Fp6Bf16OpGenericAdaptorBase(CvtScaleF32SrPk32Fp6Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk32Fp6Bf16OpAdaptor::CvtScaleF32SrPk32Fp6Bf16OpAdaptor(CvtScaleF32SrPk32Fp6Bf16Op op) : CvtScaleF32SrPk32Fp6Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk32Fp6Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk32Fp6Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk32Fp6Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk32Fp6Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk32Fp6Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk32Fp6Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk32Fp6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk32Fp6Bf16Op CvtScaleF32SrPk32Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6Bf16Op CvtScaleF32SrPk32Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Fp6Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6Bf16Op CvtScaleF32SrPk32Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6Bf16Op CvtScaleF32SrPk32Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Fp6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6Bf16Op CvtScaleF32SrPk32Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6Bf16Op CvtScaleF32SrPk32Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk32Fp6Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6Bf16Op CvtScaleF32SrPk32Fp6Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6Bf16Op CvtScaleF32SrPk32Fp6Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps18(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk32Fp6Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk32Fp6Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk32Fp6Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk32Fp6Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk32Fp6F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk32Fp6F16OpGenericAdaptorBase::CvtScaleF32SrPk32Fp6F16OpGenericAdaptorBase(CvtScaleF32SrPk32Fp6F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk32Fp6F16OpAdaptor::CvtScaleF32SrPk32Fp6F16OpAdaptor(CvtScaleF32SrPk32Fp6F16Op op) : CvtScaleF32SrPk32Fp6F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk32Fp6F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk32Fp6F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk32Fp6F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk32Fp6F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk32Fp6F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk32Fp6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk32Fp6F16Op CvtScaleF32SrPk32Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6F16Op CvtScaleF32SrPk32Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Fp6F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6F16Op CvtScaleF32SrPk32Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6F16Op CvtScaleF32SrPk32Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Fp6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6F16Op CvtScaleF32SrPk32Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6F16Op CvtScaleF32SrPk32Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk32Fp6F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6F16Op CvtScaleF32SrPk32Fp6F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6F16Op CvtScaleF32SrPk32Fp6F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps19(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk32Fp6F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk32Fp6F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk32Fp6F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk32Fp6F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk32Fp6F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk32Fp6F32OpGenericAdaptorBase::CvtScaleF32SrPk32Fp6F32OpGenericAdaptorBase(CvtScaleF32SrPk32Fp6F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk32Fp6F32OpAdaptor::CvtScaleF32SrPk32Fp6F32OpAdaptor(CvtScaleF32SrPk32Fp6F32Op op) : CvtScaleF32SrPk32Fp6F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk32Fp6F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk32Fp6F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk32Fp6F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk32Fp6F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk32Fp6F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk32Fp6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk32Fp6F32Op CvtScaleF32SrPk32Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6F32Op CvtScaleF32SrPk32Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Fp6F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6F32Op CvtScaleF32SrPk32Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6F32Op CvtScaleF32SrPk32Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk32Fp6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6F32Op CvtScaleF32SrPk32Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6F32Op CvtScaleF32SrPk32Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk32Fp6F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk32Fp6F32Op CvtScaleF32SrPk32Fp6F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk32Fp6F32Op CvtScaleF32SrPk32Fp6F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps16(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk32Fp6F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk32Fp6F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({32} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk32Fp6F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk32Fp6F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk32Fp6F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Bf8Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Bf8Bf16OpGenericAdaptorBase::CvtScaleF32SrPk8Bf8Bf16OpGenericAdaptorBase(CvtScaleF32SrPk8Bf8Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Bf8Bf16OpAdaptor::CvtScaleF32SrPk8Bf8Bf16OpAdaptor(CvtScaleF32SrPk8Bf8Bf16Op op) : CvtScaleF32SrPk8Bf8Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Bf8Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Bf8Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Bf8Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Bf8Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Bf8Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Bf8Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Bf8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Bf8Bf16Op CvtScaleF32SrPk8Bf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8Bf16Op CvtScaleF32SrPk8Bf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Bf8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8Bf16Op CvtScaleF32SrPk8Bf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8Bf16Op CvtScaleF32SrPk8Bf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Bf8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8Bf16Op CvtScaleF32SrPk8Bf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8Bf16Op CvtScaleF32SrPk8Bf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Bf8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8Bf16Op CvtScaleF32SrPk8Bf8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8Bf16Op CvtScaleF32SrPk8Bf8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Bf8Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Bf8Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Bf8Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Bf8Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Bf8F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Bf8F16OpGenericAdaptorBase::CvtScaleF32SrPk8Bf8F16OpGenericAdaptorBase(CvtScaleF32SrPk8Bf8F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Bf8F16OpAdaptor::CvtScaleF32SrPk8Bf8F16OpAdaptor(CvtScaleF32SrPk8Bf8F16Op op) : CvtScaleF32SrPk8Bf8F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Bf8F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Bf8F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Bf8F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Bf8F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Bf8F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Bf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Bf8F16Op CvtScaleF32SrPk8Bf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8F16Op CvtScaleF32SrPk8Bf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Bf8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8F16Op CvtScaleF32SrPk8Bf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8F16Op CvtScaleF32SrPk8Bf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Bf8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8F16Op CvtScaleF32SrPk8Bf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8F16Op CvtScaleF32SrPk8Bf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Bf8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8F16Op CvtScaleF32SrPk8Bf8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8F16Op CvtScaleF32SrPk8Bf8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Bf8F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Bf8F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Bf8F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Bf8F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Bf8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Bf8F32OpGenericAdaptorBase::CvtScaleF32SrPk8Bf8F32OpGenericAdaptorBase(CvtScaleF32SrPk8Bf8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Bf8F32OpAdaptor::CvtScaleF32SrPk8Bf8F32OpAdaptor(CvtScaleF32SrPk8Bf8F32Op op) : CvtScaleF32SrPk8Bf8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Bf8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Bf8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Bf8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Bf8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Bf8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Bf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Bf8F32Op CvtScaleF32SrPk8Bf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8F32Op CvtScaleF32SrPk8Bf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Bf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8F32Op CvtScaleF32SrPk8Bf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8F32Op CvtScaleF32SrPk8Bf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Bf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8F32Op CvtScaleF32SrPk8Bf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8F32Op CvtScaleF32SrPk8Bf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Bf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Bf8F32Op CvtScaleF32SrPk8Bf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Bf8F32Op CvtScaleF32SrPk8Bf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Bf8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Bf8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Bf8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Bf8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Bf8F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Fp4Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Fp4Bf16OpGenericAdaptorBase::CvtScaleF32SrPk8Fp4Bf16OpGenericAdaptorBase(CvtScaleF32SrPk8Fp4Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Fp4Bf16OpAdaptor::CvtScaleF32SrPk8Fp4Bf16OpAdaptor(CvtScaleF32SrPk8Fp4Bf16Op op) : CvtScaleF32SrPk8Fp4Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Fp4Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Fp4Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Fp4Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Fp4Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Fp4Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Fp4Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Fp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Fp4Bf16Op CvtScaleF32SrPk8Fp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4Bf16Op CvtScaleF32SrPk8Fp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4Bf16Op CvtScaleF32SrPk8Fp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4Bf16Op CvtScaleF32SrPk8Fp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp4Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4Bf16Op CvtScaleF32SrPk8Fp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4Bf16Op CvtScaleF32SrPk8Fp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Fp4Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4Bf16Op CvtScaleF32SrPk8Fp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4Bf16Op CvtScaleF32SrPk8Fp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Fp4Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Fp4Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Fp4Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Fp4Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Fp4F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Fp4F16OpGenericAdaptorBase::CvtScaleF32SrPk8Fp4F16OpGenericAdaptorBase(CvtScaleF32SrPk8Fp4F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Fp4F16OpAdaptor::CvtScaleF32SrPk8Fp4F16OpAdaptor(CvtScaleF32SrPk8Fp4F16Op op) : CvtScaleF32SrPk8Fp4F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Fp4F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Fp4F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Fp4F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Fp4F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Fp4F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Fp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Fp4F16Op CvtScaleF32SrPk8Fp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4F16Op CvtScaleF32SrPk8Fp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4F16Op CvtScaleF32SrPk8Fp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4F16Op CvtScaleF32SrPk8Fp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp4F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4F16Op CvtScaleF32SrPk8Fp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4F16Op CvtScaleF32SrPk8Fp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Fp4F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4F16Op CvtScaleF32SrPk8Fp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4F16Op CvtScaleF32SrPk8Fp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Fp4F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Fp4F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Fp4F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Fp4F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Fp4F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Fp4F32OpGenericAdaptorBase::CvtScaleF32SrPk8Fp4F32OpGenericAdaptorBase(CvtScaleF32SrPk8Fp4F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Fp4F32OpAdaptor::CvtScaleF32SrPk8Fp4F32OpAdaptor(CvtScaleF32SrPk8Fp4F32Op op) : CvtScaleF32SrPk8Fp4F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Fp4F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Fp4F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Fp4F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Fp4F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Fp4F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Fp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Fp4F32Op CvtScaleF32SrPk8Fp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4F32Op CvtScaleF32SrPk8Fp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4F32Op CvtScaleF32SrPk8Fp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4F32Op CvtScaleF32SrPk8Fp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp4F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4F32Op CvtScaleF32SrPk8Fp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4F32Op CvtScaleF32SrPk8Fp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Fp4F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp4F32Op CvtScaleF32SrPk8Fp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp4F32Op CvtScaleF32SrPk8Fp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp4F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Fp4F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Fp4F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Fp4F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Fp4F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Fp8Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Fp8Bf16OpGenericAdaptorBase::CvtScaleF32SrPk8Fp8Bf16OpGenericAdaptorBase(CvtScaleF32SrPk8Fp8Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Fp8Bf16OpAdaptor::CvtScaleF32SrPk8Fp8Bf16OpAdaptor(CvtScaleF32SrPk8Fp8Bf16Op op) : CvtScaleF32SrPk8Fp8Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Fp8Bf16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Fp8Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Fp8Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Fp8Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Fp8Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Fp8Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Fp8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Fp8Bf16Op CvtScaleF32SrPk8Fp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8Bf16Op CvtScaleF32SrPk8Fp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp8Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8Bf16Op CvtScaleF32SrPk8Fp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8Bf16Op CvtScaleF32SrPk8Fp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8Bf16Op CvtScaleF32SrPk8Fp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8Bf16Op CvtScaleF32SrPk8Fp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Fp8Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8Bf16Op CvtScaleF32SrPk8Fp8Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8Bf16Op CvtScaleF32SrPk8Fp8Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8Bf16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Fp8Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Fp8Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Fp8Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Fp8Bf16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Fp8F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Fp8F16OpGenericAdaptorBase::CvtScaleF32SrPk8Fp8F16OpGenericAdaptorBase(CvtScaleF32SrPk8Fp8F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Fp8F16OpAdaptor::CvtScaleF32SrPk8Fp8F16OpAdaptor(CvtScaleF32SrPk8Fp8F16Op op) : CvtScaleF32SrPk8Fp8F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F16OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Fp8F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Fp8F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Fp8F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Fp8F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Fp8F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Fp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Fp8F16Op CvtScaleF32SrPk8Fp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8F16Op CvtScaleF32SrPk8Fp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp8F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8F16Op CvtScaleF32SrPk8Fp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8F16Op CvtScaleF32SrPk8Fp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8F16Op CvtScaleF32SrPk8Fp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8F16Op CvtScaleF32SrPk8Fp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Fp8F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8F16Op CvtScaleF32SrPk8Fp8F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8F16Op CvtScaleF32SrPk8Fp8F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F16Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Fp8F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Fp8F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Fp8F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Fp8F16Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPk8Fp8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPk8Fp8F32OpGenericAdaptorBase::CvtScaleF32SrPk8Fp8F32OpGenericAdaptorBase(CvtScaleF32SrPk8Fp8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail CvtScaleF32SrPk8Fp8F32OpAdaptor::CvtScaleF32SrPk8Fp8F32OpAdaptor(CvtScaleF32SrPk8Fp8F32Op op) : CvtScaleF32SrPk8Fp8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F32OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPk8Fp8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPk8Fp8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional CvtScaleF32SrPk8Fp8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void CvtScaleF32SrPk8Fp8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void CvtScaleF32SrPk8Fp8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void CvtScaleF32SrPk8Fp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.addTypes(res); } CvtScaleF32SrPk8Fp8F32Op CvtScaleF32SrPk8Fp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8F32Op CvtScaleF32SrPk8Fp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8F32Op CvtScaleF32SrPk8Fp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8F32Op CvtScaleF32SrPk8Fp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(seed), std::forward(scale)); } void CvtScaleF32SrPk8Fp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8F32Op CvtScaleF32SrPk8Fp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8F32Op CvtScaleF32SrPk8Fp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPk8Fp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPk8Fp8F32Op CvtScaleF32SrPk8Fp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPk8Fp8F32Op CvtScaleF32SrPk8Fp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F32Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps15(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPk8Fp8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPk8Fp8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({8} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, odsBuildableType0, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType1, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPk8Fp8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPk8Fp8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPk8Fp8F32Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPkFp4Bf16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPkFp4Bf16OpGenericAdaptorBase::CvtScaleF32SrPkFp4Bf16OpGenericAdaptorBase(CvtScaleF32SrPkFp4Bf16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrPkFp4Bf16OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrPkFp4Bf16OpAdaptor::CvtScaleF32SrPkFp4Bf16OpAdaptor(CvtScaleF32SrPkFp4Bf16Op op) : CvtScaleF32SrPkFp4Bf16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPkFp4Bf16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.pk.fp4.bf16' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.pk.fp4.bf16' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4Bf16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPkFp4Bf16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPkFp4Bf16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrPkFp4Bf16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrPkFp4Bf16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrPkFp4Bf16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrPkFp4Bf16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4Bf16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPkFp4Bf16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrPkFp4Bf16Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrPkFp4Bf16Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrPkFp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4Bf16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPkFp4Bf16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4Bf16Op CvtScaleF32SrPkFp4Bf16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPkFp4Bf16Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4Bf16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPkFp4Bf16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getType()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, odsBuildableType1, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPkFp4Bf16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPkFp4Bf16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPkFp4Bf16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrPkFp4Bf16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPkFp4F16Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPkFp4F16OpGenericAdaptorBase::CvtScaleF32SrPkFp4F16OpGenericAdaptorBase(CvtScaleF32SrPkFp4F16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrPkFp4F16OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrPkFp4F16OpAdaptor::CvtScaleF32SrPkFp4F16OpAdaptor(CvtScaleF32SrPkFp4F16Op op) : CvtScaleF32SrPkFp4F16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPkFp4F16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.pk.fp4.f16' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.pk.fp4.f16' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPkFp4F16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPkFp4F16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrPkFp4F16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrPkFp4F16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrPkFp4F16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPkFp4F16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrPkFp4F16Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrPkFp4F16Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrPkFp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4F16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPkFp4F16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F16Op CvtScaleF32SrPkFp4F16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F16Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPkFp4F16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getF16Type()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, odsBuildableType1, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPkFp4F16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPkFp4F16Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPkFp4F16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrPkFp4F16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtScaleF32SrPkFp4F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtScaleF32SrPkFp4F32OpGenericAdaptorBase::CvtScaleF32SrPkFp4F32OpGenericAdaptorBase(CvtScaleF32SrPkFp4F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtScaleF32SrPkFp4F32OpGenericAdaptorBase::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtScaleF32SrPkFp4F32OpAdaptor::CvtScaleF32SrPkFp4F32OpAdaptor(CvtScaleF32SrPkFp4F32Op op) : CvtScaleF32SrPkFp4F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtScaleF32SrPkFp4F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitError(loc, "'rocdl.cvt.scalef32.sr.pk.fp4.f32' op requires attribute 'dstSelIndex'"); if (tblgen_dstSelIndex && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dstSelIndex))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dstSelIndex).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.scalef32.sr.pk.fp4.f32' op attribute 'dstSelIndex' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.dstSelIndex; auto attr = dict.get("dstSelIndex"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dstSelIndex` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtScaleF32SrPkFp4F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.dstSelIndex; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dstSelIndex", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtScaleF32SrPkFp4F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.dstSelIndex.getAsOpaquePointer())); } std::optional CvtScaleF32SrPkFp4F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "dstSelIndex") return prop.dstSelIndex; return std::nullopt; } void CvtScaleF32SrPkFp4F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "dstSelIndex") { prop.dstSelIndex = ::llvm::dyn_cast_or_null>(value); return; } } void CvtScaleF32SrPkFp4F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.dstSelIndex) attrs.append("dstSelIndex", prop.dstSelIndex); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getDstSelIndexAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dstSelIndex", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.dstSelIndex))) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPkFp4F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.dstSelIndex); } uint32_t CvtScaleF32SrPkFp4F32Op::getDstSelIndex() { auto attr = getDstSelIndexAttr(); return attr.getValue().getZExtValue(); } void CvtScaleF32SrPkFp4F32Op::setDstSelIndex(uint32_t attrValue) { getProperties().dstSelIndex = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtScaleF32SrPkFp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; odsState.addTypes(res); } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = dstSelIndex; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, ::mlir::IntegerAttr dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); odsState.addTypes(res); } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(res), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { odsState.addOperands(oldVdst); odsState.addOperands(src); odsState.addOperands(seed); odsState.addOperands(scale); odsState.getOrAddProperties().dstSelIndex = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dstSelIndex); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value oldVdst, ::mlir::Value src, ::mlir::Value seed, ::mlir::Value scale, uint32_t dstSelIndex) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(oldVdst), std::forward(src), std::forward(seed), std::forward(scale), std::forward(dstSelIndex)); } void CvtScaleF32SrPkFp4F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtScaleF32SrPkFp4F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtScaleF32SrPkFp4F32Op CvtScaleF32SrPkFp4F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F32Op::verifyInvariantsImpl() { auto tblgen_dstSelIndex = getProperties().dstSelIndex; (void)tblgen_dstSelIndex; if (!tblgen_dstSelIndex) return emitOpError("requires attribute 'dstSelIndex'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dstSelIndex, "dstSelIndex"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps23(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtScaleF32SrPkFp4F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtScaleF32SrPkFp4F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand seedRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> seedOperands(&seedRawOperand, 1); ::llvm::SMLoc seedOperandsLoc; (void)seedOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleOperands(&scaleRawOperand, 1); ::llvm::SMLoc scaleOperandsLoc; (void)scaleOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldVdstRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldVdstOperands(&oldVdstRawOperand, 1); ::llvm::SMLoc oldVdstOperandsLoc; (void)oldVdstOperandsLoc; ::mlir::IntegerAttr dstSelIndexAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); seedOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(seedRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldVdstOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldVdstRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dstSelIndexAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dstSelIndexAttr) result.getOrAddProperties().dstSelIndex = dstSelIndexAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({2} ,parser.getBuilder().getF32Type()); ::mlir::Type odsBuildableType2 = parser.getBuilder().getF32Type(); result.addTypes(resTypes); if (parser.resolveOperands(oldVdstOperands, odsBuildableType0, oldVdstOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, odsBuildableType1, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(seedOperands, odsBuildableType0, seedOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(scaleOperands, odsBuildableType2, scaleOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtScaleF32SrPkFp4F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dstSelIndex"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSeed(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScale(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOldVdst(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getDstSelIndexAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtScaleF32SrPkFp4F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtScaleF32SrPkFp4F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtScaleF32SrPkFp4F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtSrBf8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtSrBf8F32OpGenericAdaptorBase::CvtSrBf8F32OpGenericAdaptorBase(CvtSrBf8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtSrBf8F32OpGenericAdaptorBase::getByteSel() { auto attr = getByteSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtSrBf8F32OpAdaptor::CvtSrBf8F32OpAdaptor(CvtSrBf8F32Op op) : CvtSrBf8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtSrBf8F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_byteSel = getProperties().byteSel; (void)tblgen_byteSel; if (!tblgen_byteSel) return emitError(loc, "'rocdl.cvt.sr.bf8.f32' op requires attribute 'byteSel'"); if (tblgen_byteSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_byteSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_byteSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.sr.bf8.f32' op attribute 'byteSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtSrBf8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.byteSel; auto attr = dict.get("byteSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `byteSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtSrBf8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.byteSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("byteSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtSrBf8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.byteSel.getAsOpaquePointer())); } std::optional CvtSrBf8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "byteSel") return prop.byteSel; return std::nullopt; } void CvtSrBf8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "byteSel") { prop.byteSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtSrBf8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.byteSel) attrs.append("byteSel", prop.byteSel); } ::llvm::LogicalResult CvtSrBf8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getByteSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "byteSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtSrBf8F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.byteSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtSrBf8F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.byteSel); } uint32_t CvtSrBf8F32Op::getByteSel() { auto attr = getByteSelAttr(); return attr.getValue().getZExtValue(); } void CvtSrBf8F32Op::setByteSel(uint32_t attrValue) { getProperties().byteSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtSrBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().byteSel = byteSel; odsState.addTypes(res); } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); } void CvtSrBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().byteSel = byteSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); } void CvtSrBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().byteSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), byteSel); odsState.addTypes(res); } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); } void CvtSrBf8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().byteSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), byteSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); } void CvtSrBf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtSrBf8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrBf8F32Op CvtSrBf8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtSrBf8F32Op::verifyInvariantsImpl() { auto tblgen_byteSel = getProperties().byteSel; (void)tblgen_byteSel; if (!tblgen_byteSel) return emitOpError("requires attribute 'byteSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_byteSel, "byteSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtSrBf8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtSrBf8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcAOperands(&srcARawOperand, 1); ::llvm::SMLoc srcAOperandsLoc; (void)srcAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcBOperands(&srcBRawOperand, 1); ::llvm::SMLoc srcBOperandsLoc; (void)srcBOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::IntegerAttr byteSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcBRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(byteSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (byteSelAttr) result.getOrAddProperties().byteSel = byteSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getF32Type(); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcAOperands, odsBuildableType0, srcAOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcBOperands, odsBuildableType1, srcBOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(oldOperands, odsBuildableType1, oldOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtSrBf8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("byteSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrcA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrcB(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getByteSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtSrBf8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtSrBf8F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtSrBf8F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::CvtSrFp8F32Op definitions //===----------------------------------------------------------------------===// namespace detail { CvtSrFp8F32OpGenericAdaptorBase::CvtSrFp8F32OpGenericAdaptorBase(CvtSrFp8F32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t CvtSrFp8F32OpGenericAdaptorBase::getByteSel() { auto attr = getByteSelAttr(); return attr.getValue().getZExtValue(); } } // namespace detail CvtSrFp8F32OpAdaptor::CvtSrFp8F32OpAdaptor(CvtSrFp8F32Op op) : CvtSrFp8F32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult CvtSrFp8F32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_byteSel = getProperties().byteSel; (void)tblgen_byteSel; if (!tblgen_byteSel) return emitError(loc, "'rocdl.cvt.sr.fp8.f32' op requires attribute 'byteSel'"); if (tblgen_byteSel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_byteSel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_byteSel).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.cvt.sr.fp8.f32' op attribute 'byteSel' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult CvtSrFp8F32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.byteSel; auto attr = dict.get("byteSel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `byteSel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute CvtSrFp8F32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.byteSel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("byteSel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code CvtSrFp8F32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.byteSel.getAsOpaquePointer())); } std::optional CvtSrFp8F32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "byteSel") return prop.byteSel; return std::nullopt; } void CvtSrFp8F32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "byteSel") { prop.byteSel = ::llvm::dyn_cast_or_null>(value); return; } } void CvtSrFp8F32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.byteSel) attrs.append("byteSel", prop.byteSel); } ::llvm::LogicalResult CvtSrFp8F32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getByteSelAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "byteSel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult CvtSrFp8F32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.byteSel))) return ::mlir::failure(); return ::mlir::success(); } void CvtSrFp8F32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.byteSel); } uint32_t CvtSrFp8F32Op::getByteSel() { auto attr = getByteSelAttr(); return attr.getValue().getZExtValue(); } void CvtSrFp8F32Op::setByteSel(uint32_t attrValue) { getProperties().byteSel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void CvtSrFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().byteSel = byteSel; odsState.addTypes(res); } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); } void CvtSrFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().byteSel = byteSel; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, ::mlir::IntegerAttr byteSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); } void CvtSrFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().byteSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), byteSel); odsState.addTypes(res); } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); } void CvtSrFp8F32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { odsState.addOperands(srcA); odsState.addOperands(srcB); odsState.addOperands(old); odsState.getOrAddProperties().byteSel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), byteSel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value srcA, ::mlir::Value srcB, ::mlir::Value old, uint32_t byteSel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(srcA), std::forward(srcB), std::forward(old), std::forward(byteSel)); } void CvtSrFp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void CvtSrFp8F32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } CvtSrFp8F32Op CvtSrFp8F32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult CvtSrFp8F32Op::verifyInvariantsImpl() { auto tblgen_byteSel = getProperties().byteSel; (void)tblgen_byteSel; if (!tblgen_byteSel) return emitOpError("requires attribute 'byteSel'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_byteSel, "byteSel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult CvtSrFp8F32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult CvtSrFp8F32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcAOperands(&srcARawOperand, 1); ::llvm::SMLoc srcAOperandsLoc; (void)srcAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcBOperands(&srcBRawOperand, 1); ::llvm::SMLoc srcBOperandsLoc; (void)srcBOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::IntegerAttr byteSelAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } srcAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcBRawOperand)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseLSquare()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(byteSelAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (byteSelAttr) result.getOrAddProperties().byteSel = byteSelAttr; if (parser.parseRSquare()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getF32Type(); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcAOperands, odsBuildableType0, srcAOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcBOperands, odsBuildableType1, srcBOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(oldOperands, odsBuildableType1, oldOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void CvtSrFp8F32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("byteSel"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getSrcA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrcB(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << "["; _odsPrinter.printAttributeWithoutType(getByteSelAttr()); _odsPrinter << "]"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void CvtSrFp8F32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::CvtSrFp8F32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::CvtSrFp8F32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DPPUpdateOp definitions //===----------------------------------------------------------------------===// namespace detail { DPPUpdateOpGenericAdaptorBase::DPPUpdateOpGenericAdaptorBase(DPPUpdateOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t DPPUpdateOpGenericAdaptorBase::getDppCtrl() { auto attr = getDppCtrlAttr(); return attr.getValue().getZExtValue(); } uint32_t DPPUpdateOpGenericAdaptorBase::getRowMask() { auto attr = getRowMaskAttr(); return attr.getValue().getZExtValue(); } uint32_t DPPUpdateOpGenericAdaptorBase::getBankMask() { auto attr = getBankMaskAttr(); return attr.getValue().getZExtValue(); } bool DPPUpdateOpGenericAdaptorBase::getBoundCtrl() { auto attr = getBoundCtrlAttr(); return attr.getValue().getZExtValue(); } } // namespace detail DPPUpdateOpAdaptor::DPPUpdateOpAdaptor(DPPUpdateOp op) : DPPUpdateOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DPPUpdateOpAdaptor::verify(::mlir::Location loc) { auto tblgen_bankMask = getProperties().bankMask; (void)tblgen_bankMask; if (!tblgen_bankMask) return emitError(loc, "'rocdl.update.dpp' op requires attribute 'bankMask'"); auto tblgen_boundCtrl = getProperties().boundCtrl; (void)tblgen_boundCtrl; if (!tblgen_boundCtrl) return emitError(loc, "'rocdl.update.dpp' op requires attribute 'boundCtrl'"); auto tblgen_dppCtrl = getProperties().dppCtrl; (void)tblgen_dppCtrl; if (!tblgen_dppCtrl) return emitError(loc, "'rocdl.update.dpp' op requires attribute 'dppCtrl'"); auto tblgen_rowMask = getProperties().rowMask; (void)tblgen_rowMask; if (!tblgen_rowMask) return emitError(loc, "'rocdl.update.dpp' op requires attribute 'rowMask'"); if (tblgen_dppCtrl && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_dppCtrl))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_dppCtrl).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.update.dpp' op attribute 'dppCtrl' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_rowMask && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_rowMask))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_rowMask).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.update.dpp' op attribute 'rowMask' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_bankMask && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_bankMask))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_bankMask).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.update.dpp' op attribute 'bankMask' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_boundCtrl && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_boundCtrl))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_boundCtrl).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.update.dpp' op attribute 'boundCtrl' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult DPPUpdateOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.bankMask; auto attr = dict.get("bankMask"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `bankMask` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.boundCtrl; auto attr = dict.get("boundCtrl"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `boundCtrl` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.dppCtrl; auto attr = dict.get("dppCtrl"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `dppCtrl` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.rowMask; auto attr = dict.get("rowMask"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `rowMask` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute DPPUpdateOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.bankMask; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("bankMask", propStorage)); } { const auto &propStorage = prop.boundCtrl; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("boundCtrl", propStorage)); } { const auto &propStorage = prop.dppCtrl; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("dppCtrl", propStorage)); } { const auto &propStorage = prop.rowMask; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("rowMask", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DPPUpdateOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.bankMask.getAsOpaquePointer()), llvm::hash_value(prop.boundCtrl.getAsOpaquePointer()), llvm::hash_value(prop.dppCtrl.getAsOpaquePointer()), llvm::hash_value(prop.rowMask.getAsOpaquePointer())); } std::optional DPPUpdateOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "bankMask") return prop.bankMask; if (name == "boundCtrl") return prop.boundCtrl; if (name == "dppCtrl") return prop.dppCtrl; if (name == "rowMask") return prop.rowMask; return std::nullopt; } void DPPUpdateOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "bankMask") { prop.bankMask = ::llvm::dyn_cast_or_null>(value); return; } if (name == "boundCtrl") { prop.boundCtrl = ::llvm::dyn_cast_or_null>(value); return; } if (name == "dppCtrl") { prop.dppCtrl = ::llvm::dyn_cast_or_null>(value); return; } if (name == "rowMask") { prop.rowMask = ::llvm::dyn_cast_or_null>(value); return; } } void DPPUpdateOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.bankMask) attrs.append("bankMask", prop.bankMask); if (prop.boundCtrl) attrs.append("boundCtrl", prop.boundCtrl); if (prop.dppCtrl) attrs.append("dppCtrl", prop.dppCtrl); if (prop.rowMask) attrs.append("rowMask", prop.rowMask); } ::llvm::LogicalResult DPPUpdateOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBankMaskAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "bankMask", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBoundCtrlAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "boundCtrl", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getDppCtrlAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "dppCtrl", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getRowMaskAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "rowMask", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult DPPUpdateOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.bankMask))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.boundCtrl))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.dppCtrl))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.rowMask))) return ::mlir::failure(); return ::mlir::success(); } void DPPUpdateOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.bankMask); writer.writeAttribute(prop.boundCtrl); writer.writeAttribute(prop.dppCtrl); writer.writeAttribute(prop.rowMask); } uint32_t DPPUpdateOp::getDppCtrl() { auto attr = getDppCtrlAttr(); return attr.getValue().getZExtValue(); } uint32_t DPPUpdateOp::getRowMask() { auto attr = getRowMaskAttr(); return attr.getValue().getZExtValue(); } uint32_t DPPUpdateOp::getBankMask() { auto attr = getBankMaskAttr(); return attr.getValue().getZExtValue(); } bool DPPUpdateOp::getBoundCtrl() { auto attr = getBoundCtrlAttr(); return attr.getValue().getZExtValue(); } void DPPUpdateOp::setDppCtrl(uint32_t attrValue) { getProperties().dppCtrl = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void DPPUpdateOp::setRowMask(uint32_t attrValue) { getProperties().rowMask = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void DPPUpdateOp::setBankMask(uint32_t attrValue) { getProperties().bankMask = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void DPPUpdateOp::setBoundCtrl(bool attrValue) { getProperties().boundCtrl = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void DPPUpdateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr dppCtrl, ::mlir::IntegerAttr rowMask, ::mlir::IntegerAttr bankMask, ::mlir::IntegerAttr boundCtrl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().dppCtrl = dppCtrl; odsState.getOrAddProperties().rowMask = rowMask; odsState.getOrAddProperties().bankMask = bankMask; odsState.getOrAddProperties().boundCtrl = boundCtrl; odsState.addTypes(res); } DPPUpdateOp DPPUpdateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr dppCtrl, ::mlir::IntegerAttr rowMask, ::mlir::IntegerAttr bankMask, ::mlir::IntegerAttr boundCtrl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src), std::forward(dppCtrl), std::forward(rowMask), std::forward(bankMask), std::forward(boundCtrl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DPPUpdateOp DPPUpdateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr dppCtrl, ::mlir::IntegerAttr rowMask, ::mlir::IntegerAttr bankMask, ::mlir::IntegerAttr boundCtrl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src), std::forward(dppCtrl), std::forward(rowMask), std::forward(bankMask), std::forward(boundCtrl)); } void DPPUpdateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr dppCtrl, ::mlir::IntegerAttr rowMask, ::mlir::IntegerAttr bankMask, ::mlir::IntegerAttr boundCtrl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().dppCtrl = dppCtrl; odsState.getOrAddProperties().rowMask = rowMask; odsState.getOrAddProperties().bankMask = bankMask; odsState.getOrAddProperties().boundCtrl = boundCtrl; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DPPUpdateOp DPPUpdateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr dppCtrl, ::mlir::IntegerAttr rowMask, ::mlir::IntegerAttr bankMask, ::mlir::IntegerAttr boundCtrl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(dppCtrl), std::forward(rowMask), std::forward(bankMask), std::forward(boundCtrl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DPPUpdateOp DPPUpdateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr dppCtrl, ::mlir::IntegerAttr rowMask, ::mlir::IntegerAttr bankMask, ::mlir::IntegerAttr boundCtrl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(dppCtrl), std::forward(rowMask), std::forward(bankMask), std::forward(boundCtrl)); } void DPPUpdateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, uint32_t dppCtrl, uint32_t rowMask, uint32_t bankMask, bool boundCtrl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().dppCtrl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dppCtrl); odsState.getOrAddProperties().rowMask = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), rowMask); odsState.getOrAddProperties().bankMask = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), bankMask); odsState.getOrAddProperties().boundCtrl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundCtrl); odsState.addTypes(res); } DPPUpdateOp DPPUpdateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, uint32_t dppCtrl, uint32_t rowMask, uint32_t bankMask, bool boundCtrl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src), std::forward(dppCtrl), std::forward(rowMask), std::forward(bankMask), std::forward(boundCtrl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DPPUpdateOp DPPUpdateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, uint32_t dppCtrl, uint32_t rowMask, uint32_t bankMask, bool boundCtrl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src), std::forward(dppCtrl), std::forward(rowMask), std::forward(bankMask), std::forward(boundCtrl)); } void DPPUpdateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, uint32_t dppCtrl, uint32_t rowMask, uint32_t bankMask, bool boundCtrl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().dppCtrl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), dppCtrl); odsState.getOrAddProperties().rowMask = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), rowMask); odsState.getOrAddProperties().bankMask = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), bankMask); odsState.getOrAddProperties().boundCtrl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundCtrl); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DPPUpdateOp DPPUpdateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, uint32_t dppCtrl, uint32_t rowMask, uint32_t bankMask, bool boundCtrl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(dppCtrl), std::forward(rowMask), std::forward(bankMask), std::forward(boundCtrl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DPPUpdateOp DPPUpdateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, uint32_t dppCtrl, uint32_t rowMask, uint32_t bankMask, bool boundCtrl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(dppCtrl), std::forward(rowMask), std::forward(bankMask), std::forward(boundCtrl)); } void DPPUpdateOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } DPPUpdateOp DPPUpdateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DPPUpdateOp DPPUpdateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DPPUpdateOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DPPUpdateOp DPPUpdateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DPPUpdateOp DPPUpdateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DPPUpdateOp::verifyInvariantsImpl() { auto tblgen_bankMask = getProperties().bankMask; (void)tblgen_bankMask; if (!tblgen_bankMask) return emitOpError("requires attribute 'bankMask'"); auto tblgen_boundCtrl = getProperties().boundCtrl; (void)tblgen_boundCtrl; if (!tblgen_boundCtrl) return emitOpError("requires attribute 'boundCtrl'"); auto tblgen_dppCtrl = getProperties().dppCtrl; (void)tblgen_dppCtrl; if (!tblgen_dppCtrl) return emitOpError("requires attribute 'dppCtrl'"); auto tblgen_rowMask = getProperties().rowMask; (void)tblgen_rowMask; if (!tblgen_rowMask) return emitOpError("requires attribute 'rowMask'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_dppCtrl, "dppCtrl"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_rowMask, "rowMask"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_bankMask, "bankMask"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_boundCtrl, "boundCtrl"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(1).begin()).getType()) && ((*this->getODSOperands(1).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, src, old} have same type"); return ::mlir::success(); } ::llvm::LogicalResult DPPUpdateOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DPPUpdateOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr dppCtrlAttr; ::mlir::IntegerAttr rowMaskAttr; ::mlir::IntegerAttr bankMaskAttr; ::mlir::IntegerAttr boundCtrlAttr; ::mlir::Type srcRawType{}; ::llvm::ArrayRef<::mlir::Type> srcTypes(&srcRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseKeyword("with")) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(dppCtrlAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (dppCtrlAttr) result.getOrAddProperties().dppCtrl = dppCtrlAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(rowMaskAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (rowMaskAttr) result.getOrAddProperties().rowMask = rowMaskAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(bankMaskAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (bankMaskAttr) result.getOrAddProperties().bankMask = bankMaskAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(boundCtrlAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (boundCtrlAttr) result.getOrAddProperties().boundCtrl = boundCtrlAttr; if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); srcRawType = type; } result.addTypes(srcTypes[0]); if (parser.resolveOperands(oldOperands, srcTypes[0], oldOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, srcTypes, srcOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DPPUpdateOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("dppCtrl"); elidedAttrs.push_back("rowMask"); elidedAttrs.push_back("bankMask"); elidedAttrs.push_back("boundCtrl"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ' ' << "with"; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getDppCtrlAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getRowMaskAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getBankMaskAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getBoundCtrlAttr()); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getSrc().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DPPUpdateOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::DPPUpdateOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DsAtomicAsyncBarrierArriveOp definitions //===----------------------------------------------------------------------===// namespace detail { DsAtomicAsyncBarrierArriveOpGenericAdaptorBase::DsAtomicAsyncBarrierArriveOpGenericAdaptorBase(DsAtomicAsyncBarrierArriveOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > DsAtomicAsyncBarrierArriveOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsAtomicAsyncBarrierArriveOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsAtomicAsyncBarrierArriveOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail DsAtomicAsyncBarrierArriveOpAdaptor::DsAtomicAsyncBarrierArriveOpAdaptor(DsAtomicAsyncBarrierArriveOp op) : DsAtomicAsyncBarrierArriveOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DsAtomicAsyncBarrierArriveOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.atomic.async.barrier.arrive.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.atomic.async.barrier.arrive.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.atomic.async.barrier.arrive.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult DsAtomicAsyncBarrierArriveOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute DsAtomicAsyncBarrierArriveOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DsAtomicAsyncBarrierArriveOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional DsAtomicAsyncBarrierArriveOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void DsAtomicAsyncBarrierArriveOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void DsAtomicAsyncBarrierArriveOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult DsAtomicAsyncBarrierArriveOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult DsAtomicAsyncBarrierArriveOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void DsAtomicAsyncBarrierArriveOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > DsAtomicAsyncBarrierArriveOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsAtomicAsyncBarrierArriveOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsAtomicAsyncBarrierArriveOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void DsAtomicAsyncBarrierArriveOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value barrierPtr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(barrierPtr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } DsAtomicAsyncBarrierArriveOp DsAtomicAsyncBarrierArriveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value barrierPtr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(barrierPtr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsAtomicAsyncBarrierArriveOp DsAtomicAsyncBarrierArriveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value barrierPtr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(barrierPtr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsAtomicAsyncBarrierArriveOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value barrierPtr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(barrierPtr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } DsAtomicAsyncBarrierArriveOp DsAtomicAsyncBarrierArriveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value barrierPtr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(barrierPtr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsAtomicAsyncBarrierArriveOp DsAtomicAsyncBarrierArriveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value barrierPtr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(barrierPtr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsAtomicAsyncBarrierArriveOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } DsAtomicAsyncBarrierArriveOp DsAtomicAsyncBarrierArriveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsAtomicAsyncBarrierArriveOp DsAtomicAsyncBarrierArriveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DsAtomicAsyncBarrierArriveOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsAtomicAsyncBarrierArriveOp DsAtomicAsyncBarrierArriveOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsAtomicAsyncBarrierArriveOp DsAtomicAsyncBarrierArriveOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DsAtomicAsyncBarrierArriveOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult DsAtomicAsyncBarrierArriveOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DsAtomicAsyncBarrierArriveOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand barrierPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> barrierPtrOperands(&barrierPtrRawOperand, 1); ::llvm::SMLoc barrierPtrOperandsLoc; (void)barrierPtrOperandsLoc; ::mlir::Type barrierPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> barrierPtrTypes(&barrierPtrRawType, 1); barrierPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(barrierPtrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(barrierPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(barrierPtrOperands, barrierPtrTypes, barrierPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DsAtomicAsyncBarrierArriveOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getBarrierPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getBarrierPtr().getType(); } void DsAtomicAsyncBarrierArriveOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } SmallVector DsAtomicAsyncBarrierArriveOp::getAccessedOperands() { return {getBarrierPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DsAtomicAsyncBarrierArriveOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::DsAtomicAsyncBarrierArriveOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DsAtomicBarrierArriveRtnOp definitions //===----------------------------------------------------------------------===// namespace detail { DsAtomicBarrierArriveRtnOpGenericAdaptorBase::DsAtomicBarrierArriveRtnOpGenericAdaptorBase(DsAtomicBarrierArriveRtnOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > DsAtomicBarrierArriveRtnOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsAtomicBarrierArriveRtnOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsAtomicBarrierArriveRtnOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail DsAtomicBarrierArriveRtnOpAdaptor::DsAtomicBarrierArriveRtnOpAdaptor(DsAtomicBarrierArriveRtnOp op) : DsAtomicBarrierArriveRtnOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DsAtomicBarrierArriveRtnOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.atomic.barrier.arrive.rtn.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.atomic.barrier.arrive.rtn.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.atomic.barrier.arrive.rtn.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult DsAtomicBarrierArriveRtnOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute DsAtomicBarrierArriveRtnOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DsAtomicBarrierArriveRtnOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional DsAtomicBarrierArriveRtnOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void DsAtomicBarrierArriveRtnOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void DsAtomicBarrierArriveRtnOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult DsAtomicBarrierArriveRtnOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult DsAtomicBarrierArriveRtnOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void DsAtomicBarrierArriveRtnOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > DsAtomicBarrierArriveRtnOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsAtomicBarrierArriveRtnOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsAtomicBarrierArriveRtnOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void DsAtomicBarrierArriveRtnOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value barrierPtr, ::mlir::Value val, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(barrierPtr); odsState.addOperands(val); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } DsAtomicBarrierArriveRtnOp DsAtomicBarrierArriveRtnOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value barrierPtr, ::mlir::Value val, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(barrierPtr), std::forward(val), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsAtomicBarrierArriveRtnOp DsAtomicBarrierArriveRtnOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value barrierPtr, ::mlir::Value val, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(barrierPtr), std::forward(val), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsAtomicBarrierArriveRtnOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value barrierPtr, ::mlir::Value val, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(barrierPtr); odsState.addOperands(val); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DsAtomicBarrierArriveRtnOp DsAtomicBarrierArriveRtnOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value barrierPtr, ::mlir::Value val, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(barrierPtr), std::forward(val), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsAtomicBarrierArriveRtnOp DsAtomicBarrierArriveRtnOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value barrierPtr, ::mlir::Value val, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(barrierPtr), std::forward(val), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsAtomicBarrierArriveRtnOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } DsAtomicBarrierArriveRtnOp DsAtomicBarrierArriveRtnOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsAtomicBarrierArriveRtnOp DsAtomicBarrierArriveRtnOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DsAtomicBarrierArriveRtnOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsAtomicBarrierArriveRtnOp DsAtomicBarrierArriveRtnOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsAtomicBarrierArriveRtnOp DsAtomicBarrierArriveRtnOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DsAtomicBarrierArriveRtnOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult DsAtomicBarrierArriveRtnOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DsAtomicBarrierArriveRtnOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand barrierPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> barrierPtrOperands(&barrierPtrRawOperand, 1); ::llvm::SMLoc barrierPtrOperandsLoc; (void)barrierPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand valRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> valOperands(&valRawOperand, 1); ::llvm::SMLoc valOperandsLoc; (void)valOperandsLoc; ::mlir::Type barrierPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> barrierPtrTypes(&barrierPtrRawType, 1); ::mlir::Type valRawType{}; ::llvm::ArrayRef<::mlir::Type> valTypes(&valRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); barrierPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(barrierPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); valOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(valRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(barrierPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); valRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(barrierPtrOperands, barrierPtrTypes, barrierPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(valOperands, valTypes, valOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DsAtomicBarrierArriveRtnOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getBarrierPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getVal(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getBarrierPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; { auto type = getVal().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void DsAtomicBarrierArriveRtnOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } SmallVector DsAtomicBarrierArriveRtnOp::getAccessedOperands() { return {getBarrierPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DsAtomicBarrierArriveRtnOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::DsAtomicBarrierArriveRtnOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DsBpermuteOp definitions //===----------------------------------------------------------------------===// namespace detail { DsBpermuteOpGenericAdaptorBase::DsBpermuteOpGenericAdaptorBase(DsBpermuteOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail DsBpermuteOpAdaptor::DsBpermuteOpAdaptor(DsBpermuteOp op) : DsBpermuteOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DsBpermuteOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult DsBpermuteOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute DsBpermuteOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DsBpermuteOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional DsBpermuteOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void DsBpermuteOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void DsBpermuteOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult DsBpermuteOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void DsBpermuteOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value index, ::mlir::Value src) { odsState.addOperands(index); odsState.addOperands(src); odsState.addTypes(res); } DsBpermuteOp DsBpermuteOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value index, ::mlir::Value src) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(index), std::forward(src)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsBpermuteOp DsBpermuteOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value index, ::mlir::Value src) { return create(builder, builder.getLoc(), std::forward(res), std::forward(index), std::forward(src)); } void DsBpermuteOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value index, ::mlir::Value src) { odsState.addOperands(index); odsState.addOperands(src); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DsBpermuteOp DsBpermuteOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value index, ::mlir::Value src) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(index), std::forward(src)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsBpermuteOp DsBpermuteOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value index, ::mlir::Value src) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(index), std::forward(src)); } void DsBpermuteOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsBpermuteOp DsBpermuteOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsBpermuteOp DsBpermuteOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DsBpermuteOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsBpermuteOp DsBpermuteOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsBpermuteOp DsBpermuteOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DsBpermuteOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult DsBpermuteOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DsBpermuteOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::Type indexRawType{}; ::llvm::ArrayRef<::mlir::Type> indexTypes(&indexRawType, 1); ::mlir::Type srcRawType{}; ::llvm::ArrayRef<::mlir::Type> srcTypes(&srcRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseLParen()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); indexRawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); srcRawType = type; } if (parser.parseRParen()) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(indexOperands, indexTypes, indexOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, srcTypes, srcOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DsBpermuteOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' ' << "("; { auto type = getIndex().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getSrc().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ")"; _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DsBpermuteOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DsLoadTr16_B128 definitions //===----------------------------------------------------------------------===// namespace detail { DsLoadTr16_B128GenericAdaptorBase::DsLoadTr16_B128GenericAdaptorBase(DsLoadTr16_B128 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > DsLoadTr16_B128GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr16_B128GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr16_B128GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail DsLoadTr16_B128Adaptor::DsLoadTr16_B128Adaptor(DsLoadTr16_B128 op) : DsLoadTr16_B128GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DsLoadTr16_B128Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr16.b128' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr16.b128' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr16.b128' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr16_B128::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute DsLoadTr16_B128::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DsLoadTr16_B128::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional DsLoadTr16_B128::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void DsLoadTr16_B128::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void DsLoadTr16_B128::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult DsLoadTr16_B128::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr16_B128::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void DsLoadTr16_B128::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr16_B128::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr16_B128::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr16_B128::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void DsLoadTr16_B128::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } DsLoadTr16_B128 DsLoadTr16_B128::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr16_B128 DsLoadTr16_B128::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsLoadTr16_B128::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DsLoadTr16_B128 DsLoadTr16_B128::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr16_B128 DsLoadTr16_B128::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsLoadTr16_B128::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } DsLoadTr16_B128 DsLoadTr16_B128::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr16_B128 DsLoadTr16_B128::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DsLoadTr16_B128::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsLoadTr16_B128 DsLoadTr16_B128::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr16_B128 DsLoadTr16_B128::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DsLoadTr16_B128::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr16_B128::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DsLoadTr16_B128::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DsLoadTr16_B128::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void DsLoadTr16_B128::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> DsLoadTr16_B128::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DsLoadTr16_B128) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::DsLoadTr16_B128GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DsLoadTr4_B64 definitions //===----------------------------------------------------------------------===// namespace detail { DsLoadTr4_B64GenericAdaptorBase::DsLoadTr4_B64GenericAdaptorBase(DsLoadTr4_B64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > DsLoadTr4_B64GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr4_B64GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr4_B64GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail DsLoadTr4_B64Adaptor::DsLoadTr4_B64Adaptor(DsLoadTr4_B64 op) : DsLoadTr4_B64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DsLoadTr4_B64Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr4.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr4.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr4.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr4_B64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute DsLoadTr4_B64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DsLoadTr4_B64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional DsLoadTr4_B64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void DsLoadTr4_B64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void DsLoadTr4_B64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult DsLoadTr4_B64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr4_B64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void DsLoadTr4_B64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr4_B64::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr4_B64::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr4_B64::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void DsLoadTr4_B64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } DsLoadTr4_B64 DsLoadTr4_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr4_B64 DsLoadTr4_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsLoadTr4_B64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DsLoadTr4_B64 DsLoadTr4_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr4_B64 DsLoadTr4_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsLoadTr4_B64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } DsLoadTr4_B64 DsLoadTr4_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr4_B64 DsLoadTr4_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DsLoadTr4_B64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsLoadTr4_B64 DsLoadTr4_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr4_B64 DsLoadTr4_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DsLoadTr4_B64::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr4_B64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DsLoadTr4_B64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DsLoadTr4_B64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void DsLoadTr4_B64::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> DsLoadTr4_B64::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DsLoadTr4_B64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::DsLoadTr4_B64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DsLoadTr6_B96 definitions //===----------------------------------------------------------------------===// namespace detail { DsLoadTr6_B96GenericAdaptorBase::DsLoadTr6_B96GenericAdaptorBase(DsLoadTr6_B96 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > DsLoadTr6_B96GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr6_B96GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr6_B96GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail DsLoadTr6_B96Adaptor::DsLoadTr6_B96Adaptor(DsLoadTr6_B96 op) : DsLoadTr6_B96GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DsLoadTr6_B96Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr6.b96' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr6.b96' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr6.b96' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr6_B96::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute DsLoadTr6_B96::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DsLoadTr6_B96::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional DsLoadTr6_B96::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void DsLoadTr6_B96::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void DsLoadTr6_B96::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult DsLoadTr6_B96::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr6_B96::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void DsLoadTr6_B96::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr6_B96::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr6_B96::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr6_B96::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void DsLoadTr6_B96::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } DsLoadTr6_B96 DsLoadTr6_B96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr6_B96 DsLoadTr6_B96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsLoadTr6_B96::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DsLoadTr6_B96 DsLoadTr6_B96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr6_B96 DsLoadTr6_B96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsLoadTr6_B96::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } DsLoadTr6_B96 DsLoadTr6_B96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr6_B96 DsLoadTr6_B96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DsLoadTr6_B96::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsLoadTr6_B96 DsLoadTr6_B96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr6_B96 DsLoadTr6_B96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DsLoadTr6_B96::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr6_B96::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DsLoadTr6_B96::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DsLoadTr6_B96::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void DsLoadTr6_B96::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> DsLoadTr6_B96::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DsLoadTr6_B96) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::DsLoadTr6_B96GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DsLoadTr8_B64 definitions //===----------------------------------------------------------------------===// namespace detail { DsLoadTr8_B64GenericAdaptorBase::DsLoadTr8_B64GenericAdaptorBase(DsLoadTr8_B64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > DsLoadTr8_B64GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr8_B64GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr8_B64GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail DsLoadTr8_B64Adaptor::DsLoadTr8_B64Adaptor(DsLoadTr8_B64 op) : DsLoadTr8_B64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DsLoadTr8_B64Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr8.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr8.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.load.tr8.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr8_B64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute DsLoadTr8_B64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DsLoadTr8_B64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional DsLoadTr8_B64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void DsLoadTr8_B64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void DsLoadTr8_B64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult DsLoadTr8_B64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr8_B64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void DsLoadTr8_B64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr8_B64::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr8_B64::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > DsLoadTr8_B64::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void DsLoadTr8_B64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } DsLoadTr8_B64 DsLoadTr8_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr8_B64 DsLoadTr8_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsLoadTr8_B64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DsLoadTr8_B64 DsLoadTr8_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr8_B64 DsLoadTr8_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void DsLoadTr8_B64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } DsLoadTr8_B64 DsLoadTr8_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr8_B64 DsLoadTr8_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DsLoadTr8_B64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsLoadTr8_B64 DsLoadTr8_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsLoadTr8_B64 DsLoadTr8_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DsLoadTr8_B64::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult DsLoadTr8_B64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DsLoadTr8_B64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DsLoadTr8_B64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void DsLoadTr8_B64::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> DsLoadTr8_B64::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DsLoadTr8_B64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::DsLoadTr8_B64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::DsSwizzleOp definitions //===----------------------------------------------------------------------===// namespace detail { DsSwizzleOpGenericAdaptorBase::DsSwizzleOpGenericAdaptorBase(DsSwizzleOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail DsSwizzleOpAdaptor::DsSwizzleOpAdaptor(DsSwizzleOp op) : DsSwizzleOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult DsSwizzleOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult DsSwizzleOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute DsSwizzleOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code DsSwizzleOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional DsSwizzleOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void DsSwizzleOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void DsSwizzleOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult DsSwizzleOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void DsSwizzleOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value offset) { odsState.addOperands(src); odsState.addOperands(offset); odsState.addTypes(res); } DsSwizzleOp DsSwizzleOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value offset) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(offset)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsSwizzleOp DsSwizzleOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value offset) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(offset)); } void DsSwizzleOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value offset) { odsState.addOperands(src); odsState.addOperands(offset); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } DsSwizzleOp DsSwizzleOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value offset) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(offset)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsSwizzleOp DsSwizzleOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value offset) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(offset)); } void DsSwizzleOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsSwizzleOp DsSwizzleOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsSwizzleOp DsSwizzleOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void DsSwizzleOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } DsSwizzleOp DsSwizzleOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } DsSwizzleOp DsSwizzleOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult DsSwizzleOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult DsSwizzleOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult DsSwizzleOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::Type srcRawType{}; ::llvm::ArrayRef<::mlir::Type> srcTypes(&srcRawType, 1); ::mlir::Type offsetRawType{}; ::llvm::ArrayRef<::mlir::Type> offsetTypes(&offsetRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseLParen()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); srcRawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); offsetRawType = type; } if (parser.parseRParen()) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, srcTypes, srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, offsetTypes, offsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void DsSwizzleOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' ' << "("; { auto type = getSrc().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getOffset().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ")"; _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::DsSwizzleOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::FMed3Op definitions //===----------------------------------------------------------------------===// namespace detail { FMed3OpGenericAdaptorBase::FMed3OpGenericAdaptorBase(FMed3Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail FMed3OpAdaptor::FMed3OpAdaptor(FMed3Op op) : FMed3OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult FMed3OpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult FMed3Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute FMed3Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code FMed3Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional FMed3Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void FMed3Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void FMed3Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult FMed3Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void FMed3Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2) { odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(src2); odsState.addTypes(res); } FMed3Op FMed3Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src0), std::forward(src1), std::forward(src2)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FMed3Op FMed3Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src0), std::forward(src1), std::forward(src2)); } void FMed3Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2) { odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(src2); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } FMed3Op FMed3Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src0), std::forward(src1), std::forward(src2)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FMed3Op FMed3Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src0), std::forward(src1), std::forward(src2)); } void FMed3Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } FMed3Op FMed3Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FMed3Op FMed3Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void FMed3Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } FMed3Op FMed3Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FMed3Op FMed3Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult FMed3Op::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps27(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps27(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps27(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps27(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSOperands(1).begin()).getType()) && ((*this->getODSOperands(1).begin()).getType()) == ((*this->getODSOperands(2).begin()).getType()) && ((*this->getODSOperands(2).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, src0, src1, src2} have same type"); return ::mlir::success(); } ::llvm::LogicalResult FMed3Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult FMed3Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src2RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src2Operands(&src2RawOperand, 1); ::llvm::SMLoc src2OperandsLoc; (void)src2OperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src2OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src2RawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(src0Operands, resTypes[0], src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src1Operands, resTypes[0], src1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src2Operands, resTypes[0], src2OperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void FMed3Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc2(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void FMed3Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::FMed3Op) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::FlatPrefetchOp definitions //===----------------------------------------------------------------------===// namespace detail { FlatPrefetchOpGenericAdaptorBase::FlatPrefetchOpGenericAdaptorBase(FlatPrefetchOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute FlatPrefetchOpGenericAdaptorBase::getCachePolicyAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().cachePolicy); return attr; } ::mlir::Attribute FlatPrefetchOpGenericAdaptorBase::getCachePolicy() { auto attr = getCachePolicyAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > FlatPrefetchOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > FlatPrefetchOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > FlatPrefetchOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail FlatPrefetchOpAdaptor::FlatPrefetchOpAdaptor(FlatPrefetchOp op) : FlatPrefetchOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult FlatPrefetchOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cachePolicy = getProperties().cachePolicy; (void)tblgen_cachePolicy; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_cachePolicy && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_cachePolicy))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_cachePolicy))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cachePolicy).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.flat.prefetch' op attribute 'cachePolicy' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.flat.prefetch' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.flat.prefetch' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.flat.prefetch' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult FlatPrefetchOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cachePolicy; auto attr = dict.get("cachePolicy"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cachePolicy` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute FlatPrefetchOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.cachePolicy; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cachePolicy", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code FlatPrefetchOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.cachePolicy.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional FlatPrefetchOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "cachePolicy") return prop.cachePolicy; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void FlatPrefetchOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cachePolicy") { prop.cachePolicy = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void FlatPrefetchOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.cachePolicy) attrs.append("cachePolicy", prop.cachePolicy); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult FlatPrefetchOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCachePolicyAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "cachePolicy", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult FlatPrefetchOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.cachePolicy))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void FlatPrefetchOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.cachePolicy); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute FlatPrefetchOp::getCachePolicy() { auto attr = getCachePolicyAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > FlatPrefetchOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > FlatPrefetchOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > FlatPrefetchOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void FlatPrefetchOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (cachePolicy) { odsState.getOrAddProperties().cachePolicy = cachePolicy; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } FlatPrefetchOp FlatPrefetchOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FlatPrefetchOp FlatPrefetchOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(ptr), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void FlatPrefetchOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (cachePolicy) { odsState.getOrAddProperties().cachePolicy = cachePolicy; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } FlatPrefetchOp FlatPrefetchOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FlatPrefetchOp FlatPrefetchOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void FlatPrefetchOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } FlatPrefetchOp FlatPrefetchOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FlatPrefetchOp FlatPrefetchOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void FlatPrefetchOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } FlatPrefetchOp FlatPrefetchOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FlatPrefetchOp FlatPrefetchOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void FlatPrefetchOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.cachePolicy) properties.cachePolicy = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult FlatPrefetchOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cachePolicy = getProperties().cachePolicy; (void)tblgen_cachePolicy; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_cachePolicy, "cachePolicy"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps28(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult FlatPrefetchOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult FlatPrefetchOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Attribute cachePolicyAttr; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, cachePolicyAttr); if (odsResult) return ::mlir::failure(); if (cachePolicyAttr) result.getOrAddProperties().cachePolicy = cachePolicyAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void FlatPrefetchOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getCachePolicyAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cachePolicy"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getCachePolicyAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("cachePolicy"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); } void FlatPrefetchOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } SmallVector FlatPrefetchOp::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::FlatPrefetchOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::FlatPrefetchOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GetBarrierStateOp definitions //===----------------------------------------------------------------------===// namespace detail { GetBarrierStateOpGenericAdaptorBase::GetBarrierStateOpGenericAdaptorBase(GetBarrierStateOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GetBarrierStateOpGenericAdaptorBase::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } } // namespace detail GetBarrierStateOpAdaptor::GetBarrierStateOpAdaptor(GetBarrierStateOp op) : GetBarrierStateOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GetBarrierStateOpAdaptor::verify(::mlir::Location loc) { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitError(loc, "'rocdl.s.get.barrier.state' op requires attribute 'id'"); if (tblgen_id && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_id))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_id).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.s.get.barrier.state' op attribute 'id' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult GetBarrierStateOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.id; auto attr = dict.get("id"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `id` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GetBarrierStateOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.id; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("id", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GetBarrierStateOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.id.getAsOpaquePointer())); } std::optional GetBarrierStateOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "id") return prop.id; return std::nullopt; } void GetBarrierStateOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "id") { prop.id = ::llvm::dyn_cast_or_null>(value); return; } } void GetBarrierStateOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.id) attrs.append("id", prop.id); } ::llvm::LogicalResult GetBarrierStateOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getIdAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "id", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GetBarrierStateOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.id))) return ::mlir::failure(); return ::mlir::success(); } void GetBarrierStateOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.id); } uint32_t GetBarrierStateOp::getId() { auto attr = getIdAttr(); return attr.getValue().getZExtValue(); } void GetBarrierStateOp::setId(uint32_t attrValue) { getProperties().id = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GetBarrierStateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; odsState.addTypes(res); } GetBarrierStateOp GetBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetBarrierStateOp GetBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(res), std::forward(id)); } void GetBarrierStateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { odsState.getOrAddProperties().id = id; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GetBarrierStateOp GetBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetBarrierStateOp GetBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void GetBarrierStateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, uint32_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), id); odsState.addTypes(res); } GetBarrierStateOp GetBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, uint32_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetBarrierStateOp GetBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, uint32_t id) { return create(builder, builder.getLoc(), std::forward(res), std::forward(id)); } void GetBarrierStateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint32_t id) { odsState.getOrAddProperties().id = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), id); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GetBarrierStateOp GetBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint32_t id) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(id)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetBarrierStateOp GetBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint32_t id) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(id)); } void GetBarrierStateOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GetBarrierStateOp GetBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetBarrierStateOp GetBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GetBarrierStateOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GetBarrierStateOp GetBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetBarrierStateOp GetBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult GetBarrierStateOp::verifyInvariantsImpl() { auto tblgen_id = getProperties().id; (void)tblgen_id; if (!tblgen_id) return emitOpError("requires attribute 'id'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_id, "id"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GetBarrierStateOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GetBarrierStateOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr idAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (parser.parseKeyword("id")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(idAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (idAttr) result.getOrAddProperties().id = idAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void GetBarrierStateOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' ' << "id"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getIdAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("id"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GetBarrierStateOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GetBarrierStateOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GetNamedBarrierStateOp definitions //===----------------------------------------------------------------------===// namespace detail { GetNamedBarrierStateOpGenericAdaptorBase::GetNamedBarrierStateOpGenericAdaptorBase(GetNamedBarrierStateOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail GetNamedBarrierStateOpAdaptor::GetNamedBarrierStateOpAdaptor(GetNamedBarrierStateOp op) : GetNamedBarrierStateOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GetNamedBarrierStateOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult GetNamedBarrierStateOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute GetNamedBarrierStateOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GetNamedBarrierStateOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional GetNamedBarrierStateOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void GetNamedBarrierStateOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void GetNamedBarrierStateOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult GetNamedBarrierStateOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void GetNamedBarrierStateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr) { odsState.addOperands(ptr); odsState.addTypes(res); } GetNamedBarrierStateOp GetNamedBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetNamedBarrierStateOp GetNamedBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr)); } void GetNamedBarrierStateOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { odsState.addOperands(ptr); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GetNamedBarrierStateOp GetNamedBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetNamedBarrierStateOp GetNamedBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr)); } void GetNamedBarrierStateOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GetNamedBarrierStateOp GetNamedBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetNamedBarrierStateOp GetNamedBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GetNamedBarrierStateOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GetNamedBarrierStateOp GetNamedBarrierStateOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetNamedBarrierStateOp GetNamedBarrierStateOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult GetNamedBarrierStateOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GetNamedBarrierStateOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GetNamedBarrierStateOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GetNamedBarrierStateOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GetNamedBarrierStateOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadAsyncLDSOp definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadAsyncLDSOpGenericAdaptorBase::GlobalLoadAsyncLDSOpGenericAdaptorBase(GlobalLoadAsyncLDSOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalLoadAsyncLDSOpGenericAdaptorBase::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t GlobalLoadAsyncLDSOpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncLDSOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalLoadAsyncLDSOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncLDSOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncLDSOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncLDSOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadAsyncLDSOpAdaptor::GlobalLoadAsyncLDSOpAdaptor(GlobalLoadAsyncLDSOp op) : GlobalLoadAsyncLDSOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadAsyncLDSOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.load.async.lds' op requires attribute 'offset'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitError(loc, "'rocdl.global.load.async.lds' op requires attribute 'size'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_size && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_size))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_size).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.load.async.lds' op attribute 'size' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.load.async.lds' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.load.async.lds' op attribute 'aux' failed to satisfy constraint: pre-gfx12 or gfx942 AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.lds' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.lds' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.lds' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncLDSOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.size; auto attr = dict.get("size"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `size` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadAsyncLDSOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.size; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("size", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadAsyncLDSOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.size.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadAsyncLDSOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "size") return prop.size; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadAsyncLDSOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "size") { prop.size = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadAsyncLDSOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.size) attrs.append("size", prop.size); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadAsyncLDSOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSizeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "size", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncLDSOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.size))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncLDSOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeAttribute(prop.size); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalLoadAsyncLDSOp::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t GlobalLoadAsyncLDSOp::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncLDSOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncLDSOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncLDSOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncLDSOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadAsyncLDSOp::setSize(uint32_t attrValue) { getProperties().size = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalLoadAsyncLDSOp::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalLoadAsyncLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadAsyncLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncLDSOp GlobalLoadAsyncLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalLoadAsyncLDSOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalLoadAsyncLDSOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitOpError("requires attribute 'size'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_size, "size"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncLDSOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadAsyncLDSOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr sizeAttr; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(sizeAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (sizeAttr) result.getOrAddProperties().size = sizeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncLDSOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getSizeAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("size"); elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalLoadAsyncLDSOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadAsyncLDSOp::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadAsyncLDSOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadAsyncLDSOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadAsyncToLDSB128Op definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadAsyncToLDSB128OpGenericAdaptorBase::GlobalLoadAsyncToLDSB128OpGenericAdaptorBase(GlobalLoadAsyncToLDSB128Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalLoadAsyncToLDSB128OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncToLDSB128OpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalLoadAsyncToLDSB128OpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB128OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB128OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB128OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadAsyncToLDSB128OpAdaptor::GlobalLoadAsyncToLDSB128OpAdaptor(GlobalLoadAsyncToLDSB128Op op) : GlobalLoadAsyncToLDSB128OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadAsyncToLDSB128OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.load.async.to.lds.b128' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.load.async.to.lds.b128' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.load.async.to.lds.b128' op attribute 'aux' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b128' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b128' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b128' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB128Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadAsyncToLDSB128Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadAsyncToLDSB128Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadAsyncToLDSB128Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadAsyncToLDSB128Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadAsyncToLDSB128Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB128Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB128Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncToLDSB128Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalLoadAsyncToLDSB128Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncToLDSB128Op::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB128Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB128Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB128Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadAsyncToLDSB128Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadAsyncToLDSB128Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB128Op GlobalLoadAsyncToLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalLoadAsyncToLDSB128Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB128Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB128Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadAsyncToLDSB128Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncToLDSB128Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalLoadAsyncToLDSB128Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadAsyncToLDSB128Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadAsyncToLDSB128Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadAsyncToLDSB128OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadAsyncToLDSB32Op definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadAsyncToLDSB32OpGenericAdaptorBase::GlobalLoadAsyncToLDSB32OpGenericAdaptorBase(GlobalLoadAsyncToLDSB32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalLoadAsyncToLDSB32OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncToLDSB32OpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalLoadAsyncToLDSB32OpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB32OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB32OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB32OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadAsyncToLDSB32OpAdaptor::GlobalLoadAsyncToLDSB32OpAdaptor(GlobalLoadAsyncToLDSB32Op op) : GlobalLoadAsyncToLDSB32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadAsyncToLDSB32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.load.async.to.lds.b32' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.load.async.to.lds.b32' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.load.async.to.lds.b32' op attribute 'aux' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b32' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b32' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b32' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadAsyncToLDSB32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadAsyncToLDSB32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadAsyncToLDSB32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadAsyncToLDSB32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadAsyncToLDSB32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncToLDSB32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalLoadAsyncToLDSB32Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncToLDSB32Op::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB32Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB32Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB32Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadAsyncToLDSB32Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadAsyncToLDSB32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB32Op GlobalLoadAsyncToLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalLoadAsyncToLDSB32Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB32Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadAsyncToLDSB32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncToLDSB32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalLoadAsyncToLDSB32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadAsyncToLDSB32Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadAsyncToLDSB32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadAsyncToLDSB32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadAsyncToLDSB64Op definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadAsyncToLDSB64OpGenericAdaptorBase::GlobalLoadAsyncToLDSB64OpGenericAdaptorBase(GlobalLoadAsyncToLDSB64Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalLoadAsyncToLDSB64OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncToLDSB64OpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalLoadAsyncToLDSB64OpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB64OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB64OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB64OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadAsyncToLDSB64OpAdaptor::GlobalLoadAsyncToLDSB64OpAdaptor(GlobalLoadAsyncToLDSB64Op op) : GlobalLoadAsyncToLDSB64OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadAsyncToLDSB64OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.load.async.to.lds.b64' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.load.async.to.lds.b64' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.load.async.to.lds.b64' op attribute 'aux' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB64Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadAsyncToLDSB64Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadAsyncToLDSB64Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadAsyncToLDSB64Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadAsyncToLDSB64Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadAsyncToLDSB64Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB64Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB64Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncToLDSB64Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalLoadAsyncToLDSB64Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncToLDSB64Op::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB64Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB64Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB64Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadAsyncToLDSB64Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadAsyncToLDSB64Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB64Op GlobalLoadAsyncToLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalLoadAsyncToLDSB64Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB64Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB64Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadAsyncToLDSB64Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncToLDSB64Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalLoadAsyncToLDSB64Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadAsyncToLDSB64Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadAsyncToLDSB64Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadAsyncToLDSB64OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadAsyncToLDSB8Op definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadAsyncToLDSB8OpGenericAdaptorBase::GlobalLoadAsyncToLDSB8OpGenericAdaptorBase(GlobalLoadAsyncToLDSB8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalLoadAsyncToLDSB8OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncToLDSB8OpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalLoadAsyncToLDSB8OpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB8OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB8OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB8OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadAsyncToLDSB8OpAdaptor::GlobalLoadAsyncToLDSB8OpAdaptor(GlobalLoadAsyncToLDSB8Op op) : GlobalLoadAsyncToLDSB8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadAsyncToLDSB8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.load.async.to.lds.b8' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.load.async.to.lds.b8' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.load.async.to.lds.b8' op attribute 'aux' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b8' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b8' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.async.to.lds.b8' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadAsyncToLDSB8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadAsyncToLDSB8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadAsyncToLDSB8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadAsyncToLDSB8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadAsyncToLDSB8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncToLDSB8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalLoadAsyncToLDSB8Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadAsyncToLDSB8Op::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB8Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB8Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadAsyncToLDSB8Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadAsyncToLDSB8Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadAsyncToLDSB8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadAsyncToLDSB8Op GlobalLoadAsyncToLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalLoadAsyncToLDSB8Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB8Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadAsyncToLDSB8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadAsyncToLDSB8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadAsyncToLDSB8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalLoadAsyncToLDSB8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadAsyncToLDSB8Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadAsyncToLDSB8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadAsyncToLDSB8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadLDSOp definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadLDSOpGenericAdaptorBase::GlobalLoadLDSOpGenericAdaptorBase(GlobalLoadLDSOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalLoadLDSOpGenericAdaptorBase::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t GlobalLoadLDSOpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadLDSOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalLoadLDSOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadLDSOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadLDSOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadLDSOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadLDSOpAdaptor::GlobalLoadLDSOpAdaptor(GlobalLoadLDSOp op) : GlobalLoadLDSOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadLDSOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.load.lds' op requires attribute 'offset'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitError(loc, "'rocdl.global.load.lds' op requires attribute 'size'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_size && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_size))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_size).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.load.lds' op attribute 'size' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.load.lds' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.load.lds' op attribute 'aux' failed to satisfy constraint: pre-gfx12 or gfx942 AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.lds' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.lds' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.lds' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadLDSOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.size; auto attr = dict.get("size"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `size` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadLDSOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.size; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("size", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadLDSOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.size.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadLDSOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "size") return prop.size; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadLDSOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "size") { prop.size = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadLDSOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.size) attrs.append("size", prop.size); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadLDSOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSizeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "size", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadLDSOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.size))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadLDSOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeAttribute(prop.size); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalLoadLDSOp::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t GlobalLoadLDSOp::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalLoadLDSOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalLoadLDSOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadLDSOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadLDSOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadLDSOp::setSize(uint32_t attrValue) { getProperties().size = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalLoadLDSOp::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalLoadLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadLDSOp GlobalLoadLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalLoadLDSOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalLoadLDSOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitOpError("requires attribute 'size'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_size, "size"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadLDSOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadLDSOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr sizeAttr; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(sizeAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (sizeAttr) result.getOrAddProperties().size = sizeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(1); ::mlir::Type odsBuildableType1 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(3); if (parser.resolveOperands(globalPtrOperands, odsBuildableType0, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, odsBuildableType1, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadLDSOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getSizeAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("size"); elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } void GlobalLoadLDSOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadLDSOp::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadLDSOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadLDSOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadTr4_B64 definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadTr4_B64GenericAdaptorBase::GlobalLoadTr4_B64GenericAdaptorBase(GlobalLoadTr4_B64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr4_B64GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr4_B64GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr4_B64GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadTr4_B64Adaptor::GlobalLoadTr4_B64Adaptor(GlobalLoadTr4_B64 op) : GlobalLoadTr4_B64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadTr4_B64Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr4.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr4.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr4.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr4_B64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadTr4_B64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadTr4_B64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadTr4_B64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadTr4_B64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadTr4_B64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadTr4_B64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr4_B64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadTr4_B64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr4_B64::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr4_B64::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr4_B64::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadTr4_B64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } GlobalLoadTr4_B64 GlobalLoadTr4_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr4_B64 GlobalLoadTr4_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadTr4_B64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadTr4_B64 GlobalLoadTr4_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr4_B64 GlobalLoadTr4_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadTr4_B64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadTr4_B64 GlobalLoadTr4_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr4_B64 GlobalLoadTr4_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadTr4_B64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadTr4_B64 GlobalLoadTr4_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr4_B64 GlobalLoadTr4_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult GlobalLoadTr4_B64::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr4_B64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadTr4_B64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadTr4_B64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void GlobalLoadTr4_B64::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadTr4_B64::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadTr4_B64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadTr4_B64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadTr6_B96 definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadTr6_B96GenericAdaptorBase::GlobalLoadTr6_B96GenericAdaptorBase(GlobalLoadTr6_B96 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr6_B96GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr6_B96GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr6_B96GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadTr6_B96Adaptor::GlobalLoadTr6_B96Adaptor(GlobalLoadTr6_B96 op) : GlobalLoadTr6_B96GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadTr6_B96Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr6.b96' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr6.b96' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr6.b96' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr6_B96::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadTr6_B96::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadTr6_B96::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadTr6_B96::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadTr6_B96::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadTr6_B96::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadTr6_B96::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr6_B96::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadTr6_B96::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr6_B96::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr6_B96::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr6_B96::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadTr6_B96::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } GlobalLoadTr6_B96 GlobalLoadTr6_B96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr6_B96 GlobalLoadTr6_B96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadTr6_B96::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadTr6_B96 GlobalLoadTr6_B96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr6_B96 GlobalLoadTr6_B96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadTr6_B96::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadTr6_B96 GlobalLoadTr6_B96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr6_B96 GlobalLoadTr6_B96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadTr6_B96::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadTr6_B96 GlobalLoadTr6_B96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr6_B96 GlobalLoadTr6_B96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult GlobalLoadTr6_B96::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr6_B96::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadTr6_B96::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadTr6_B96::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void GlobalLoadTr6_B96::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadTr6_B96::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadTr6_B96) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadTr6_B96GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadTr8_B128 definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadTr8_B128GenericAdaptorBase::GlobalLoadTr8_B128GenericAdaptorBase(GlobalLoadTr8_B128 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B128GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B128GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B128GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadTr8_B128Adaptor::GlobalLoadTr8_B128Adaptor(GlobalLoadTr8_B128 op) : GlobalLoadTr8_B128GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadTr8_B128Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr.b128' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr.b128' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr.b128' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr8_B128::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadTr8_B128::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadTr8_B128::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadTr8_B128::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadTr8_B128::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadTr8_B128::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadTr8_B128::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr8_B128::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadTr8_B128::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B128::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B128::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B128::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadTr8_B128::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } GlobalLoadTr8_B128 GlobalLoadTr8_B128::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr8_B128 GlobalLoadTr8_B128::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadTr8_B128::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadTr8_B128 GlobalLoadTr8_B128::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr8_B128 GlobalLoadTr8_B128::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadTr8_B128::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadTr8_B128 GlobalLoadTr8_B128::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr8_B128 GlobalLoadTr8_B128::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadTr8_B128::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadTr8_B128 GlobalLoadTr8_B128::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr8_B128 GlobalLoadTr8_B128::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult GlobalLoadTr8_B128::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr8_B128::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadTr8_B128::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadTr8_B128::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void GlobalLoadTr8_B128::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadTr8_B128::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadTr8_B128) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadTr8_B128GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalLoadTr8_B64 definitions //===----------------------------------------------------------------------===// namespace detail { GlobalLoadTr8_B64GenericAdaptorBase::GlobalLoadTr8_B64GenericAdaptorBase(GlobalLoadTr8_B64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B64GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B64GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B64GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalLoadTr8_B64Adaptor::GlobalLoadTr8_B64Adaptor(GlobalLoadTr8_B64 op) : GlobalLoadTr8_B64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalLoadTr8_B64Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.load.tr.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr8_B64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalLoadTr8_B64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalLoadTr8_B64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalLoadTr8_B64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalLoadTr8_B64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalLoadTr8_B64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalLoadTr8_B64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr8_B64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadTr8_B64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B64::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B64::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalLoadTr8_B64::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalLoadTr8_B64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } GlobalLoadTr8_B64 GlobalLoadTr8_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr8_B64 GlobalLoadTr8_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadTr8_B64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalLoadTr8_B64 GlobalLoadTr8_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr8_B64 GlobalLoadTr8_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalLoadTr8_B64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalLoadTr8_B64 GlobalLoadTr8_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr8_B64 GlobalLoadTr8_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalLoadTr8_B64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalLoadTr8_B64 GlobalLoadTr8_B64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalLoadTr8_B64 GlobalLoadTr8_B64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult GlobalLoadTr8_B64::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalLoadTr8_B64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalLoadTr8_B64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalLoadTr8_B64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void GlobalLoadTr8_B64::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalLoadTr8_B64::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalLoadTr8_B64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalLoadTr8_B64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalPrefetchOp definitions //===----------------------------------------------------------------------===// namespace detail { GlobalPrefetchOpGenericAdaptorBase::GlobalPrefetchOpGenericAdaptorBase(GlobalPrefetchOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute GlobalPrefetchOpGenericAdaptorBase::getCachePolicyAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().cachePolicy); return attr; } ::mlir::Attribute GlobalPrefetchOpGenericAdaptorBase::getCachePolicy() { auto attr = getCachePolicyAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalPrefetchOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalPrefetchOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalPrefetchOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalPrefetchOpAdaptor::GlobalPrefetchOpAdaptor(GlobalPrefetchOp op) : GlobalPrefetchOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalPrefetchOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cachePolicy = getProperties().cachePolicy; (void)tblgen_cachePolicy; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_cachePolicy && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_cachePolicy))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_cachePolicy))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cachePolicy).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.prefetch' op attribute 'cachePolicy' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.prefetch' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.prefetch' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.prefetch' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalPrefetchOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cachePolicy; auto attr = dict.get("cachePolicy"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cachePolicy` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalPrefetchOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.cachePolicy; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cachePolicy", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalPrefetchOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.cachePolicy.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalPrefetchOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "cachePolicy") return prop.cachePolicy; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalPrefetchOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cachePolicy") { prop.cachePolicy = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalPrefetchOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.cachePolicy) attrs.append("cachePolicy", prop.cachePolicy); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalPrefetchOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCachePolicyAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "cachePolicy", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalPrefetchOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.cachePolicy))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalPrefetchOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.cachePolicy); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute GlobalPrefetchOp::getCachePolicy() { auto attr = getCachePolicyAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalPrefetchOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalPrefetchOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalPrefetchOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalPrefetchOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (cachePolicy) { odsState.getOrAddProperties().cachePolicy = cachePolicy; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalPrefetchOp GlobalPrefetchOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalPrefetchOp GlobalPrefetchOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(ptr), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalPrefetchOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (cachePolicy) { odsState.getOrAddProperties().cachePolicy = cachePolicy; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalPrefetchOp GlobalPrefetchOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalPrefetchOp GlobalPrefetchOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalPrefetchOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalPrefetchOp GlobalPrefetchOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalPrefetchOp GlobalPrefetchOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalPrefetchOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalPrefetchOp GlobalPrefetchOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalPrefetchOp GlobalPrefetchOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalPrefetchOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.cachePolicy) properties.cachePolicy = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalPrefetchOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cachePolicy = getProperties().cachePolicy; (void)tblgen_cachePolicy; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_cachePolicy, "cachePolicy"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalPrefetchOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalPrefetchOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Attribute cachePolicyAttr; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, cachePolicyAttr); if (odsResult) return ::mlir::failure(); if (cachePolicyAttr) result.getOrAddProperties().cachePolicy = cachePolicyAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalPrefetchOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getCachePolicyAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cachePolicy"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getCachePolicyAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("cachePolicy"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); } void GlobalPrefetchOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } SmallVector GlobalPrefetchOp::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalPrefetchOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalPrefetchOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalStoreAsyncFromLDSB128Op definitions //===----------------------------------------------------------------------===// namespace detail { GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase::GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase(GlobalStoreAsyncFromLDSB128Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalStoreAsyncFromLDSB128OpAdaptor::GlobalStoreAsyncFromLDSB128OpAdaptor(GlobalStoreAsyncFromLDSB128Op op) : GlobalStoreAsyncFromLDSB128OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalStoreAsyncFromLDSB128OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.store.async.from.lds.b128' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.store.async.from.lds.b128' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.store.async.from.lds.b128' op attribute 'aux' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b128' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b128' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b128' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB128Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB128Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalStoreAsyncFromLDSB128Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalStoreAsyncFromLDSB128Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalStoreAsyncFromLDSB128Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalStoreAsyncFromLDSB128Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB128Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB128Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalStoreAsyncFromLDSB128Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalStoreAsyncFromLDSB128Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB128Op::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB128Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB128Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB128Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalStoreAsyncFromLDSB128Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalStoreAsyncFromLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB128Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB128Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalStoreAsyncFromLDSB128Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB128Op GlobalStoreAsyncFromLDSB128Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalStoreAsyncFromLDSB128Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB128Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB128Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalStoreAsyncFromLDSB128Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalStoreAsyncFromLDSB128Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalStoreAsyncFromLDSB128Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalStoreAsyncFromLDSB128Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalStoreAsyncFromLDSB128Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalStoreAsyncFromLDSB128OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalStoreAsyncFromLDSB32Op definitions //===----------------------------------------------------------------------===// namespace detail { GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase::GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase(GlobalStoreAsyncFromLDSB32Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalStoreAsyncFromLDSB32OpAdaptor::GlobalStoreAsyncFromLDSB32OpAdaptor(GlobalStoreAsyncFromLDSB32Op op) : GlobalStoreAsyncFromLDSB32OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalStoreAsyncFromLDSB32OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.store.async.from.lds.b32' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.store.async.from.lds.b32' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.store.async.from.lds.b32' op attribute 'aux' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b32' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b32' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b32' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB32Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB32Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalStoreAsyncFromLDSB32Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalStoreAsyncFromLDSB32Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalStoreAsyncFromLDSB32Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalStoreAsyncFromLDSB32Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB32Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB32Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalStoreAsyncFromLDSB32Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalStoreAsyncFromLDSB32Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB32Op::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB32Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB32Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB32Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalStoreAsyncFromLDSB32Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalStoreAsyncFromLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB32Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalStoreAsyncFromLDSB32Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB32Op GlobalStoreAsyncFromLDSB32Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalStoreAsyncFromLDSB32Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB32Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB32Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalStoreAsyncFromLDSB32Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalStoreAsyncFromLDSB32Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalStoreAsyncFromLDSB32Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalStoreAsyncFromLDSB32Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalStoreAsyncFromLDSB32Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalStoreAsyncFromLDSB32OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalStoreAsyncFromLDSB64Op definitions //===----------------------------------------------------------------------===// namespace detail { GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase::GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase(GlobalStoreAsyncFromLDSB64Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalStoreAsyncFromLDSB64OpAdaptor::GlobalStoreAsyncFromLDSB64OpAdaptor(GlobalStoreAsyncFromLDSB64Op op) : GlobalStoreAsyncFromLDSB64OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalStoreAsyncFromLDSB64OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.store.async.from.lds.b64' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.store.async.from.lds.b64' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.store.async.from.lds.b64' op attribute 'aux' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB64Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB64Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalStoreAsyncFromLDSB64Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalStoreAsyncFromLDSB64Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalStoreAsyncFromLDSB64Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalStoreAsyncFromLDSB64Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB64Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB64Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalStoreAsyncFromLDSB64Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalStoreAsyncFromLDSB64Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB64Op::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB64Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB64Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB64Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalStoreAsyncFromLDSB64Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalStoreAsyncFromLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB64Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB64Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalStoreAsyncFromLDSB64Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB64Op GlobalStoreAsyncFromLDSB64Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalStoreAsyncFromLDSB64Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB64Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB64Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalStoreAsyncFromLDSB64Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalStoreAsyncFromLDSB64Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalStoreAsyncFromLDSB64Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalStoreAsyncFromLDSB64Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalStoreAsyncFromLDSB64Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalStoreAsyncFromLDSB64OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::GlobalStoreAsyncFromLDSB8Op definitions //===----------------------------------------------------------------------===// namespace detail { GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase::GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase(GlobalStoreAsyncFromLDSB8Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail GlobalStoreAsyncFromLDSB8OpAdaptor::GlobalStoreAsyncFromLDSB8OpAdaptor(GlobalStoreAsyncFromLDSB8Op op) : GlobalStoreAsyncFromLDSB8OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GlobalStoreAsyncFromLDSB8OpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.global.store.async.from.lds.b8' op requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.global.store.async.from.lds.b8' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.global.store.async.from.lds.b8' op attribute 'aux' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b8' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b8' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.global.store.async.from.lds.b8' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB8Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB8Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GlobalStoreAsyncFromLDSB8Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional GlobalStoreAsyncFromLDSB8Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void GlobalStoreAsyncFromLDSB8Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void GlobalStoreAsyncFromLDSB8Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB8Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB8Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void GlobalStoreAsyncFromLDSB8Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeOptionalAttribute(prop.tbaa); } uint32_t GlobalStoreAsyncFromLDSB8Op::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute GlobalStoreAsyncFromLDSB8Op::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB8Op::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB8Op::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > GlobalStoreAsyncFromLDSB8Op::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void GlobalStoreAsyncFromLDSB8Op::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void GlobalStoreAsyncFromLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB8Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void GlobalStoreAsyncFromLDSB8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GlobalStoreAsyncFromLDSB8Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GlobalStoreAsyncFromLDSB8Op GlobalStoreAsyncFromLDSB8Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GlobalStoreAsyncFromLDSB8Op::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB8Op::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult GlobalStoreAsyncFromLDSB8Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult GlobalStoreAsyncFromLDSB8Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GlobalStoreAsyncFromLDSB8Op::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void GlobalStoreAsyncFromLDSB8Op::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> GlobalStoreAsyncFromLDSB8Op::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::GlobalStoreAsyncFromLDSB8Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::GlobalStoreAsyncFromLDSB8OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::IglpOpt definitions //===----------------------------------------------------------------------===// namespace detail { IglpOptGenericAdaptorBase::IglpOptGenericAdaptorBase(IglpOpt op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t IglpOptGenericAdaptorBase::getVariant() { auto attr = getVariantAttr(); return attr.getValue().getZExtValue(); } } // namespace detail IglpOptAdaptor::IglpOptAdaptor(IglpOpt op) : IglpOptGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult IglpOptAdaptor::verify(::mlir::Location loc) { auto tblgen_variant = getProperties().variant; (void)tblgen_variant; if (!tblgen_variant) return emitError(loc, "'rocdl.iglp.opt' op requires attribute 'variant'"); if (tblgen_variant && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_variant))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_variant).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.iglp.opt' op attribute 'variant' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult IglpOpt::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.variant; auto attr = dict.get("variant"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `variant` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute IglpOpt::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.variant; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("variant", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code IglpOpt::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.variant.getAsOpaquePointer())); } std::optional IglpOpt::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "variant") return prop.variant; return std::nullopt; } void IglpOpt::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "variant") { prop.variant = ::llvm::dyn_cast_or_null>(value); return; } } void IglpOpt::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.variant) attrs.append("variant", prop.variant); } ::llvm::LogicalResult IglpOpt::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getVariantAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "variant", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult IglpOpt::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.variant))) return ::mlir::failure(); return ::mlir::success(); } void IglpOpt::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.variant); } uint32_t IglpOpt::getVariant() { auto attr = getVariantAttr(); return attr.getValue().getZExtValue(); } void IglpOpt::setVariant(uint32_t attrValue) { getProperties().variant = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void IglpOpt::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr variant) { odsState.getOrAddProperties().variant = variant; } IglpOpt IglpOpt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr variant) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(variant)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } IglpOpt IglpOpt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr variant) { return create(builder, builder.getLoc(), std::forward(variant)); } void IglpOpt::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr variant) { odsState.getOrAddProperties().variant = variant; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } IglpOpt IglpOpt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr variant) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(variant)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } IglpOpt IglpOpt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr variant) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(variant)); } void IglpOpt::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint32_t variant) { odsState.getOrAddProperties().variant = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), variant); } IglpOpt IglpOpt::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint32_t variant) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(variant)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } IglpOpt IglpOpt::create(::mlir::ImplicitLocOpBuilder &builder, uint32_t variant) { return create(builder, builder.getLoc(), std::forward(variant)); } void IglpOpt::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint32_t variant) { odsState.getOrAddProperties().variant = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), variant); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } IglpOpt IglpOpt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint32_t variant) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(variant)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } IglpOpt IglpOpt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint32_t variant) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(variant)); } void IglpOpt::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } IglpOpt IglpOpt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } IglpOpt IglpOpt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void IglpOpt::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } IglpOpt IglpOpt::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } IglpOpt IglpOpt::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult IglpOpt::verifyInvariantsImpl() { auto tblgen_variant = getProperties().variant; (void)tblgen_variant; if (!tblgen_variant) return emitOpError("requires attribute 'variant'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_variant, "variant"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult IglpOpt::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult IglpOpt::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr variantAttr; if (parser.parseCustomAttributeWithFallback(variantAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (variantAttr) result.getOrAddProperties().variant = variantAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void IglpOpt::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getVariantAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("variant"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::IglpOpt) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::IglpOptGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::LoadAsyncToLDSOp definitions //===----------------------------------------------------------------------===// namespace detail { LoadAsyncToLDSOpGenericAdaptorBase::LoadAsyncToLDSOpGenericAdaptorBase(LoadAsyncToLDSOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t LoadAsyncToLDSOpGenericAdaptorBase::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t LoadAsyncToLDSOpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute LoadAsyncToLDSOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute LoadAsyncToLDSOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > LoadAsyncToLDSOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > LoadAsyncToLDSOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > LoadAsyncToLDSOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail LoadAsyncToLDSOpAdaptor::LoadAsyncToLDSOpAdaptor(LoadAsyncToLDSOp op) : LoadAsyncToLDSOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult LoadAsyncToLDSOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.load.async.to.lds' op requires attribute 'offset'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitError(loc, "'rocdl.load.async.to.lds' op requires attribute 'size'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_size && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_size))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_size).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.load.async.to.lds' op attribute 'size' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.load.async.to.lds' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.load.async.to.lds' op attribute 'aux' failed to satisfy constraint: pre-gfx12 or gfx942 AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.load.async.to.lds' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.load.async.to.lds' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.load.async.to.lds' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult LoadAsyncToLDSOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.size; auto attr = dict.get("size"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `size` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute LoadAsyncToLDSOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.size; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("size", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code LoadAsyncToLDSOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.size.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional LoadAsyncToLDSOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "size") return prop.size; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void LoadAsyncToLDSOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "size") { prop.size = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void LoadAsyncToLDSOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.size) attrs.append("size", prop.size); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult LoadAsyncToLDSOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSizeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "size", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult LoadAsyncToLDSOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.size))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void LoadAsyncToLDSOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeAttribute(prop.size); writer.writeOptionalAttribute(prop.tbaa); } uint32_t LoadAsyncToLDSOp::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t LoadAsyncToLDSOp::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute LoadAsyncToLDSOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > LoadAsyncToLDSOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > LoadAsyncToLDSOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > LoadAsyncToLDSOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void LoadAsyncToLDSOp::setSize(uint32_t attrValue) { getProperties().size = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void LoadAsyncToLDSOp::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void LoadAsyncToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void LoadAsyncToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void LoadAsyncToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void LoadAsyncToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void LoadAsyncToLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void LoadAsyncToLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadAsyncToLDSOp LoadAsyncToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void LoadAsyncToLDSOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult LoadAsyncToLDSOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitOpError("requires attribute 'size'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_size, "size"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps29(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult LoadAsyncToLDSOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult LoadAsyncToLDSOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr sizeAttr; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); ::mlir::Type ldsPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> ldsPtrTypes(&ldsPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(sizeAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (sizeAttr) result.getOrAddProperties().size = sizeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(globalPtrRawType)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ldsPtrRawType)) return ::mlir::failure(); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, ldsPtrTypes, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void LoadAsyncToLDSOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getSizeAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("size"); elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getGlobalPtr().getType(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr().getType(); } void LoadAsyncToLDSOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> LoadAsyncToLDSOp::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::LoadAsyncToLDSOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::LoadAsyncToLDSOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::LoadToLDSOp definitions //===----------------------------------------------------------------------===// namespace detail { LoadToLDSOpGenericAdaptorBase::LoadToLDSOpGenericAdaptorBase(LoadToLDSOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t LoadToLDSOpGenericAdaptorBase::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t LoadToLDSOpGenericAdaptorBase::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute LoadToLDSOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute LoadToLDSOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > LoadToLDSOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > LoadToLDSOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > LoadToLDSOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail LoadToLDSOpAdaptor::LoadToLDSOpAdaptor(LoadToLDSOp op) : LoadToLDSOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult LoadToLDSOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitError(loc, "'rocdl.load.to.lds' op requires attribute 'offset'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitError(loc, "'rocdl.load.to.lds' op requires attribute 'size'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_size && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_size))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_size).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.load.to.lds' op attribute 'size' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_offset && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_offset))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_offset).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.load.to.lds' op attribute 'offset' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.load.to.lds' op attribute 'aux' failed to satisfy constraint: pre-gfx12 or gfx942 AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.load.to.lds' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.load.to.lds' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.load.to.lds' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult LoadToLDSOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.offset; auto attr = dict.get("offset"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `offset` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.size; auto attr = dict.get("size"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `size` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute LoadToLDSOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.offset; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("offset", propStorage)); } { const auto &propStorage = prop.size; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("size", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code LoadToLDSOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.offset.getAsOpaquePointer()), llvm::hash_value(prop.size.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional LoadToLDSOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "offset") return prop.offset; if (name == "size") return prop.size; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void LoadToLDSOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "offset") { prop.offset = ::llvm::dyn_cast_or_null>(value); return; } if (name == "size") { prop.size = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void LoadToLDSOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.offset) attrs.append("offset", prop.offset); if (prop.size) attrs.append("size", prop.size); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult LoadToLDSOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOffsetAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "offset", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSizeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "size", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult LoadToLDSOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.offset))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.size))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void LoadToLDSOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeAttribute(prop.offset); writer.writeAttribute(prop.size); writer.writeOptionalAttribute(prop.tbaa); } uint32_t LoadToLDSOp::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t LoadToLDSOp::getOffset() { auto attr = getOffsetAttr(); return attr.getValue().getZExtValue(); } ::mlir::Attribute LoadToLDSOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > LoadToLDSOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > LoadToLDSOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > LoadToLDSOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void LoadToLDSOp::setSize(uint32_t attrValue) { getProperties().size = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void LoadToLDSOp::setOffset(uint32_t attrValue) { getProperties().offset = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void LoadToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } LoadToLDSOp LoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadToLDSOp LoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void LoadToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().offset = offset; if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } LoadToLDSOp LoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadToLDSOp LoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, ::mlir::IntegerAttr size, ::mlir::IntegerAttr offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void LoadToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } LoadToLDSOp LoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadToLDSOp LoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void LoadToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(globalPtr); odsState.addOperands(ldsPtr); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().offset = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), offset); odsState.getOrAddProperties().aux = aux; if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } LoadToLDSOp LoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadToLDSOp LoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value globalPtr, ::mlir::Value ldsPtr, uint32_t size, uint32_t offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(globalPtr), std::forward(ldsPtr), std::forward(size), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void LoadToLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } LoadToLDSOp LoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadToLDSOp LoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void LoadToLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } LoadToLDSOp LoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadToLDSOp LoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void LoadToLDSOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult LoadToLDSOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_offset = getProperties().offset; (void)tblgen_offset; if (!tblgen_offset) return emitOpError("requires attribute 'offset'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitOpError("requires attribute 'size'"); auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_size, "size"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_offset, "offset"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps29(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult LoadToLDSOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult LoadToLDSOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand globalPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> globalPtrOperands(&globalPtrRawOperand, 1); ::llvm::SMLoc globalPtrOperandsLoc; (void)globalPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::IntegerAttr sizeAttr; ::mlir::IntegerAttr offsetAttr; ::mlir::Attribute auxAttr; ::mlir::Type globalPtrRawType{}; ::llvm::ArrayRef<::mlir::Type> globalPtrTypes(&globalPtrRawType, 1); globalPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(globalPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(sizeAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (sizeAttr) result.getOrAddProperties().size = sizeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(offsetAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (offsetAttr) result.getOrAddProperties().offset = offsetAttr; if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::LLVM::LLVMPointerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); globalPtrRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(3); if (parser.resolveOperands(globalPtrOperands, globalPtrTypes, globalPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, odsBuildableType0, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void LoadToLDSOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getGlobalPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getSizeAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOffsetAttr()); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("size"); elidedAttrs.push_back("offset"); elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getGlobalPtr().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMPointerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void LoadToLDSOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> LoadToLDSOp::getAccessedOperands() { return {getGlobalPtr(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::LoadToLDSOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::LoadToLDSOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::MakeBufferRsrcOp definitions //===----------------------------------------------------------------------===// namespace detail { MakeBufferRsrcOpGenericAdaptorBase::MakeBufferRsrcOpGenericAdaptorBase(MakeBufferRsrcOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail MakeBufferRsrcOpAdaptor::MakeBufferRsrcOpAdaptor(MakeBufferRsrcOp op) : MakeBufferRsrcOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult MakeBufferRsrcOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult MakeBufferRsrcOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute MakeBufferRsrcOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code MakeBufferRsrcOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional MakeBufferRsrcOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void MakeBufferRsrcOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void MakeBufferRsrcOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult MakeBufferRsrcOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void MakeBufferRsrcOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value base, ::mlir::Value stride, ::mlir::Value numRecords, ::mlir::Value flags) { odsState.addOperands(base); odsState.addOperands(stride); odsState.addOperands(numRecords); odsState.addOperands(flags); odsState.addTypes(res); } MakeBufferRsrcOp MakeBufferRsrcOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value base, ::mlir::Value stride, ::mlir::Value numRecords, ::mlir::Value flags) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(base), std::forward(stride), std::forward(numRecords), std::forward(flags)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MakeBufferRsrcOp MakeBufferRsrcOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value base, ::mlir::Value stride, ::mlir::Value numRecords, ::mlir::Value flags) { return create(builder, builder.getLoc(), std::forward(res), std::forward(base), std::forward(stride), std::forward(numRecords), std::forward(flags)); } void MakeBufferRsrcOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value base, ::mlir::Value stride, ::mlir::Value numRecords, ::mlir::Value flags) { odsState.addOperands(base); odsState.addOperands(stride); odsState.addOperands(numRecords); odsState.addOperands(flags); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } MakeBufferRsrcOp MakeBufferRsrcOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value base, ::mlir::Value stride, ::mlir::Value numRecords, ::mlir::Value flags) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(base), std::forward(stride), std::forward(numRecords), std::forward(flags)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MakeBufferRsrcOp MakeBufferRsrcOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value base, ::mlir::Value stride, ::mlir::Value numRecords, ::mlir::Value flags) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(base), std::forward(stride), std::forward(numRecords), std::forward(flags)); } void MakeBufferRsrcOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } MakeBufferRsrcOp MakeBufferRsrcOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MakeBufferRsrcOp MakeBufferRsrcOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void MakeBufferRsrcOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } MakeBufferRsrcOp MakeBufferRsrcOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MakeBufferRsrcOp MakeBufferRsrcOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult MakeBufferRsrcOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps29(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps30(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps29(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult MakeBufferRsrcOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult MakeBufferRsrcOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::llvm::SmallVector<::mlir::OpAsmParser::UnresolvedOperand, 4> allOperands; ::mlir::Type baseRawType{}; ::llvm::ArrayRef<::mlir::Type> baseTypes(&baseRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); [[maybe_unused]] ::llvm::SMLoc allOperandLoc = parser.getCurrentLocation(); if (parser.parseOperandList(allOperands)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::LLVM::LLVMPointerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); baseRawType = type; } if (parser.parseKeyword("to")) return ::mlir::failure(); { ::mlir::LLVM::LLVMPointerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(16); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(64); ::mlir::Type odsBuildableType2 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(allOperands, ::llvm::concat(::llvm::ArrayRef<::mlir::Type>(baseTypes), ::llvm::ArrayRef<::mlir::Type>(odsBuildableType0), ::llvm::ArrayRef<::mlir::Type>(odsBuildableType1), ::llvm::ArrayRef<::mlir::Type>(odsBuildableType2)), allOperandLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void MakeBufferRsrcOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getOperation()->getOperands(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getBase().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMPointerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "to"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMPointerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void MakeBufferRsrcOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::MakeBufferRsrcOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::MbcntHiOp definitions //===----------------------------------------------------------------------===// namespace detail { MbcntHiOpGenericAdaptorBase::MbcntHiOpGenericAdaptorBase(MbcntHiOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > MbcntHiOpGenericAdaptorBase::getArgAttrs() { auto attr = getArgAttrsAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > MbcntHiOpGenericAdaptorBase::getResAttrs() { auto attr = getResAttrsAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail MbcntHiOpAdaptor::MbcntHiOpAdaptor(MbcntHiOp op) : MbcntHiOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult MbcntHiOpAdaptor::verify(::mlir::Location loc) { auto tblgen_arg_attrs = getProperties().arg_attrs; (void)tblgen_arg_attrs; auto tblgen_res_attrs = getProperties().res_attrs; (void)tblgen_res_attrs; if (tblgen_arg_attrs && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_arg_attrs))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_arg_attrs), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::DictionaryAttr>(attr))); })))) return emitError(loc, "'rocdl.mbcnt.hi' op attribute 'arg_attrs' failed to satisfy constraint: Array of dictionary attributes"); if (tblgen_res_attrs && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_res_attrs))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_res_attrs), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::DictionaryAttr>(attr))); })))) return emitError(loc, "'rocdl.mbcnt.hi' op attribute 'res_attrs' failed to satisfy constraint: Array of dictionary attributes"); return ::mlir::success(); } ::llvm::LogicalResult MbcntHiOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.arg_attrs; auto attr = dict.get("arg_attrs"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `arg_attrs` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.res_attrs; auto attr = dict.get("res_attrs"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `res_attrs` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute MbcntHiOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.arg_attrs; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("arg_attrs", propStorage)); } { const auto &propStorage = prop.res_attrs; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("res_attrs", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code MbcntHiOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.arg_attrs.getAsOpaquePointer()), llvm::hash_value(prop.res_attrs.getAsOpaquePointer())); } std::optional MbcntHiOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "arg_attrs") return prop.arg_attrs; if (name == "res_attrs") return prop.res_attrs; return std::nullopt; } void MbcntHiOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "arg_attrs") { prop.arg_attrs = ::llvm::dyn_cast_or_null>(value); return; } if (name == "res_attrs") { prop.res_attrs = ::llvm::dyn_cast_or_null>(value); return; } } void MbcntHiOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.arg_attrs) attrs.append("arg_attrs", prop.arg_attrs); if (prop.res_attrs) attrs.append("res_attrs", prop.res_attrs); } ::llvm::LogicalResult MbcntHiOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getArgAttrsAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps9(attr, "arg_attrs", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getResAttrsAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps9(attr, "res_attrs", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult MbcntHiOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.arg_attrs))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.res_attrs))) return ::mlir::failure(); return ::mlir::success(); } void MbcntHiOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.arg_attrs); writer.writeOptionalAttribute(prop.res_attrs); } ::std::optional< ::mlir::ArrayAttr > MbcntHiOp::getArgAttrs() { auto attr = getArgAttrsAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > MbcntHiOp::getResAttrs() { auto attr = getResAttrsAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void MbcntHiOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { odsState.addOperands(in0); odsState.addOperands(in1); if (arg_attrs) { odsState.getOrAddProperties().arg_attrs = arg_attrs; } if (res_attrs) { odsState.getOrAddProperties().res_attrs = res_attrs; } odsState.addTypes(res); } MbcntHiOp MbcntHiOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(in0), std::forward(in1), std::forward(arg_attrs), std::forward(res_attrs)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MbcntHiOp MbcntHiOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { return create(builder, builder.getLoc(), std::forward(res), std::forward(in0), std::forward(in1), std::forward(arg_attrs), std::forward(res_attrs)); } void MbcntHiOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { odsState.addOperands(in0); odsState.addOperands(in1); if (arg_attrs) { odsState.getOrAddProperties().arg_attrs = arg_attrs; } if (res_attrs) { odsState.getOrAddProperties().res_attrs = res_attrs; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } MbcntHiOp MbcntHiOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(in0), std::forward(in1), std::forward(arg_attrs), std::forward(res_attrs)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MbcntHiOp MbcntHiOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(in0), std::forward(in1), std::forward(arg_attrs), std::forward(res_attrs)); } void MbcntHiOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } MbcntHiOp MbcntHiOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MbcntHiOp MbcntHiOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void MbcntHiOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } MbcntHiOp MbcntHiOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MbcntHiOp MbcntHiOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult MbcntHiOp::verifyInvariantsImpl() { auto tblgen_arg_attrs = getProperties().arg_attrs; (void)tblgen_arg_attrs; auto tblgen_res_attrs = getProperties().res_attrs; (void)tblgen_res_attrs; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps9(*this, tblgen_arg_attrs, "arg_attrs"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps9(*this, tblgen_res_attrs, "res_attrs"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult MbcntHiOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult MbcntHiOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand in0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> in0Operands(&in0RawOperand, 1); ::llvm::SMLoc in0OperandsLoc; (void)in0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand in1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> in1Operands(&in1RawOperand, 1); ::llvm::SMLoc in1OperandsLoc; (void)in1OperandsLoc; ::mlir::Type in0RawType{}; ::llvm::ArrayRef<::mlir::Type> in0Types(&in0RawType, 1); ::mlir::Type in1RawType{}; ::llvm::ArrayRef<::mlir::Type> in1Types(&in1RawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); in0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(in0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); in1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(in1RawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseLParen()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); in0RawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); in1RawType = type; } if (parser.parseRParen()) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(in0Operands, in0Types, in0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(in1Operands, in1Types, in1OperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void MbcntHiOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getIn0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIn1(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' ' << "("; { auto type = getIn0().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getIn1().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ")"; _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void MbcntHiOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::MbcntHiOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::MbcntHiOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::MbcntLoOp definitions //===----------------------------------------------------------------------===// namespace detail { MbcntLoOpGenericAdaptorBase::MbcntLoOpGenericAdaptorBase(MbcntLoOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > MbcntLoOpGenericAdaptorBase::getArgAttrs() { auto attr = getArgAttrsAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > MbcntLoOpGenericAdaptorBase::getResAttrs() { auto attr = getResAttrsAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail MbcntLoOpAdaptor::MbcntLoOpAdaptor(MbcntLoOp op) : MbcntLoOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult MbcntLoOpAdaptor::verify(::mlir::Location loc) { auto tblgen_arg_attrs = getProperties().arg_attrs; (void)tblgen_arg_attrs; auto tblgen_res_attrs = getProperties().res_attrs; (void)tblgen_res_attrs; if (tblgen_arg_attrs && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_arg_attrs))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_arg_attrs), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::DictionaryAttr>(attr))); })))) return emitError(loc, "'rocdl.mbcnt.lo' op attribute 'arg_attrs' failed to satisfy constraint: Array of dictionary attributes"); if (tblgen_res_attrs && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_res_attrs))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_res_attrs), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::DictionaryAttr>(attr))); })))) return emitError(loc, "'rocdl.mbcnt.lo' op attribute 'res_attrs' failed to satisfy constraint: Array of dictionary attributes"); return ::mlir::success(); } ::llvm::LogicalResult MbcntLoOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.arg_attrs; auto attr = dict.get("arg_attrs"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `arg_attrs` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.res_attrs; auto attr = dict.get("res_attrs"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `res_attrs` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute MbcntLoOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.arg_attrs; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("arg_attrs", propStorage)); } { const auto &propStorage = prop.res_attrs; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("res_attrs", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code MbcntLoOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.arg_attrs.getAsOpaquePointer()), llvm::hash_value(prop.res_attrs.getAsOpaquePointer())); } std::optional MbcntLoOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "arg_attrs") return prop.arg_attrs; if (name == "res_attrs") return prop.res_attrs; return std::nullopt; } void MbcntLoOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "arg_attrs") { prop.arg_attrs = ::llvm::dyn_cast_or_null>(value); return; } if (name == "res_attrs") { prop.res_attrs = ::llvm::dyn_cast_or_null>(value); return; } } void MbcntLoOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.arg_attrs) attrs.append("arg_attrs", prop.arg_attrs); if (prop.res_attrs) attrs.append("res_attrs", prop.res_attrs); } ::llvm::LogicalResult MbcntLoOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getArgAttrsAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps9(attr, "arg_attrs", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getResAttrsAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps9(attr, "res_attrs", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult MbcntLoOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.arg_attrs))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.res_attrs))) return ::mlir::failure(); return ::mlir::success(); } void MbcntLoOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.arg_attrs); writer.writeOptionalAttribute(prop.res_attrs); } ::std::optional< ::mlir::ArrayAttr > MbcntLoOp::getArgAttrs() { auto attr = getArgAttrsAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > MbcntLoOp::getResAttrs() { auto attr = getResAttrsAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void MbcntLoOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { odsState.addOperands(in0); odsState.addOperands(in1); if (arg_attrs) { odsState.getOrAddProperties().arg_attrs = arg_attrs; } if (res_attrs) { odsState.getOrAddProperties().res_attrs = res_attrs; } odsState.addTypes(res); } MbcntLoOp MbcntLoOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(in0), std::forward(in1), std::forward(arg_attrs), std::forward(res_attrs)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MbcntLoOp MbcntLoOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { return create(builder, builder.getLoc(), std::forward(res), std::forward(in0), std::forward(in1), std::forward(arg_attrs), std::forward(res_attrs)); } void MbcntLoOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { odsState.addOperands(in0); odsState.addOperands(in1); if (arg_attrs) { odsState.getOrAddProperties().arg_attrs = arg_attrs; } if (res_attrs) { odsState.getOrAddProperties().res_attrs = res_attrs; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } MbcntLoOp MbcntLoOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(in0), std::forward(in1), std::forward(arg_attrs), std::forward(res_attrs)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MbcntLoOp MbcntLoOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value in0, ::mlir::Value in1, /*optional*/::mlir::ArrayAttr arg_attrs, /*optional*/::mlir::ArrayAttr res_attrs) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(in0), std::forward(in1), std::forward(arg_attrs), std::forward(res_attrs)); } void MbcntLoOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } MbcntLoOp MbcntLoOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MbcntLoOp MbcntLoOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void MbcntLoOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } MbcntLoOp MbcntLoOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MbcntLoOp MbcntLoOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult MbcntLoOp::verifyInvariantsImpl() { auto tblgen_arg_attrs = getProperties().arg_attrs; (void)tblgen_arg_attrs; auto tblgen_res_attrs = getProperties().res_attrs; (void)tblgen_res_attrs; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps9(*this, tblgen_arg_attrs, "arg_attrs"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps9(*this, tblgen_res_attrs, "res_attrs"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult MbcntLoOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult MbcntLoOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand in0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> in0Operands(&in0RawOperand, 1); ::llvm::SMLoc in0OperandsLoc; (void)in0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand in1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> in1Operands(&in1RawOperand, 1); ::llvm::SMLoc in1OperandsLoc; (void)in1OperandsLoc; ::mlir::Type in0RawType{}; ::llvm::ArrayRef<::mlir::Type> in0Types(&in0RawType, 1); ::mlir::Type in1RawType{}; ::llvm::ArrayRef<::mlir::Type> in1Types(&in1RawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); in0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(in0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); in1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(in1RawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseLParen()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); in0RawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); in1RawType = type; } if (parser.parseRParen()) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(in0Operands, in0Types, in0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(in1Operands, in1Types, in1OperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void MbcntLoOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getIn0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIn1(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' ' << "("; { auto type = getIn0().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getIn1().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ")"; _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void MbcntLoOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::MbcntLoOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::MbcntLoOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::Permlane16SwapOp definitions //===----------------------------------------------------------------------===// namespace detail { Permlane16SwapOpGenericAdaptorBase::Permlane16SwapOpGenericAdaptorBase(Permlane16SwapOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool Permlane16SwapOpGenericAdaptorBase::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool Permlane16SwapOpGenericAdaptorBase::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } } // namespace detail Permlane16SwapOpAdaptor::Permlane16SwapOpAdaptor(Permlane16SwapOp op) : Permlane16SwapOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult Permlane16SwapOpAdaptor::verify(::mlir::Location loc) { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitError(loc, "'rocdl.permlane16.swap' op requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitError(loc, "'rocdl.permlane16.swap' op requires attribute 'fi'"); if (tblgen_fi && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_fi))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_fi).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlane16.swap' op attribute 'fi' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_boundControl && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_boundControl))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_boundControl).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlane16.swap' op attribute 'boundControl' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult Permlane16SwapOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.boundControl; auto attr = dict.get("boundControl"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `boundControl` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fi; auto attr = dict.get("fi"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fi` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute Permlane16SwapOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.boundControl; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("boundControl", propStorage)); } { const auto &propStorage = prop.fi; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fi", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code Permlane16SwapOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.boundControl.getAsOpaquePointer()), llvm::hash_value(prop.fi.getAsOpaquePointer())); } std::optional Permlane16SwapOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "boundControl") return prop.boundControl; if (name == "fi") return prop.fi; return std::nullopt; } void Permlane16SwapOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "boundControl") { prop.boundControl = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fi") { prop.fi = ::llvm::dyn_cast_or_null>(value); return; } } void Permlane16SwapOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.boundControl) attrs.append("boundControl", prop.boundControl); if (prop.fi) attrs.append("fi", prop.fi); } ::llvm::LogicalResult Permlane16SwapOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBoundControlAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "boundControl", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFiAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "fi", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult Permlane16SwapOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.boundControl))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.fi))) return ::mlir::failure(); return ::mlir::success(); } void Permlane16SwapOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.boundControl); writer.writeAttribute(prop.fi); } bool Permlane16SwapOp::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool Permlane16SwapOp::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } void Permlane16SwapOp::setFi(bool attrValue) { getProperties().fi = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void Permlane16SwapOp::setBoundControl(bool attrValue) { getProperties().boundControl = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void Permlane16SwapOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; odsState.addTypes(res); } Permlane16SwapOp Permlane16SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16SwapOp Permlane16SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); } void Permlane16SwapOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } Permlane16SwapOp Permlane16SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16SwapOp Permlane16SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); } void Permlane16SwapOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); odsState.addTypes(res); } Permlane16SwapOp Permlane16SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16SwapOp Permlane16SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); } void Permlane16SwapOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } Permlane16SwapOp Permlane16SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16SwapOp Permlane16SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); } void Permlane16SwapOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } Permlane16SwapOp Permlane16SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16SwapOp Permlane16SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void Permlane16SwapOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } Permlane16SwapOp Permlane16SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16SwapOp Permlane16SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult Permlane16SwapOp::verifyInvariantsImpl() { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitOpError("requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitOpError("requires attribute 'fi'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_fi, "fi"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_boundControl, "boundControl"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps31(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult Permlane16SwapOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult Permlane16SwapOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr fiAttr; ::mlir::IntegerAttr boundControlAttr; ::mlir::Type oldRawType{}; ::llvm::ArrayRef<::mlir::Type> oldTypes(&oldRawType, 1); ::mlir::Type srcRawType{}; ::llvm::ArrayRef<::mlir::Type> srcTypes(&srcRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fiAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (fiAttr) result.getOrAddProperties().fi = fiAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(boundControlAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (boundControlAttr) result.getOrAddProperties().boundControl = boundControlAttr; if (parser.parseColon()) return ::mlir::failure(); if (parser.parseLParen()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); oldRawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); srcRawType = type; } if (parser.parseRParen()) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::LLVM::LLVMStructType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(oldOperands, oldTypes, oldOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, srcTypes, srcOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void Permlane16SwapOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("fi"); elidedAttrs.push_back("boundControl"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getFiAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getBoundControlAttr()); _odsPrinter << ' ' << ":"; _odsPrinter << ' ' << "("; { auto type = getOld().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getSrc().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ")"; _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMStructType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::Permlane16SwapOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::Permlane16SwapOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::Permlane16VarOp definitions //===----------------------------------------------------------------------===// namespace detail { Permlane16VarOpGenericAdaptorBase::Permlane16VarOpGenericAdaptorBase(Permlane16VarOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool Permlane16VarOpGenericAdaptorBase::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool Permlane16VarOpGenericAdaptorBase::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } } // namespace detail Permlane16VarOpAdaptor::Permlane16VarOpAdaptor(Permlane16VarOp op) : Permlane16VarOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult Permlane16VarOpAdaptor::verify(::mlir::Location loc) { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitError(loc, "'rocdl.permlane16.var' op requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitError(loc, "'rocdl.permlane16.var' op requires attribute 'fi'"); if (tblgen_fi && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_fi))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_fi).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlane16.var' op attribute 'fi' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_boundControl && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_boundControl))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_boundControl).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlane16.var' op attribute 'boundControl' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult Permlane16VarOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.boundControl; auto attr = dict.get("boundControl"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `boundControl` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fi; auto attr = dict.get("fi"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fi` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute Permlane16VarOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.boundControl; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("boundControl", propStorage)); } { const auto &propStorage = prop.fi; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fi", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code Permlane16VarOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.boundControl.getAsOpaquePointer()), llvm::hash_value(prop.fi.getAsOpaquePointer())); } std::optional Permlane16VarOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "boundControl") return prop.boundControl; if (name == "fi") return prop.fi; return std::nullopt; } void Permlane16VarOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "boundControl") { prop.boundControl = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fi") { prop.fi = ::llvm::dyn_cast_or_null>(value); return; } } void Permlane16VarOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.boundControl) attrs.append("boundControl", prop.boundControl); if (prop.fi) attrs.append("fi", prop.fi); } ::llvm::LogicalResult Permlane16VarOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBoundControlAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "boundControl", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFiAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "fi", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult Permlane16VarOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.boundControl))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.fi))) return ::mlir::failure(); return ::mlir::success(); } void Permlane16VarOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.boundControl); writer.writeAttribute(prop.fi); } bool Permlane16VarOp::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool Permlane16VarOp::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } void Permlane16VarOp::setFi(bool attrValue) { getProperties().fi = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void Permlane16VarOp::setBoundControl(bool attrValue) { getProperties().boundControl = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void Permlane16VarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; odsState.addTypes(res); } Permlane16VarOp Permlane16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16VarOp Permlane16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); } void Permlane16VarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } Permlane16VarOp Permlane16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16VarOp Permlane16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); } void Permlane16VarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); odsState.addTypes(res); } Permlane16VarOp Permlane16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16VarOp Permlane16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); } void Permlane16VarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } Permlane16VarOp Permlane16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16VarOp Permlane16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); } void Permlane16VarOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } Permlane16VarOp Permlane16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16VarOp Permlane16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void Permlane16VarOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } Permlane16VarOp Permlane16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane16VarOp Permlane16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult Permlane16VarOp::verifyInvariantsImpl() { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitOpError("requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitOpError("requires attribute 'fi'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_fi, "fi"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_boundControl, "boundControl"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult Permlane16VarOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult Permlane16VarOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::IntegerAttr fiAttr; ::mlir::IntegerAttr boundControlAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fiAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (fiAttr) result.getOrAddProperties().fi = fiAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(boundControlAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (boundControlAttr) result.getOrAddProperties().boundControl = boundControlAttr; if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(oldOperands, src0Operands, src1Operands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void Permlane16VarOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("fi"); elidedAttrs.push_back("boundControl"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getFiAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getBoundControlAttr()); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::Permlane16VarOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::Permlane16VarOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::Permlane32SwapOp definitions //===----------------------------------------------------------------------===// namespace detail { Permlane32SwapOpGenericAdaptorBase::Permlane32SwapOpGenericAdaptorBase(Permlane32SwapOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool Permlane32SwapOpGenericAdaptorBase::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool Permlane32SwapOpGenericAdaptorBase::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } } // namespace detail Permlane32SwapOpAdaptor::Permlane32SwapOpAdaptor(Permlane32SwapOp op) : Permlane32SwapOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult Permlane32SwapOpAdaptor::verify(::mlir::Location loc) { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitError(loc, "'rocdl.permlane32.swap' op requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitError(loc, "'rocdl.permlane32.swap' op requires attribute 'fi'"); if (tblgen_fi && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_fi))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_fi).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlane32.swap' op attribute 'fi' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_boundControl && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_boundControl))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_boundControl).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlane32.swap' op attribute 'boundControl' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult Permlane32SwapOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.boundControl; auto attr = dict.get("boundControl"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `boundControl` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fi; auto attr = dict.get("fi"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fi` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute Permlane32SwapOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.boundControl; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("boundControl", propStorage)); } { const auto &propStorage = prop.fi; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fi", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code Permlane32SwapOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.boundControl.getAsOpaquePointer()), llvm::hash_value(prop.fi.getAsOpaquePointer())); } std::optional Permlane32SwapOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "boundControl") return prop.boundControl; if (name == "fi") return prop.fi; return std::nullopt; } void Permlane32SwapOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "boundControl") { prop.boundControl = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fi") { prop.fi = ::llvm::dyn_cast_or_null>(value); return; } } void Permlane32SwapOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.boundControl) attrs.append("boundControl", prop.boundControl); if (prop.fi) attrs.append("fi", prop.fi); } ::llvm::LogicalResult Permlane32SwapOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBoundControlAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "boundControl", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFiAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "fi", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult Permlane32SwapOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.boundControl))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.fi))) return ::mlir::failure(); return ::mlir::success(); } void Permlane32SwapOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.boundControl); writer.writeAttribute(prop.fi); } bool Permlane32SwapOp::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool Permlane32SwapOp::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } void Permlane32SwapOp::setFi(bool attrValue) { getProperties().fi = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void Permlane32SwapOp::setBoundControl(bool attrValue) { getProperties().boundControl = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void Permlane32SwapOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; odsState.addTypes(res); } Permlane32SwapOp Permlane32SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane32SwapOp Permlane32SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); } void Permlane32SwapOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } Permlane32SwapOp Permlane32SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane32SwapOp Permlane32SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); } void Permlane32SwapOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); odsState.addTypes(res); } Permlane32SwapOp Permlane32SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane32SwapOp Permlane32SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); } void Permlane32SwapOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } Permlane32SwapOp Permlane32SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane32SwapOp Permlane32SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src), std::forward(fi), std::forward(boundControl)); } void Permlane32SwapOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } Permlane32SwapOp Permlane32SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane32SwapOp Permlane32SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void Permlane32SwapOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } Permlane32SwapOp Permlane32SwapOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } Permlane32SwapOp Permlane32SwapOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult Permlane32SwapOp::verifyInvariantsImpl() { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitOpError("requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitOpError("requires attribute 'fi'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_fi, "fi"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_boundControl, "boundControl"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps31(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult Permlane32SwapOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult Permlane32SwapOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::IntegerAttr fiAttr; ::mlir::IntegerAttr boundControlAttr; ::mlir::Type oldRawType{}; ::llvm::ArrayRef<::mlir::Type> oldTypes(&oldRawType, 1); ::mlir::Type srcRawType{}; ::llvm::ArrayRef<::mlir::Type> srcTypes(&srcRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fiAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (fiAttr) result.getOrAddProperties().fi = fiAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(boundControlAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (boundControlAttr) result.getOrAddProperties().boundControl = boundControlAttr; if (parser.parseColon()) return ::mlir::failure(); if (parser.parseLParen()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); oldRawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); srcRawType = type; } if (parser.parseRParen()) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::LLVM::LLVMStructType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(oldOperands, oldTypes, oldOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(srcOperands, srcTypes, srcOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void Permlane32SwapOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("fi"); elidedAttrs.push_back("boundControl"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getFiAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getBoundControlAttr()); _odsPrinter << ' ' << ":"; _odsPrinter << ' ' << "("; { auto type = getOld().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getSrc().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ")"; _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMStructType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::Permlane32SwapOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::Permlane32SwapOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::PermlaneX16Op definitions //===----------------------------------------------------------------------===// namespace detail { PermlaneX16OpGenericAdaptorBase::PermlaneX16OpGenericAdaptorBase(PermlaneX16Op op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool PermlaneX16OpGenericAdaptorBase::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool PermlaneX16OpGenericAdaptorBase::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } } // namespace detail PermlaneX16OpAdaptor::PermlaneX16OpAdaptor(PermlaneX16Op op) : PermlaneX16OpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult PermlaneX16OpAdaptor::verify(::mlir::Location loc) { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitError(loc, "'rocdl.permlanex16' op requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitError(loc, "'rocdl.permlanex16' op requires attribute 'fi'"); if (tblgen_fi && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_fi))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_fi).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlanex16' op attribute 'fi' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_boundControl && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_boundControl))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_boundControl).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlanex16' op attribute 'boundControl' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult PermlaneX16Op::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.boundControl; auto attr = dict.get("boundControl"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `boundControl` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fi; auto attr = dict.get("fi"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fi` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute PermlaneX16Op::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.boundControl; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("boundControl", propStorage)); } { const auto &propStorage = prop.fi; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fi", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code PermlaneX16Op::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.boundControl.getAsOpaquePointer()), llvm::hash_value(prop.fi.getAsOpaquePointer())); } std::optional PermlaneX16Op::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "boundControl") return prop.boundControl; if (name == "fi") return prop.fi; return std::nullopt; } void PermlaneX16Op::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "boundControl") { prop.boundControl = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fi") { prop.fi = ::llvm::dyn_cast_or_null>(value); return; } } void PermlaneX16Op::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.boundControl) attrs.append("boundControl", prop.boundControl); if (prop.fi) attrs.append("fi", prop.fi); } ::llvm::LogicalResult PermlaneX16Op::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBoundControlAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "boundControl", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFiAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "fi", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult PermlaneX16Op::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.boundControl))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.fi))) return ::mlir::failure(); return ::mlir::success(); } void PermlaneX16Op::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.boundControl); writer.writeAttribute(prop.fi); } bool PermlaneX16Op::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool PermlaneX16Op::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } void PermlaneX16Op::setFi(bool attrValue) { getProperties().fi = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void PermlaneX16Op::setBoundControl(bool attrValue) { getProperties().boundControl = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void PermlaneX16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(src2); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; odsState.addTypes(res); } PermlaneX16Op PermlaneX16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(src2), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16Op PermlaneX16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(src2), std::forward(fi), std::forward(boundControl)); } void PermlaneX16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(src2); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } PermlaneX16Op PermlaneX16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(src2), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16Op PermlaneX16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(src2), std::forward(fi), std::forward(boundControl)); } void PermlaneX16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(src2); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); odsState.addTypes(res); } PermlaneX16Op PermlaneX16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(src2), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16Op PermlaneX16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(src2), std::forward(fi), std::forward(boundControl)); } void PermlaneX16Op::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.addOperands(src2); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } PermlaneX16Op PermlaneX16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(src2), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16Op PermlaneX16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::Value src2, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(src2), std::forward(fi), std::forward(boundControl)); } void PermlaneX16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } PermlaneX16Op PermlaneX16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16Op PermlaneX16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void PermlaneX16Op::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } PermlaneX16Op PermlaneX16Op::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16Op PermlaneX16Op::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult PermlaneX16Op::verifyInvariantsImpl() { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitOpError("requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitOpError("requires attribute 'fi'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_fi, "fi"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_boundControl, "boundControl"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSOperands(1).begin()).getType()) && ((*this->getODSOperands(1).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, old, src0} have same type"); if (!((((*this->getODSOperands(2).begin()).getType()) == ((*this->getODSOperands(3).begin()).getType()) && ((*this->getODSOperands(3).begin()).getType()) == ((*this->getODSOperands(2).begin()).getType())))) return emitOpError("failed to verify that all of {src1, src2} have same type"); return ::mlir::success(); } ::llvm::LogicalResult PermlaneX16Op::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult PermlaneX16Op::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src2RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src2Operands(&src2RawOperand, 1); ::llvm::SMLoc src2OperandsLoc; (void)src2OperandsLoc; ::mlir::IntegerAttr fiAttr; ::mlir::IntegerAttr boundControlAttr; ::mlir::Type src0RawType{}; ::llvm::ArrayRef<::mlir::Type> src0Types(&src0RawType, 1); ::mlir::Type src1RawType{}; ::llvm::ArrayRef<::mlir::Type> src1Types(&src1RawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src2OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src2RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fiAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (fiAttr) result.getOrAddProperties().fi = fiAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(boundControlAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (boundControlAttr) result.getOrAddProperties().boundControl = boundControlAttr; if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); src0RawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); src1RawType = type; } result.addTypes(src0Types[0]); if (parser.resolveOperands(oldOperands, src0Types[0], oldOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src0Operands, src0Types, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src1Operands, src1Types, src1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src2Operands, src1Types[0], src2OperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void PermlaneX16Op::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("fi"); elidedAttrs.push_back("boundControl"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc2(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getFiAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getBoundControlAttr()); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getSrc0().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getSrc1().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::PermlaneX16Op) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::PermlaneX16OpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::PermlaneX16VarOp definitions //===----------------------------------------------------------------------===// namespace detail { PermlaneX16VarOpGenericAdaptorBase::PermlaneX16VarOpGenericAdaptorBase(PermlaneX16VarOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} bool PermlaneX16VarOpGenericAdaptorBase::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool PermlaneX16VarOpGenericAdaptorBase::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } } // namespace detail PermlaneX16VarOpAdaptor::PermlaneX16VarOpAdaptor(PermlaneX16VarOp op) : PermlaneX16VarOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult PermlaneX16VarOpAdaptor::verify(::mlir::Location loc) { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitError(loc, "'rocdl.permlanex16.var' op requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitError(loc, "'rocdl.permlanex16.var' op requires attribute 'fi'"); if (tblgen_fi && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_fi))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_fi).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlanex16.var' op attribute 'fi' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_boundControl && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_boundControl))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_boundControl).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.permlanex16.var' op attribute 'boundControl' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult PermlaneX16VarOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.boundControl; auto attr = dict.get("boundControl"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `boundControl` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fi; auto attr = dict.get("fi"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fi` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute PermlaneX16VarOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.boundControl; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("boundControl", propStorage)); } { const auto &propStorage = prop.fi; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fi", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code PermlaneX16VarOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.boundControl.getAsOpaquePointer()), llvm::hash_value(prop.fi.getAsOpaquePointer())); } std::optional PermlaneX16VarOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "boundControl") return prop.boundControl; if (name == "fi") return prop.fi; return std::nullopt; } void PermlaneX16VarOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "boundControl") { prop.boundControl = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fi") { prop.fi = ::llvm::dyn_cast_or_null>(value); return; } } void PermlaneX16VarOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.boundControl) attrs.append("boundControl", prop.boundControl); if (prop.fi) attrs.append("fi", prop.fi); } ::llvm::LogicalResult PermlaneX16VarOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBoundControlAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "boundControl", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFiAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "fi", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult PermlaneX16VarOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.boundControl))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.fi))) return ::mlir::failure(); return ::mlir::success(); } void PermlaneX16VarOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.boundControl); writer.writeAttribute(prop.fi); } bool PermlaneX16VarOp::getFi() { auto attr = getFiAttr(); return attr.getValue().getZExtValue(); } bool PermlaneX16VarOp::getBoundControl() { auto attr = getBoundControlAttr(); return attr.getValue().getZExtValue(); } void PermlaneX16VarOp::setFi(bool attrValue) { getProperties().fi = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void PermlaneX16VarOp::setBoundControl(bool attrValue) { getProperties().boundControl = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void PermlaneX16VarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; odsState.addTypes(res); } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); } void PermlaneX16VarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.getOrAddProperties().fi = fi; odsState.getOrAddProperties().boundControl = boundControl; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, ::mlir::IntegerAttr fi, ::mlir::IntegerAttr boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); } void PermlaneX16VarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); odsState.addTypes(res); } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(res), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); } void PermlaneX16VarOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { odsState.addOperands(old); odsState.addOperands(src0); odsState.addOperands(src1); odsState.getOrAddProperties().fi = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), fi); odsState.getOrAddProperties().boundControl = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), boundControl); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value old, ::mlir::Value src0, ::mlir::Value src1, bool fi, bool boundControl) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(old), std::forward(src0), std::forward(src1), std::forward(fi), std::forward(boundControl)); } void PermlaneX16VarOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void PermlaneX16VarOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PermlaneX16VarOp PermlaneX16VarOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult PermlaneX16VarOp::verifyInvariantsImpl() { auto tblgen_boundControl = getProperties().boundControl; (void)tblgen_boundControl; if (!tblgen_boundControl) return emitOpError("requires attribute 'boundControl'"); auto tblgen_fi = getProperties().fi; (void)tblgen_fi; if (!tblgen_fi) return emitOpError("requires attribute 'fi'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_fi, "fi"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_boundControl, "boundControl"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult PermlaneX16VarOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult PermlaneX16VarOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand oldRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> oldOperands(&oldRawOperand, 1); ::llvm::SMLoc oldOperandsLoc; (void)oldOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::IntegerAttr fiAttr; ::mlir::IntegerAttr boundControlAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } oldOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(oldRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fiAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (fiAttr) result.getOrAddProperties().fi = fiAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(boundControlAttr, parser.getBuilder().getIntegerType(1))) { return ::mlir::failure(); } if (boundControlAttr) result.getOrAddProperties().boundControl = boundControlAttr; if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(oldOperands, src0Operands, src1Operands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void PermlaneX16VarOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("fi"); elidedAttrs.push_back("boundControl"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter << getOld(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getFiAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getBoundControlAttr()); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::PermlaneX16VarOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::PermlaneX16VarOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawBufferAtomicCmpSwap definitions //===----------------------------------------------------------------------===// namespace detail { RawBufferAtomicCmpSwapGenericAdaptorBase::RawBufferAtomicCmpSwapGenericAdaptorBase(RawBufferAtomicCmpSwap op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawBufferAtomicCmpSwapGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawBufferAtomicCmpSwapGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } } // namespace detail RawBufferAtomicCmpSwapAdaptor::RawBufferAtomicCmpSwapAdaptor(RawBufferAtomicCmpSwap op) : RawBufferAtomicCmpSwapGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawBufferAtomicCmpSwapAdaptor::verify(::mlir::Location loc) { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.buffer.atomic.cmpswap' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicCmpSwap::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawBufferAtomicCmpSwap::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawBufferAtomicCmpSwap::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.aux.getAsOpaquePointer())); } std::optional RawBufferAtomicCmpSwap::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "aux") return prop.aux; return std::nullopt; } void RawBufferAtomicCmpSwap::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } } void RawBufferAtomicCmpSwap::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.aux) attrs.append("aux", prop.aux); } ::llvm::LogicalResult RawBufferAtomicCmpSwap::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicCmpSwap::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicCmpSwap::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.aux); } ::mlir::Attribute RawBufferAtomicCmpSwap::getAux() { auto attr = getAuxAttr(); return attr; } void RawBufferAtomicCmpSwap::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(src); odsState.addOperands(cmp); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } odsState.addTypes(res); } RawBufferAtomicCmpSwap RawBufferAtomicCmpSwap::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(cmp), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicCmpSwap RawBufferAtomicCmpSwap::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(cmp), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicCmpSwap::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(src); odsState.addOperands(cmp); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawBufferAtomicCmpSwap RawBufferAtomicCmpSwap::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(cmp), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicCmpSwap RawBufferAtomicCmpSwap::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(cmp), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicCmpSwap::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawBufferAtomicCmpSwap RawBufferAtomicCmpSwap::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicCmpSwap RawBufferAtomicCmpSwap::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawBufferAtomicCmpSwap::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawBufferAtomicCmpSwap RawBufferAtomicCmpSwap::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicCmpSwap RawBufferAtomicCmpSwap::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawBufferAtomicCmpSwap::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawBufferAtomicCmpSwap::verifyInvariantsImpl() { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSOperands(1).begin()).getType()) && ((*this->getODSOperands(1).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, src, cmp} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicCmpSwap::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawBufferAtomicCmpSwap::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cmpRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cmpOperands(&cmpRawOperand, 1); ::llvm::SMLoc cmpOperandsLoc; (void)cmpOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ::mlir::Type rsrcRawType{}; ::llvm::ArrayRef<::mlir::Type> rsrcTypes(&rsrcRawType, 1); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseLParen()) return ::mlir::failure(); srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cmpOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cmpRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } if (parser.parseRParen()) return ::mlir::failure(); if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); rsrcRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, resTypes[0], srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(cmpOperands, resTypes[0], cmpOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, rsrcTypes, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType0, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType0, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicCmpSwap::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << "("; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getCmp(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); _odsPrinter << ")"; _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getRsrc().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawBufferAtomicCmpSwap) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawBufferAtomicCmpSwapGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawBufferAtomicFAddOp definitions //===----------------------------------------------------------------------===// namespace detail { RawBufferAtomicFAddOpGenericAdaptorBase::RawBufferAtomicFAddOpGenericAdaptorBase(RawBufferAtomicFAddOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawBufferAtomicFAddOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawBufferAtomicFAddOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } } // namespace detail RawBufferAtomicFAddOpAdaptor::RawBufferAtomicFAddOpAdaptor(RawBufferAtomicFAddOp op) : RawBufferAtomicFAddOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawBufferAtomicFAddOpAdaptor::verify(::mlir::Location loc) { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.buffer.atomic.fadd' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicFAddOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawBufferAtomicFAddOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawBufferAtomicFAddOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.aux.getAsOpaquePointer())); } std::optional RawBufferAtomicFAddOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "aux") return prop.aux; return std::nullopt; } void RawBufferAtomicFAddOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } } void RawBufferAtomicFAddOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.aux) attrs.append("aux", prop.aux); } ::llvm::LogicalResult RawBufferAtomicFAddOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicFAddOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicFAddOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.aux); } ::mlir::Attribute RawBufferAtomicFAddOp::getAux() { auto attr = getAuxAttr(); return attr; } void RawBufferAtomicFAddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } odsState.addTypes(res); } RawBufferAtomicFAddOp RawBufferAtomicFAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicFAddOp RawBufferAtomicFAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicFAddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawBufferAtomicFAddOp RawBufferAtomicFAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicFAddOp RawBufferAtomicFAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicFAddOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawBufferAtomicFAddOp RawBufferAtomicFAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicFAddOp RawBufferAtomicFAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawBufferAtomicFAddOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawBufferAtomicFAddOp RawBufferAtomicFAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicFAddOp RawBufferAtomicFAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawBufferAtomicFAddOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawBufferAtomicFAddOp::verifyInvariantsImpl() { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, vdata} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicFAddOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawBufferAtomicFAddOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({4} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(vdataTypes[0]); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicFAddOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawBufferAtomicFAddOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawBufferAtomicFAddOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawBufferAtomicFMaxOp definitions //===----------------------------------------------------------------------===// namespace detail { RawBufferAtomicFMaxOpGenericAdaptorBase::RawBufferAtomicFMaxOpGenericAdaptorBase(RawBufferAtomicFMaxOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawBufferAtomicFMaxOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawBufferAtomicFMaxOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } } // namespace detail RawBufferAtomicFMaxOpAdaptor::RawBufferAtomicFMaxOpAdaptor(RawBufferAtomicFMaxOp op) : RawBufferAtomicFMaxOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawBufferAtomicFMaxOpAdaptor::verify(::mlir::Location loc) { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.buffer.atomic.fmax' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicFMaxOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawBufferAtomicFMaxOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawBufferAtomicFMaxOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.aux.getAsOpaquePointer())); } std::optional RawBufferAtomicFMaxOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "aux") return prop.aux; return std::nullopt; } void RawBufferAtomicFMaxOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } } void RawBufferAtomicFMaxOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.aux) attrs.append("aux", prop.aux); } ::llvm::LogicalResult RawBufferAtomicFMaxOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicFMaxOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicFMaxOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.aux); } ::mlir::Attribute RawBufferAtomicFMaxOp::getAux() { auto attr = getAuxAttr(); return attr; } void RawBufferAtomicFMaxOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } odsState.addTypes(res); } RawBufferAtomicFMaxOp RawBufferAtomicFMaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicFMaxOp RawBufferAtomicFMaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicFMaxOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawBufferAtomicFMaxOp RawBufferAtomicFMaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicFMaxOp RawBufferAtomicFMaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicFMaxOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawBufferAtomicFMaxOp RawBufferAtomicFMaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicFMaxOp RawBufferAtomicFMaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawBufferAtomicFMaxOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawBufferAtomicFMaxOp RawBufferAtomicFMaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicFMaxOp RawBufferAtomicFMaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawBufferAtomicFMaxOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawBufferAtomicFMaxOp::verifyInvariantsImpl() { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, vdata} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicFMaxOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawBufferAtomicFMaxOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({4} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(vdataTypes[0]); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicFMaxOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawBufferAtomicFMaxOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawBufferAtomicFMaxOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawBufferAtomicSMaxOp definitions //===----------------------------------------------------------------------===// namespace detail { RawBufferAtomicSMaxOpGenericAdaptorBase::RawBufferAtomicSMaxOpGenericAdaptorBase(RawBufferAtomicSMaxOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawBufferAtomicSMaxOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawBufferAtomicSMaxOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } } // namespace detail RawBufferAtomicSMaxOpAdaptor::RawBufferAtomicSMaxOpAdaptor(RawBufferAtomicSMaxOp op) : RawBufferAtomicSMaxOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawBufferAtomicSMaxOpAdaptor::verify(::mlir::Location loc) { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.buffer.atomic.smax' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicSMaxOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawBufferAtomicSMaxOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawBufferAtomicSMaxOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.aux.getAsOpaquePointer())); } std::optional RawBufferAtomicSMaxOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "aux") return prop.aux; return std::nullopt; } void RawBufferAtomicSMaxOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } } void RawBufferAtomicSMaxOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.aux) attrs.append("aux", prop.aux); } ::llvm::LogicalResult RawBufferAtomicSMaxOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicSMaxOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicSMaxOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.aux); } ::mlir::Attribute RawBufferAtomicSMaxOp::getAux() { auto attr = getAuxAttr(); return attr; } void RawBufferAtomicSMaxOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } odsState.addTypes(res); } RawBufferAtomicSMaxOp RawBufferAtomicSMaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicSMaxOp RawBufferAtomicSMaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicSMaxOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawBufferAtomicSMaxOp RawBufferAtomicSMaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicSMaxOp RawBufferAtomicSMaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicSMaxOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawBufferAtomicSMaxOp RawBufferAtomicSMaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicSMaxOp RawBufferAtomicSMaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawBufferAtomicSMaxOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawBufferAtomicSMaxOp RawBufferAtomicSMaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicSMaxOp RawBufferAtomicSMaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawBufferAtomicSMaxOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawBufferAtomicSMaxOp::verifyInvariantsImpl() { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, vdata} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicSMaxOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawBufferAtomicSMaxOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({4} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(vdataTypes[0]); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicSMaxOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawBufferAtomicSMaxOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawBufferAtomicSMaxOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawBufferAtomicUMinOp definitions //===----------------------------------------------------------------------===// namespace detail { RawBufferAtomicUMinOpGenericAdaptorBase::RawBufferAtomicUMinOpGenericAdaptorBase(RawBufferAtomicUMinOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawBufferAtomicUMinOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawBufferAtomicUMinOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } } // namespace detail RawBufferAtomicUMinOpAdaptor::RawBufferAtomicUMinOpAdaptor(RawBufferAtomicUMinOp op) : RawBufferAtomicUMinOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawBufferAtomicUMinOpAdaptor::verify(::mlir::Location loc) { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.buffer.atomic.umin' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicUMinOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawBufferAtomicUMinOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawBufferAtomicUMinOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.aux.getAsOpaquePointer())); } std::optional RawBufferAtomicUMinOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "aux") return prop.aux; return std::nullopt; } void RawBufferAtomicUMinOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } } void RawBufferAtomicUMinOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.aux) attrs.append("aux", prop.aux); } ::llvm::LogicalResult RawBufferAtomicUMinOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicUMinOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicUMinOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.aux); } ::mlir::Attribute RawBufferAtomicUMinOp::getAux() { auto attr = getAuxAttr(); return attr; } void RawBufferAtomicUMinOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } odsState.addTypes(res); } RawBufferAtomicUMinOp RawBufferAtomicUMinOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicUMinOp RawBufferAtomicUMinOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicUMinOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawBufferAtomicUMinOp RawBufferAtomicUMinOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicUMinOp RawBufferAtomicUMinOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferAtomicUMinOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawBufferAtomicUMinOp RawBufferAtomicUMinOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicUMinOp RawBufferAtomicUMinOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawBufferAtomicUMinOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawBufferAtomicUMinOp RawBufferAtomicUMinOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferAtomicUMinOp RawBufferAtomicUMinOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawBufferAtomicUMinOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawBufferAtomicUMinOp::verifyInvariantsImpl() { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, vdata} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferAtomicUMinOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawBufferAtomicUMinOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({4} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(vdataTypes[0]); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawBufferAtomicUMinOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawBufferAtomicUMinOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawBufferAtomicUMinOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawBufferLoadOp definitions //===----------------------------------------------------------------------===// namespace detail { RawBufferLoadOpGenericAdaptorBase::RawBufferLoadOpGenericAdaptorBase(RawBufferLoadOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawBufferLoadOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawBufferLoadOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } } // namespace detail RawBufferLoadOpAdaptor::RawBufferLoadOpAdaptor(RawBufferLoadOp op) : RawBufferLoadOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawBufferLoadOpAdaptor::verify(::mlir::Location loc) { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.buffer.load' op attribute 'aux' failed to satisfy constraint: non-atomic AMDGPU buffer cache policy attribute"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferLoadOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawBufferLoadOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawBufferLoadOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.aux.getAsOpaquePointer())); } std::optional RawBufferLoadOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "aux") return prop.aux; return std::nullopt; } void RawBufferLoadOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } } void RawBufferLoadOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.aux) attrs.append("aux", prop.aux); } ::llvm::LogicalResult RawBufferLoadOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(attr, "aux", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawBufferLoadOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); return ::mlir::success(); } void RawBufferLoadOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.aux); } ::mlir::Attribute RawBufferLoadOp::getAux() { auto attr = getAuxAttr(); return attr; } void RawBufferLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } odsState.addTypes(res); } RawBufferLoadOp RawBufferLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferLoadOp RawBufferLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(res), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawBufferLoadOp RawBufferLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferLoadOp RawBufferLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferLoadOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawBufferLoadOp RawBufferLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferLoadOp RawBufferLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawBufferLoadOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawBufferLoadOp RawBufferLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferLoadOp RawBufferLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawBufferLoadOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawBufferLoadOp::verifyInvariantsImpl() { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(*this, tblgen_aux, "aux"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult RawBufferLoadOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawBufferLoadOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({4} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawBufferLoadOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawBufferLoadOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawBufferLoadOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawBufferStoreOp definitions //===----------------------------------------------------------------------===// namespace detail { RawBufferStoreOpGenericAdaptorBase::RawBufferStoreOpGenericAdaptorBase(RawBufferStoreOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawBufferStoreOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawBufferStoreOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } } // namespace detail RawBufferStoreOpAdaptor::RawBufferStoreOpAdaptor(RawBufferStoreOp op) : RawBufferStoreOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawBufferStoreOpAdaptor::verify(::mlir::Location loc) { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.buffer.store' op attribute 'aux' failed to satisfy constraint: non-atomic AMDGPU buffer cache policy attribute"); return ::mlir::success(); } ::llvm::LogicalResult RawBufferStoreOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawBufferStoreOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawBufferStoreOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.aux.getAsOpaquePointer())); } std::optional RawBufferStoreOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "aux") return prop.aux; return std::nullopt; } void RawBufferStoreOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } } void RawBufferStoreOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.aux) attrs.append("aux", prop.aux); } ::llvm::LogicalResult RawBufferStoreOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(attr, "aux", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawBufferStoreOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); return ::mlir::success(); } void RawBufferStoreOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.aux); } ::mlir::Attribute RawBufferStoreOp::getAux() { auto attr = getAuxAttr(); return attr; } void RawBufferStoreOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } } RawBufferStoreOp RawBufferStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferStoreOp RawBufferStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferStoreOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawBufferStoreOp RawBufferStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferStoreOp RawBufferStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux)); } void RawBufferStoreOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawBufferStoreOp RawBufferStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferStoreOp RawBufferStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawBufferStoreOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawBufferStoreOp RawBufferStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawBufferStoreOp RawBufferStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawBufferStoreOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawBufferStoreOp::verifyInvariantsImpl() { auto tblgen_aux = getProperties().aux; (void)tblgen_aux; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(*this, tblgen_aux, "aux"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult RawBufferStoreOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawBufferStoreOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({4} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawBufferStoreOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawBufferStoreOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawBufferStoreOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferAtomicCmpSwap definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferAtomicCmpSwapGenericAdaptorBase::RawPtrBufferAtomicCmpSwapGenericAdaptorBase(RawPtrBufferAtomicCmpSwap op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferAtomicCmpSwapGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferAtomicCmpSwapGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicCmpSwapGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicCmpSwapGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicCmpSwapGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferAtomicCmpSwapAdaptor::RawPtrBufferAtomicCmpSwapAdaptor(RawPtrBufferAtomicCmpSwap op) : RawPtrBufferAtomicCmpSwapGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferAtomicCmpSwapAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.cmpswap' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.cmpswap' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.cmpswap' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.cmpswap' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicCmpSwap::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferAtomicCmpSwap::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferAtomicCmpSwap::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferAtomicCmpSwap::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferAtomicCmpSwap::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferAtomicCmpSwap::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferAtomicCmpSwap::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicCmpSwap::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicCmpSwap::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferAtomicCmpSwap::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicCmpSwap::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicCmpSwap::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicCmpSwap::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferAtomicCmpSwap::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(src); odsState.addOperands(cmp); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } RawPtrBufferAtomicCmpSwap RawPtrBufferAtomicCmpSwap::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src), std::forward(cmp), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicCmpSwap RawPtrBufferAtomicCmpSwap::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src), std::forward(cmp), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicCmpSwap::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(src); odsState.addOperands(cmp); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicCmpSwap RawPtrBufferAtomicCmpSwap::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src), std::forward(cmp), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicCmpSwap RawPtrBufferAtomicCmpSwap::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src, ::mlir::Value cmp, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src), std::forward(cmp), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicCmpSwap::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferAtomicCmpSwap RawPtrBufferAtomicCmpSwap::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicCmpSwap RawPtrBufferAtomicCmpSwap::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferAtomicCmpSwap::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicCmpSwap RawPtrBufferAtomicCmpSwap::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicCmpSwap RawPtrBufferAtomicCmpSwap::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferAtomicCmpSwap::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferAtomicCmpSwap::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSOperands(1).begin()).getType()) && ((*this->getODSOperands(1).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, src, cmp} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicCmpSwap::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferAtomicCmpSwap::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cmpRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cmpOperands(&cmpRawOperand, 1); ::llvm::SMLoc cmpOperandsLoc; (void)cmpOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cmpOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cmpRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, resTypes[0], srcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(cmpOperands, resTypes[0], cmpOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicCmpSwap::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getSrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getCmp(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void RawPtrBufferAtomicCmpSwap::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(2); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(2); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferAtomicCmpSwap::getAccessedOperands() { return {getRsrc()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferAtomicCmpSwap) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferAtomicCmpSwapGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferAtomicFaddOp definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferAtomicFaddOpGenericAdaptorBase::RawPtrBufferAtomicFaddOpGenericAdaptorBase(RawPtrBufferAtomicFaddOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferAtomicFaddOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferAtomicFaddOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFaddOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFaddOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFaddOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferAtomicFaddOpAdaptor::RawPtrBufferAtomicFaddOpAdaptor(RawPtrBufferAtomicFaddOp op) : RawPtrBufferAtomicFaddOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferAtomicFaddOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.fadd' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.fadd' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.fadd' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.fadd' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicFaddOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferAtomicFaddOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferAtomicFaddOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferAtomicFaddOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferAtomicFaddOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferAtomicFaddOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferAtomicFaddOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicFaddOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicFaddOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferAtomicFaddOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFaddOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFaddOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFaddOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferAtomicFaddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } RawPtrBufferAtomicFaddOp RawPtrBufferAtomicFaddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicFaddOp RawPtrBufferAtomicFaddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicFaddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicFaddOp RawPtrBufferAtomicFaddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicFaddOp RawPtrBufferAtomicFaddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicFaddOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferAtomicFaddOp RawPtrBufferAtomicFaddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicFaddOp RawPtrBufferAtomicFaddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferAtomicFaddOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicFaddOp RawPtrBufferAtomicFaddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicFaddOp RawPtrBufferAtomicFaddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferAtomicFaddOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferAtomicFaddOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, vdata} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicFaddOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferAtomicFaddOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(vdataTypes[0]); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicFaddOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void RawPtrBufferAtomicFaddOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferAtomicFaddOp::getAccessedOperands() { return {getRsrc()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferAtomicFaddOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferAtomicFaddOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferAtomicFmaxOp definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferAtomicFmaxOpGenericAdaptorBase::RawPtrBufferAtomicFmaxOpGenericAdaptorBase(RawPtrBufferAtomicFmaxOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferAtomicFmaxOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferAtomicFmaxOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFmaxOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFmaxOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFmaxOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferAtomicFmaxOpAdaptor::RawPtrBufferAtomicFmaxOpAdaptor(RawPtrBufferAtomicFmaxOp op) : RawPtrBufferAtomicFmaxOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferAtomicFmaxOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.fmax' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.fmax' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.fmax' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.fmax' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicFmaxOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferAtomicFmaxOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferAtomicFmaxOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferAtomicFmaxOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferAtomicFmaxOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferAtomicFmaxOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferAtomicFmaxOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicFmaxOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicFmaxOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferAtomicFmaxOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFmaxOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFmaxOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicFmaxOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferAtomicFmaxOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } RawPtrBufferAtomicFmaxOp RawPtrBufferAtomicFmaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicFmaxOp RawPtrBufferAtomicFmaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicFmaxOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicFmaxOp RawPtrBufferAtomicFmaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicFmaxOp RawPtrBufferAtomicFmaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicFmaxOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferAtomicFmaxOp RawPtrBufferAtomicFmaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicFmaxOp RawPtrBufferAtomicFmaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferAtomicFmaxOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicFmaxOp RawPtrBufferAtomicFmaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicFmaxOp RawPtrBufferAtomicFmaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferAtomicFmaxOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferAtomicFmaxOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, vdata} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicFmaxOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferAtomicFmaxOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(vdataTypes[0]); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicFmaxOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void RawPtrBufferAtomicFmaxOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferAtomicFmaxOp::getAccessedOperands() { return {getRsrc()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferAtomicFmaxOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferAtomicFmaxOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferAtomicSmaxOp definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferAtomicSmaxOpGenericAdaptorBase::RawPtrBufferAtomicSmaxOpGenericAdaptorBase(RawPtrBufferAtomicSmaxOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferAtomicSmaxOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferAtomicSmaxOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicSmaxOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicSmaxOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicSmaxOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferAtomicSmaxOpAdaptor::RawPtrBufferAtomicSmaxOpAdaptor(RawPtrBufferAtomicSmaxOp op) : RawPtrBufferAtomicSmaxOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferAtomicSmaxOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.smax' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.smax' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.smax' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.smax' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicSmaxOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferAtomicSmaxOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferAtomicSmaxOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferAtomicSmaxOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferAtomicSmaxOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferAtomicSmaxOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferAtomicSmaxOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicSmaxOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicSmaxOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferAtomicSmaxOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicSmaxOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicSmaxOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicSmaxOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferAtomicSmaxOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } RawPtrBufferAtomicSmaxOp RawPtrBufferAtomicSmaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicSmaxOp RawPtrBufferAtomicSmaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicSmaxOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicSmaxOp RawPtrBufferAtomicSmaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicSmaxOp RawPtrBufferAtomicSmaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicSmaxOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferAtomicSmaxOp RawPtrBufferAtomicSmaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicSmaxOp RawPtrBufferAtomicSmaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferAtomicSmaxOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicSmaxOp RawPtrBufferAtomicSmaxOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicSmaxOp RawPtrBufferAtomicSmaxOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferAtomicSmaxOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferAtomicSmaxOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, vdata} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicSmaxOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferAtomicSmaxOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(vdataTypes[0]); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicSmaxOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void RawPtrBufferAtomicSmaxOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferAtomicSmaxOp::getAccessedOperands() { return {getRsrc()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferAtomicSmaxOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferAtomicSmaxOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferAtomicUminOp definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferAtomicUminOpGenericAdaptorBase::RawPtrBufferAtomicUminOpGenericAdaptorBase(RawPtrBufferAtomicUminOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferAtomicUminOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferAtomicUminOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicUminOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicUminOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicUminOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferAtomicUminOpAdaptor::RawPtrBufferAtomicUminOpAdaptor(RawPtrBufferAtomicUminOp op) : RawPtrBufferAtomicUminOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferAtomicUminOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12AtomicCachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.umin' op attribute 'aux' failed to satisfy constraint: atomic AMDGPU buffer cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.umin' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.umin' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.atomic.umin' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicUminOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferAtomicUminOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferAtomicUminOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferAtomicUminOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferAtomicUminOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferAtomicUminOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferAtomicUminOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicUminOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicUminOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferAtomicUminOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicUminOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicUminOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferAtomicUminOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferAtomicUminOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } RawPtrBufferAtomicUminOp RawPtrBufferAtomicUminOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicUminOp RawPtrBufferAtomicUminOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicUminOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicUminOp RawPtrBufferAtomicUminOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicUminOp RawPtrBufferAtomicUminOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferAtomicUminOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferAtomicUminOp RawPtrBufferAtomicUminOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicUminOp RawPtrBufferAtomicUminOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferAtomicUminOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferAtomicUminOp RawPtrBufferAtomicUminOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferAtomicUminOp RawPtrBufferAtomicUminOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferAtomicUminOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferAtomicUminOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps10(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, vdata} have same type"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferAtomicUminOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferAtomicUminOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(vdataTypes[0]); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferAtomicUminOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void RawPtrBufferAtomicUminOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferAtomicUminOp::getAccessedOperands() { return {getRsrc()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferAtomicUminOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferAtomicUminOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferLoadAsyncLdsOp definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferLoadAsyncLdsOpGenericAdaptorBase::RawPtrBufferLoadAsyncLdsOpGenericAdaptorBase(RawPtrBufferLoadAsyncLdsOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferLoadAsyncLdsOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferLoadAsyncLdsOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadAsyncLdsOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadAsyncLdsOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadAsyncLdsOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferLoadAsyncLdsOpAdaptor::RawPtrBufferLoadAsyncLdsOpAdaptor(RawPtrBufferLoadAsyncLdsOp op) : RawPtrBufferLoadAsyncLdsOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferLoadAsyncLdsOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.load.async.lds' op attribute 'aux' failed to satisfy constraint: pre-gfx12 or gfx942 AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load.async.lds' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load.async.lds' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load.async.lds' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadAsyncLdsOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferLoadAsyncLdsOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferLoadAsyncLdsOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferLoadAsyncLdsOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferLoadAsyncLdsOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferLoadAsyncLdsOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferLoadAsyncLdsOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadAsyncLdsOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferLoadAsyncLdsOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferLoadAsyncLdsOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadAsyncLdsOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadAsyncLdsOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadAsyncLdsOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferLoadAsyncLdsOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(rsrc); odsState.addOperands(ldsPtr); odsState.addOperands(size); odsState.addOperands(voffset); odsState.addOperands(soffset); odsState.addOperands(offset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } RawPtrBufferLoadAsyncLdsOp RawPtrBufferLoadAsyncLdsOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(rsrc), std::forward(ldsPtr), std::forward(size), std::forward(voffset), std::forward(soffset), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadAsyncLdsOp RawPtrBufferLoadAsyncLdsOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(rsrc), std::forward(ldsPtr), std::forward(size), std::forward(voffset), std::forward(soffset), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferLoadAsyncLdsOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(rsrc); odsState.addOperands(ldsPtr); odsState.addOperands(size); odsState.addOperands(voffset); odsState.addOperands(soffset); odsState.addOperands(offset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferLoadAsyncLdsOp RawPtrBufferLoadAsyncLdsOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(rsrc), std::forward(ldsPtr), std::forward(size), std::forward(voffset), std::forward(soffset), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadAsyncLdsOp RawPtrBufferLoadAsyncLdsOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(rsrc), std::forward(ldsPtr), std::forward(size), std::forward(voffset), std::forward(soffset), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferLoadAsyncLdsOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 6u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferLoadAsyncLdsOp RawPtrBufferLoadAsyncLdsOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadAsyncLdsOp RawPtrBufferLoadAsyncLdsOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferLoadAsyncLdsOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 6u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferLoadAsyncLdsOp RawPtrBufferLoadAsyncLdsOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadAsyncLdsOp RawPtrBufferLoadAsyncLdsOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferLoadAsyncLdsOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferLoadAsyncLdsOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps8(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup5 = getODSOperands(5); for (auto v : valueGroup5) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadAsyncLdsOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferLoadAsyncLdsOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand sizeRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> sizeOperands(&sizeRawOperand, 1); ::llvm::SMLoc sizeOperandsLoc; (void)sizeOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand voffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> voffsetOperands(&voffsetRawOperand, 1); ::llvm::SMLoc voffsetOperandsLoc; (void)voffsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::Attribute auxAttr; rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); sizeOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(sizeRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); voffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(voffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(3); ::mlir::Type odsBuildableType2 = parser.getBuilder().getIntegerType(32); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, odsBuildableType1, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(sizeOperands, odsBuildableType2, sizeOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(voffsetOperands, odsBuildableType2, voffsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType2, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType2, offsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferLoadAsyncLdsOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSize(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getVoffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } void RawPtrBufferLoadAsyncLdsOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferLoadAsyncLdsOp::getAccessedOperands() { return {getRsrc(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferLoadAsyncLdsOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferLoadAsyncLdsOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferLoadLdsOp definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferLoadLdsOpGenericAdaptorBase::RawPtrBufferLoadLdsOpGenericAdaptorBase(RawPtrBufferLoadLdsOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferLoadLdsOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferLoadLdsOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadLdsOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadLdsOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadLdsOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferLoadLdsOpAdaptor::RawPtrBufferLoadLdsOpAdaptor(RawPtrBufferLoadLdsOp op) : RawPtrBufferLoadLdsOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferLoadLdsOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.load.lds' op attribute 'aux' failed to satisfy constraint: non-atomic AMDGPU buffer cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load.lds' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load.lds' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load.lds' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadLdsOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferLoadLdsOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferLoadLdsOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferLoadLdsOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferLoadLdsOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferLoadLdsOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferLoadLdsOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadLdsOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferLoadLdsOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferLoadLdsOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadLdsOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadLdsOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadLdsOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferLoadLdsOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(rsrc); odsState.addOperands(ldsPtr); odsState.addOperands(size); odsState.addOperands(voffset); odsState.addOperands(soffset); odsState.addOperands(offset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } RawPtrBufferLoadLdsOp RawPtrBufferLoadLdsOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(rsrc), std::forward(ldsPtr), std::forward(size), std::forward(voffset), std::forward(soffset), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadLdsOp RawPtrBufferLoadLdsOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(rsrc), std::forward(ldsPtr), std::forward(size), std::forward(voffset), std::forward(soffset), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferLoadLdsOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(rsrc); odsState.addOperands(ldsPtr); odsState.addOperands(size); odsState.addOperands(voffset); odsState.addOperands(soffset); odsState.addOperands(offset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferLoadLdsOp RawPtrBufferLoadLdsOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(rsrc), std::forward(ldsPtr), std::forward(size), std::forward(voffset), std::forward(soffset), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadLdsOp RawPtrBufferLoadLdsOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value ldsPtr, ::mlir::Value size, ::mlir::Value voffset, ::mlir::Value soffset, ::mlir::Value offset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(rsrc), std::forward(ldsPtr), std::forward(size), std::forward(voffset), std::forward(soffset), std::forward(offset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferLoadLdsOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 6u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferLoadLdsOp RawPtrBufferLoadLdsOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadLdsOp RawPtrBufferLoadLdsOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferLoadLdsOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 6u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferLoadLdsOp RawPtrBufferLoadLdsOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadLdsOp RawPtrBufferLoadLdsOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferLoadLdsOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferLoadLdsOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup5 = getODSOperands(5); for (auto v : valueGroup5) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadLdsOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferLoadLdsOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ldsPtrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ldsPtrOperands(&ldsPtrRawOperand, 1); ::llvm::SMLoc ldsPtrOperandsLoc; (void)ldsPtrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand sizeRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> sizeOperands(&sizeRawOperand, 1); ::llvm::SMLoc sizeOperandsLoc; (void)sizeOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand voffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> voffsetOperands(&voffsetRawOperand, 1); ::llvm::SMLoc voffsetOperandsLoc; (void)voffsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::Attribute auxAttr; rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ldsPtrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ldsPtrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); sizeOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(sizeRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); voffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(voffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(3); ::mlir::Type odsBuildableType2 = parser.getBuilder().getIntegerType(32); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ldsPtrOperands, odsBuildableType1, ldsPtrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(sizeOperands, odsBuildableType2, sizeOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(voffsetOperands, odsBuildableType2, voffsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType2, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType2, offsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferLoadLdsOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getLdsPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSize(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getVoffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } void RawPtrBufferLoadLdsOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferLoadLdsOp::getAccessedOperands() { return {getRsrc(), getLdsPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferLoadLdsOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferLoadLdsOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferLoadOp definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferLoadOpGenericAdaptorBase::RawPtrBufferLoadOpGenericAdaptorBase(RawPtrBufferLoadOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferLoadOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferLoadOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferLoadOpAdaptor::RawPtrBufferLoadOpAdaptor(RawPtrBufferLoadOp op) : RawPtrBufferLoadOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferLoadOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.load' op attribute 'aux' failed to satisfy constraint: non-atomic AMDGPU buffer cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.load' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferLoadOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferLoadOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferLoadOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferLoadOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferLoadOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferLoadOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferLoadOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferLoadOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferLoadOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } RawPtrBufferLoadOp RawPtrBufferLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadOp RawPtrBufferLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferLoadOp RawPtrBufferLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadOp RawPtrBufferLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferLoadOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferLoadOp RawPtrBufferLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadOp RawPtrBufferLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferLoadOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferLoadOp RawPtrBufferLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferLoadOp RawPtrBufferLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferLoadOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferLoadOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferLoadOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferLoadOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); result.addTypes(resTypes); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferLoadOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void RawPtrBufferLoadOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferLoadOp::getAccessedOperands() { return {getRsrc()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferLoadOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferLoadOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::RawPtrBufferStoreOp definitions //===----------------------------------------------------------------------===// namespace detail { RawPtrBufferStoreOpGenericAdaptorBase::RawPtrBufferStoreOpGenericAdaptorBase(RawPtrBufferStoreOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute RawPtrBufferStoreOpGenericAdaptorBase::getAuxAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().aux); return attr; } ::mlir::Attribute RawPtrBufferStoreOpGenericAdaptorBase::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferStoreOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferStoreOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferStoreOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail RawPtrBufferStoreOpAdaptor::RawPtrBufferStoreOpAdaptor(RawPtrBufferStoreOp op) : RawPtrBufferStoreOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult RawPtrBufferStoreOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_aux && !(((::llvm::isa<::mlir::ROCDL::PreGfx12CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx942CachePolicyAttr>(tblgen_aux))) || ((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_aux))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_aux))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_aux).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.raw.ptr.buffer.store' op attribute 'aux' failed to satisfy constraint: non-atomic AMDGPU buffer cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.store' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.store' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.raw.ptr.buffer.store' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferStoreOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.aux; auto attr = dict.get("aux"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `aux` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute RawPtrBufferStoreOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.aux; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("aux", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code RawPtrBufferStoreOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.aux.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional RawPtrBufferStoreOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "aux") return prop.aux; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void RawPtrBufferStoreOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "aux") { prop.aux = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void RawPtrBufferStoreOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.aux) attrs.append("aux", prop.aux); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult RawPtrBufferStoreOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getAuxAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(attr, "aux", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferStoreOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.aux))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferStoreOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.aux); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute RawPtrBufferStoreOp::getAux() { auto attr = getAuxAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferStoreOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferStoreOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > RawPtrBufferStoreOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void RawPtrBufferStoreOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } RawPtrBufferStoreOp RawPtrBufferStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferStoreOp RawPtrBufferStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferStoreOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(vdata); odsState.addOperands(rsrc); odsState.addOperands(offset); odsState.addOperands(soffset); if (aux) { odsState.getOrAddProperties().aux = aux; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } RawPtrBufferStoreOp RawPtrBufferStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferStoreOp RawPtrBufferStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value vdata, ::mlir::Value rsrc, ::mlir::Value offset, ::mlir::Value soffset, ::mlir::Attribute aux, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(vdata), std::forward(rsrc), std::forward(offset), std::forward(soffset), std::forward(aux), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void RawPtrBufferStoreOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } RawPtrBufferStoreOp RawPtrBufferStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferStoreOp RawPtrBufferStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void RawPtrBufferStoreOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } RawPtrBufferStoreOp RawPtrBufferStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } RawPtrBufferStoreOp RawPtrBufferStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void RawPtrBufferStoreOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.aux) properties.aux = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult RawPtrBufferStoreOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_aux = getProperties().aux; (void)tblgen_aux; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps11(*this, tblgen_aux, "aux"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps33(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult RawPtrBufferStoreOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult RawPtrBufferStoreOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand vdataRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> vdataOperands(&vdataRawOperand, 1); ::llvm::SMLoc vdataOperandsLoc; (void)vdataOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rsrcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rsrcOperands(&rsrcRawOperand, 1); ::llvm::SMLoc rsrcOperandsLoc; (void)rsrcOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand soffsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> soffsetOperands(&soffsetRawOperand, 1); ::llvm::SMLoc soffsetOperandsLoc; (void)soffsetOperandsLoc; ::mlir::Attribute auxAttr; ::mlir::Type vdataRawType{}; ::llvm::ArrayRef<::mlir::Type> vdataTypes(&vdataRawType, 1); vdataOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(vdataRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rsrcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rsrcRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); soffsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(soffsetRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, auxAttr); if (odsResult) return ::mlir::failure(); if (auxAttr) result.getOrAddProperties().aux = auxAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); vdataRawType = type; } ::mlir::Type odsBuildableType0 = parser.getBuilder().getType<::mlir::LLVM::LLVMPointerType>(8); ::mlir::Type odsBuildableType1 = parser.getBuilder().getIntegerType(32); if (parser.resolveOperands(vdataOperands, vdataTypes, vdataOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rsrcOperands, odsBuildableType0, rsrcOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, odsBuildableType1, offsetOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(soffsetOperands, odsBuildableType1, soffsetOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void RawPtrBufferStoreOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getVdata(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRsrc(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSoffset(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getAuxAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("aux"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getAuxAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("aux"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getVdata().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void RawPtrBufferStoreOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(1); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Write::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> RawPtrBufferStoreOp::getAccessedOperands() { return {getRsrc()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::RawPtrBufferStoreOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::RawPtrBufferStoreOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ReadfirstlaneOp definitions //===----------------------------------------------------------------------===// namespace detail { ReadfirstlaneOpGenericAdaptorBase::ReadfirstlaneOpGenericAdaptorBase(ReadfirstlaneOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ReadfirstlaneOpAdaptor::ReadfirstlaneOpAdaptor(ReadfirstlaneOp op) : ReadfirstlaneOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ReadfirstlaneOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ReadfirstlaneOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ReadfirstlaneOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ReadfirstlaneOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ReadfirstlaneOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ReadfirstlaneOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ReadfirstlaneOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ReadfirstlaneOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ReadfirstlaneOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src) { odsState.addOperands(src); odsState.addTypes(res); } ReadfirstlaneOp ReadfirstlaneOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ReadfirstlaneOp ReadfirstlaneOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src)); } void ReadfirstlaneOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src) { odsState.addOperands(src); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ReadfirstlaneOp ReadfirstlaneOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ReadfirstlaneOp ReadfirstlaneOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src)); } void ReadfirstlaneOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ReadfirstlaneOp ReadfirstlaneOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ReadfirstlaneOp ReadfirstlaneOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ReadfirstlaneOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ReadfirstlaneOp ReadfirstlaneOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ReadfirstlaneOp ReadfirstlaneOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ReadfirstlaneOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, src} have same type"); return ::mlir::success(); } ::llvm::LogicalResult ReadfirstlaneOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ReadfirstlaneOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand srcRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> srcOperands(&srcRawOperand, 1); ::llvm::SMLoc srcOperandsLoc; (void)srcOperandsLoc; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); srcOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(srcRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(srcOperands, resTypes[0], srcOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ReadfirstlaneOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getSrc(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ReadfirstlaneOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ReadlaneOp definitions //===----------------------------------------------------------------------===// namespace detail { ReadlaneOpGenericAdaptorBase::ReadlaneOpGenericAdaptorBase(ReadlaneOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ReadlaneOpAdaptor::ReadlaneOpAdaptor(ReadlaneOp op) : ReadlaneOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ReadlaneOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ReadlaneOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ReadlaneOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ReadlaneOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ReadlaneOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ReadlaneOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ReadlaneOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ReadlaneOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ReadlaneOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1) { odsState.addOperands(src0); odsState.addOperands(src1); odsState.addTypes(res); } ReadlaneOp ReadlaneOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(src0), std::forward(src1)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ReadlaneOp ReadlaneOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value src0, ::mlir::Value src1) { return create(builder, builder.getLoc(), std::forward(res), std::forward(src0), std::forward(src1)); } void ReadlaneOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1) { odsState.addOperands(src0); odsState.addOperands(src1); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ReadlaneOp ReadlaneOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(src0), std::forward(src1)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ReadlaneOp ReadlaneOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value src0, ::mlir::Value src1) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(src0), std::forward(src1)); } void ReadlaneOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ReadlaneOp ReadlaneOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ReadlaneOp ReadlaneOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ReadlaneOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ReadlaneOp ReadlaneOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ReadlaneOp ReadlaneOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ReadlaneOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType()) && ((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {res, src0} have same type"); return ::mlir::success(); } ::llvm::LogicalResult ReadlaneOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ReadlaneOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand src0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src0Operands(&src0RawOperand, 1); ::llvm::SMLoc src0OperandsLoc; (void)src0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand src1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> src1Operands(&src1RawOperand, 1); ::llvm::SMLoc src1OperandsLoc; (void)src1OperandsLoc; ::mlir::Type src0RawType{}; ::llvm::ArrayRef<::mlir::Type> src0Types(&src0RawType, 1); ::mlir::Type src1RawType{}; ::llvm::ArrayRef<::mlir::Type> src1Types(&src1RawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); src0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); src1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(src1RawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseLParen()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); src0RawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::IntegerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); src1RawType = type; } if (parser.parseRParen()) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(src0Operands, src0Types, src0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(src1Operands, src1Types, src1OperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ReadlaneOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getSrc0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getSrc1(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' ' << "("; { auto type = getSrc0().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getSrc1().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::IntegerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ")"; _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ReadlaneOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::SBarrierOp definitions //===----------------------------------------------------------------------===// namespace detail { SBarrierOpGenericAdaptorBase::SBarrierOpGenericAdaptorBase(SBarrierOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail SBarrierOpAdaptor::SBarrierOpAdaptor(SBarrierOp op) : SBarrierOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult SBarrierOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult SBarrierOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute SBarrierOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code SBarrierOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional SBarrierOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void SBarrierOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void SBarrierOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult SBarrierOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void SBarrierOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState) { } SBarrierOp SBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SBarrierOp SBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder) { return create(builder, builder.getLoc()); } void SBarrierOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes) { assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SBarrierOp SBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SBarrierOp SBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes) { return create(builder, builder.getLoc(), std::forward(resultTypes)); } void SBarrierOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } SBarrierOp SBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SBarrierOp SBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void SBarrierOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } SBarrierOp SBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SBarrierOp SBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult SBarrierOp::verifyInvariantsImpl() { return ::mlir::success(); } ::llvm::LogicalResult SBarrierOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult SBarrierOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void SBarrierOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::SBarrierOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::SNopOp definitions //===----------------------------------------------------------------------===// namespace detail { SNopOpGenericAdaptorBase::SNopOpGenericAdaptorBase(SNopOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t SNopOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail SNopOpAdaptor::SNopOpAdaptor(SNopOp op) : SNopOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult SNopOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.s.nop' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.nop' op attribute 'count' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult SNopOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute SNopOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code SNopOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional SNopOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void SNopOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void SNopOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult SNopOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult SNopOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void SNopOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint16_t SNopOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void SNopOp::setCount(uint16_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void SNopOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } SNopOp SNopOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SNopOp SNopOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void SNopOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SNopOp SNopOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SNopOp SNopOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void SNopOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); } SNopOp SNopOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SNopOp SNopOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void SNopOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SNopOp SNopOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SNopOp SNopOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void SNopOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } SNopOp SNopOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SNopOp SNopOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void SNopOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } SNopOp SNopOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SNopOp SNopOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult SNopOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult SNopOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult SNopOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; return ::mlir::success(); } void SNopOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::SNopOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::SNopOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::SSleepOp definitions //===----------------------------------------------------------------------===// namespace detail { SSleepOpGenericAdaptorBase::SSleepOpGenericAdaptorBase(SSleepOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t SSleepOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail SSleepOpAdaptor::SSleepOpAdaptor(SSleepOp op) : SSleepOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult SSleepOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.s.sleep' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.s.sleep' op attribute 'count' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult SSleepOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute SSleepOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code SSleepOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional SSleepOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void SSleepOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void SSleepOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult SSleepOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult SSleepOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void SSleepOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint32_t SSleepOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void SSleepOp::setCount(uint32_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void SSleepOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } SSleepOp SSleepOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SSleepOp SSleepOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void SSleepOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SSleepOp SSleepOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SSleepOp SSleepOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void SSleepOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint32_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), count); } SSleepOp SSleepOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint32_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SSleepOp SSleepOp::create(::mlir::ImplicitLocOpBuilder &builder, uint32_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void SSleepOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint32_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SSleepOp SSleepOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint32_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SSleepOp SSleepOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint32_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void SSleepOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } SSleepOp SSleepOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SSleepOp SSleepOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void SSleepOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } SSleepOp SSleepOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SSleepOp SSleepOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult SSleepOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult SSleepOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult SSleepOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; return ::mlir::success(); } void SSleepOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::SSleepOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::SSleepOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::SWaitcntOp definitions //===----------------------------------------------------------------------===// namespace detail { SWaitcntOpGenericAdaptorBase::SWaitcntOpGenericAdaptorBase(SWaitcntOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t SWaitcntOpGenericAdaptorBase::getBitfield() { auto attr = getBitfieldAttr(); return attr.getValue().getZExtValue(); } } // namespace detail SWaitcntOpAdaptor::SWaitcntOpAdaptor(SWaitcntOp op) : SWaitcntOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult SWaitcntOpAdaptor::verify(::mlir::Location loc) { auto tblgen_bitfield = getProperties().bitfield; (void)tblgen_bitfield; if (!tblgen_bitfield) return emitError(loc, "'rocdl.s.waitcnt' op requires attribute 'bitfield'"); if (tblgen_bitfield && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_bitfield))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_bitfield).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.s.waitcnt' op attribute 'bitfield' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult SWaitcntOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.bitfield; auto attr = dict.get("bitfield"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `bitfield` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute SWaitcntOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.bitfield; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("bitfield", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code SWaitcntOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.bitfield.getAsOpaquePointer())); } std::optional SWaitcntOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "bitfield") return prop.bitfield; return std::nullopt; } void SWaitcntOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "bitfield") { prop.bitfield = ::llvm::dyn_cast_or_null>(value); return; } } void SWaitcntOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.bitfield) attrs.append("bitfield", prop.bitfield); } ::llvm::LogicalResult SWaitcntOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBitfieldAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "bitfield", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult SWaitcntOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.bitfield))) return ::mlir::failure(); return ::mlir::success(); } void SWaitcntOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.bitfield); } uint32_t SWaitcntOp::getBitfield() { auto attr = getBitfieldAttr(); return attr.getValue().getZExtValue(); } void SWaitcntOp::setBitfield(uint32_t attrValue) { getProperties().bitfield = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void SWaitcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr bitfield) { odsState.getOrAddProperties().bitfield = bitfield; } SWaitcntOp SWaitcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr bitfield) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(bitfield)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SWaitcntOp SWaitcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr bitfield) { return create(builder, builder.getLoc(), std::forward(bitfield)); } void SWaitcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr bitfield) { odsState.getOrAddProperties().bitfield = bitfield; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SWaitcntOp SWaitcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr bitfield) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(bitfield)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SWaitcntOp SWaitcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr bitfield) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(bitfield)); } void SWaitcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint32_t bitfield) { odsState.getOrAddProperties().bitfield = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), bitfield); } SWaitcntOp SWaitcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint32_t bitfield) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(bitfield)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SWaitcntOp SWaitcntOp::create(::mlir::ImplicitLocOpBuilder &builder, uint32_t bitfield) { return create(builder, builder.getLoc(), std::forward(bitfield)); } void SWaitcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint32_t bitfield) { odsState.getOrAddProperties().bitfield = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), bitfield); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SWaitcntOp SWaitcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint32_t bitfield) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(bitfield)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SWaitcntOp SWaitcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint32_t bitfield) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(bitfield)); } void SWaitcntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } SWaitcntOp SWaitcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SWaitcntOp SWaitcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void SWaitcntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } SWaitcntOp SWaitcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SWaitcntOp SWaitcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult SWaitcntOp::verifyInvariantsImpl() { auto tblgen_bitfield = getProperties().bitfield; (void)tblgen_bitfield; if (!tblgen_bitfield) return emitOpError("requires attribute 'bitfield'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_bitfield, "bitfield"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult SWaitcntOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult SWaitcntOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr bitfieldAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseCustomAttributeWithFallback(bitfieldAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (bitfieldAttr) result.getOrAddProperties().bitfield = bitfieldAttr; return ::mlir::success(); } void SWaitcntOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("bitfield"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getBitfieldAttr()); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::SWaitcntOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::SWaitcntOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::SchedBarrier definitions //===----------------------------------------------------------------------===// namespace detail { SchedBarrierGenericAdaptorBase::SchedBarrierGenericAdaptorBase(SchedBarrier op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::SchedGroupMask SchedBarrierGenericAdaptorBase::getMask() { auto attr = getMaskAttr(); return attr.getValue(); } } // namespace detail SchedBarrierAdaptor::SchedBarrierAdaptor(SchedBarrier op) : SchedBarrierGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult SchedBarrierAdaptor::verify(::mlir::Location loc) { auto tblgen_mask = getProperties().mask; (void)tblgen_mask; if (!tblgen_mask) return emitError(loc, "'rocdl.sched.barrier' op requires attribute 'mask'"); if (tblgen_mask && !((::llvm::isa<::mlir::ROCDL::SchedGroupMaskAttr>(tblgen_mask)))) return emitError(loc, "'rocdl.sched.barrier' op attribute 'mask' failed to satisfy constraint: instruction type mask for scheduling barriers"); return ::mlir::success(); } ::llvm::LogicalResult SchedBarrier::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.mask; auto attr = dict.get("mask"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `mask` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute SchedBarrier::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.mask; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("mask", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code SchedBarrier::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.mask.getAsOpaquePointer())); } std::optional SchedBarrier::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "mask") return prop.mask; return std::nullopt; } void SchedBarrier::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "mask") { prop.mask = ::llvm::dyn_cast_or_null>(value); return; } } void SchedBarrier::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.mask) attrs.append("mask", prop.mask); } ::llvm::LogicalResult SchedBarrier::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getMaskAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps12(attr, "mask", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult SchedBarrier::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.mask))) return ::mlir::failure(); return ::mlir::success(); } void SchedBarrier::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.mask); } ::mlir::ROCDL::SchedGroupMask SchedBarrier::getMask() { auto attr = getMaskAttr(); return attr.getValue(); } void SchedBarrier::setMask(::mlir::ROCDL::SchedGroupMask attrValue) { getProperties().mask = ::mlir::ROCDL::SchedGroupMaskAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void SchedBarrier::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ROCDL::SchedGroupMaskAttr mask) { odsState.getOrAddProperties().mask = mask; } SchedBarrier SchedBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ROCDL::SchedGroupMaskAttr mask) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(mask)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedBarrier SchedBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ROCDL::SchedGroupMaskAttr mask) { return create(builder, builder.getLoc(), std::forward(mask)); } void SchedBarrier::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMaskAttr mask) { odsState.getOrAddProperties().mask = mask; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SchedBarrier SchedBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMaskAttr mask) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(mask)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedBarrier SchedBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMaskAttr mask) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(mask)); } void SchedBarrier::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ROCDL::SchedGroupMask mask) { odsState.getOrAddProperties().mask = ::mlir::ROCDL::SchedGroupMaskAttr::get(odsBuilder.getContext(), mask); } SchedBarrier SchedBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ROCDL::SchedGroupMask mask) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(mask)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedBarrier SchedBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ROCDL::SchedGroupMask mask) { return create(builder, builder.getLoc(), std::forward(mask)); } void SchedBarrier::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMask mask) { odsState.getOrAddProperties().mask = ::mlir::ROCDL::SchedGroupMaskAttr::get(odsBuilder.getContext(), mask); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SchedBarrier SchedBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMask mask) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(mask)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedBarrier SchedBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMask mask) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(mask)); } void SchedBarrier::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } SchedBarrier SchedBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedBarrier SchedBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void SchedBarrier::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } SchedBarrier SchedBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedBarrier SchedBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult SchedBarrier::verifyInvariantsImpl() { auto tblgen_mask = getProperties().mask; (void)tblgen_mask; if (!tblgen_mask) return emitOpError("requires attribute 'mask'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps12(*this, tblgen_mask, "mask"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult SchedBarrier::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult SchedBarrier::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::ROCDL::SchedGroupMaskAttr maskAttr; if (parser.parseCustomAttributeWithFallback(maskAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (maskAttr) result.getOrAddProperties().mask = maskAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void SchedBarrier::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getMaskAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("mask"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::SchedBarrier) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::SchedBarrierGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::SchedGroupBarrier definitions //===----------------------------------------------------------------------===// namespace detail { SchedGroupBarrierGenericAdaptorBase::SchedGroupBarrierGenericAdaptorBase(SchedGroupBarrier op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::SchedGroupMask SchedGroupBarrierGenericAdaptorBase::getMask() { auto attr = getMaskAttr(); return attr.getValue(); } uint32_t SchedGroupBarrierGenericAdaptorBase::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t SchedGroupBarrierGenericAdaptorBase::getGroupId() { auto attr = getGroupIdAttr(); return attr.getValue().getZExtValue(); } } // namespace detail SchedGroupBarrierAdaptor::SchedGroupBarrierAdaptor(SchedGroupBarrier op) : SchedGroupBarrierGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult SchedGroupBarrierAdaptor::verify(::mlir::Location loc) { auto tblgen_groupId = getProperties().groupId; (void)tblgen_groupId; if (!tblgen_groupId) return emitError(loc, "'rocdl.sched.group.barrier' op requires attribute 'groupId'"); auto tblgen_mask = getProperties().mask; (void)tblgen_mask; if (!tblgen_mask) return emitError(loc, "'rocdl.sched.group.barrier' op requires attribute 'mask'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitError(loc, "'rocdl.sched.group.barrier' op requires attribute 'size'"); if (tblgen_mask && !((::llvm::isa<::mlir::ROCDL::SchedGroupMaskAttr>(tblgen_mask)))) return emitError(loc, "'rocdl.sched.group.barrier' op attribute 'mask' failed to satisfy constraint: instruction type mask for scheduling barriers"); if (tblgen_size && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_size))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_size).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.sched.group.barrier' op attribute 'size' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_groupId && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_groupId))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_groupId).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.sched.group.barrier' op attribute 'groupId' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult SchedGroupBarrier::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.groupId; auto attr = dict.get("groupId"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `groupId` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.mask; auto attr = dict.get("mask"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `mask` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.size; auto attr = dict.get("size"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `size` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute SchedGroupBarrier::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.groupId; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("groupId", propStorage)); } { const auto &propStorage = prop.mask; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("mask", propStorage)); } { const auto &propStorage = prop.size; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("size", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code SchedGroupBarrier::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.groupId.getAsOpaquePointer()), llvm::hash_value(prop.mask.getAsOpaquePointer()), llvm::hash_value(prop.size.getAsOpaquePointer())); } std::optional SchedGroupBarrier::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "groupId") return prop.groupId; if (name == "mask") return prop.mask; if (name == "size") return prop.size; return std::nullopt; } void SchedGroupBarrier::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "groupId") { prop.groupId = ::llvm::dyn_cast_or_null>(value); return; } if (name == "mask") { prop.mask = ::llvm::dyn_cast_or_null>(value); return; } if (name == "size") { prop.size = ::llvm::dyn_cast_or_null>(value); return; } } void SchedGroupBarrier::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.groupId) attrs.append("groupId", prop.groupId); if (prop.mask) attrs.append("mask", prop.mask); if (prop.size) attrs.append("size", prop.size); } ::llvm::LogicalResult SchedGroupBarrier::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getGroupIdAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "groupId", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getMaskAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps12(attr, "mask", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSizeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "size", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult SchedGroupBarrier::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.groupId))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.mask))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.size))) return ::mlir::failure(); return ::mlir::success(); } void SchedGroupBarrier::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.groupId); writer.writeAttribute(prop.mask); writer.writeAttribute(prop.size); } ::mlir::ROCDL::SchedGroupMask SchedGroupBarrier::getMask() { auto attr = getMaskAttr(); return attr.getValue(); } uint32_t SchedGroupBarrier::getSize() { auto attr = getSizeAttr(); return attr.getValue().getZExtValue(); } uint32_t SchedGroupBarrier::getGroupId() { auto attr = getGroupIdAttr(); return attr.getValue().getZExtValue(); } void SchedGroupBarrier::setMask(::mlir::ROCDL::SchedGroupMask attrValue) { getProperties().mask = ::mlir::ROCDL::SchedGroupMaskAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void SchedGroupBarrier::setSize(uint32_t attrValue) { getProperties().size = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void SchedGroupBarrier::setGroupId(uint32_t attrValue) { getProperties().groupId = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void SchedGroupBarrier::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ROCDL::SchedGroupMaskAttr mask, ::mlir::IntegerAttr size, ::mlir::IntegerAttr groupId) { odsState.getOrAddProperties().mask = mask; odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().groupId = groupId; } SchedGroupBarrier SchedGroupBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ROCDL::SchedGroupMaskAttr mask, ::mlir::IntegerAttr size, ::mlir::IntegerAttr groupId) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(mask), std::forward(size), std::forward(groupId)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedGroupBarrier SchedGroupBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ROCDL::SchedGroupMaskAttr mask, ::mlir::IntegerAttr size, ::mlir::IntegerAttr groupId) { return create(builder, builder.getLoc(), std::forward(mask), std::forward(size), std::forward(groupId)); } void SchedGroupBarrier::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMaskAttr mask, ::mlir::IntegerAttr size, ::mlir::IntegerAttr groupId) { odsState.getOrAddProperties().mask = mask; odsState.getOrAddProperties().size = size; odsState.getOrAddProperties().groupId = groupId; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SchedGroupBarrier SchedGroupBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMaskAttr mask, ::mlir::IntegerAttr size, ::mlir::IntegerAttr groupId) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(mask), std::forward(size), std::forward(groupId)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedGroupBarrier SchedGroupBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMaskAttr mask, ::mlir::IntegerAttr size, ::mlir::IntegerAttr groupId) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(mask), std::forward(size), std::forward(groupId)); } void SchedGroupBarrier::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ROCDL::SchedGroupMask mask, uint32_t size, uint32_t groupId) { odsState.getOrAddProperties().mask = ::mlir::ROCDL::SchedGroupMaskAttr::get(odsBuilder.getContext(), mask); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().groupId = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), groupId); } SchedGroupBarrier SchedGroupBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ROCDL::SchedGroupMask mask, uint32_t size, uint32_t groupId) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(mask), std::forward(size), std::forward(groupId)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedGroupBarrier SchedGroupBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ROCDL::SchedGroupMask mask, uint32_t size, uint32_t groupId) { return create(builder, builder.getLoc(), std::forward(mask), std::forward(size), std::forward(groupId)); } void SchedGroupBarrier::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMask mask, uint32_t size, uint32_t groupId) { odsState.getOrAddProperties().mask = ::mlir::ROCDL::SchedGroupMaskAttr::get(odsBuilder.getContext(), mask); odsState.getOrAddProperties().size = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), size); odsState.getOrAddProperties().groupId = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), groupId); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SchedGroupBarrier SchedGroupBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMask mask, uint32_t size, uint32_t groupId) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(mask), std::forward(size), std::forward(groupId)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedGroupBarrier SchedGroupBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::SchedGroupMask mask, uint32_t size, uint32_t groupId) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(mask), std::forward(size), std::forward(groupId)); } void SchedGroupBarrier::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } SchedGroupBarrier SchedGroupBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedGroupBarrier SchedGroupBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void SchedGroupBarrier::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } SchedGroupBarrier SchedGroupBarrier::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SchedGroupBarrier SchedGroupBarrier::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult SchedGroupBarrier::verifyInvariantsImpl() { auto tblgen_groupId = getProperties().groupId; (void)tblgen_groupId; if (!tblgen_groupId) return emitOpError("requires attribute 'groupId'"); auto tblgen_mask = getProperties().mask; (void)tblgen_mask; if (!tblgen_mask) return emitOpError("requires attribute 'mask'"); auto tblgen_size = getProperties().size; (void)tblgen_size; if (!tblgen_size) return emitOpError("requires attribute 'size'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps12(*this, tblgen_mask, "mask"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_size, "size"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_groupId, "groupId"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult SchedGroupBarrier::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult SchedGroupBarrier::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::ROCDL::SchedGroupMaskAttr maskAttr; ::mlir::IntegerAttr sizeAttr; ::mlir::IntegerAttr groupIdAttr; if (parser.parseCustomAttributeWithFallback(maskAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (maskAttr) result.getOrAddProperties().mask = maskAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(sizeAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (sizeAttr) result.getOrAddProperties().size = sizeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(groupIdAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (groupIdAttr) result.getOrAddProperties().groupId = groupIdAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void SchedGroupBarrier::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getMaskAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getSizeAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getGroupIdAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("mask"); elidedAttrs.push_back("size"); elidedAttrs.push_back("groupId"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::SchedGroupBarrier) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::SchedGroupBarrierGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::SetPrioOp definitions //===----------------------------------------------------------------------===// namespace detail { SetPrioOpGenericAdaptorBase::SetPrioOpGenericAdaptorBase(SetPrioOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t SetPrioOpGenericAdaptorBase::getPriority() { auto attr = getPriorityAttr(); return attr.getValue().getZExtValue(); } } // namespace detail SetPrioOpAdaptor::SetPrioOpAdaptor(SetPrioOp op) : SetPrioOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult SetPrioOpAdaptor::verify(::mlir::Location loc) { auto tblgen_priority = getProperties().priority; (void)tblgen_priority; if (!tblgen_priority) return emitError(loc, "'rocdl.s.setprio' op requires attribute 'priority'"); if (tblgen_priority && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_priority))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_priority).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.setprio' op attribute 'priority' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult SetPrioOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.priority; auto attr = dict.get("priority"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `priority` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute SetPrioOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.priority; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("priority", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code SetPrioOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.priority.getAsOpaquePointer())); } std::optional SetPrioOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "priority") return prop.priority; return std::nullopt; } void SetPrioOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "priority") { prop.priority = ::llvm::dyn_cast_or_null>(value); return; } } void SetPrioOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.priority) attrs.append("priority", prop.priority); } ::llvm::LogicalResult SetPrioOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getPriorityAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "priority", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult SetPrioOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.priority))) return ::mlir::failure(); return ::mlir::success(); } void SetPrioOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.priority); } uint16_t SetPrioOp::getPriority() { auto attr = getPriorityAttr(); return attr.getValue().getZExtValue(); } void SetPrioOp::setPriority(uint16_t attrValue) { getProperties().priority = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void SetPrioOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr priority) { odsState.getOrAddProperties().priority = priority; } SetPrioOp SetPrioOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr priority) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(priority)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SetPrioOp SetPrioOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr priority) { return create(builder, builder.getLoc(), std::forward(priority)); } void SetPrioOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr priority) { odsState.getOrAddProperties().priority = priority; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SetPrioOp SetPrioOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr priority) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(priority)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SetPrioOp SetPrioOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr priority) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(priority)); } void SetPrioOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t priority) { odsState.getOrAddProperties().priority = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), priority); } SetPrioOp SetPrioOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t priority) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(priority)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SetPrioOp SetPrioOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t priority) { return create(builder, builder.getLoc(), std::forward(priority)); } void SetPrioOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t priority) { odsState.getOrAddProperties().priority = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), priority); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } SetPrioOp SetPrioOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t priority) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(priority)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SetPrioOp SetPrioOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t priority) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(priority)); } void SetPrioOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } SetPrioOp SetPrioOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SetPrioOp SetPrioOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void SetPrioOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } SetPrioOp SetPrioOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } SetPrioOp SetPrioOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult SetPrioOp::verifyInvariantsImpl() { auto tblgen_priority = getProperties().priority; (void)tblgen_priority; if (!tblgen_priority) return emitOpError("requires attribute 'priority'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_priority, "priority"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult SetPrioOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult SetPrioOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr priorityAttr; if (parser.parseCustomAttributeWithFallback(priorityAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (priorityAttr) result.getOrAddProperties().priority = priorityAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void SetPrioOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getPriorityAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("priority"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::SetPrioOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::SetPrioOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::TensorLoadToLDSOp definitions //===----------------------------------------------------------------------===// namespace detail { TensorLoadToLDSOpGenericAdaptorBase::TensorLoadToLDSOpGenericAdaptorBase(TensorLoadToLDSOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute TensorLoadToLDSOpGenericAdaptorBase::getCachePolicyAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().cachePolicy); return attr; } ::mlir::Attribute TensorLoadToLDSOpGenericAdaptorBase::getCachePolicy() { auto attr = getCachePolicyAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > TensorLoadToLDSOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > TensorLoadToLDSOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > TensorLoadToLDSOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail TensorLoadToLDSOpAdaptor::TensorLoadToLDSOpAdaptor(TensorLoadToLDSOp op) : TensorLoadToLDSOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult TensorLoadToLDSOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cachePolicy = getProperties().cachePolicy; (void)tblgen_cachePolicy; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_cachePolicy && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_cachePolicy))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_cachePolicy))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cachePolicy).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.tensor.load.to.lds' op attribute 'cachePolicy' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.tensor.load.to.lds' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.tensor.load.to.lds' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.tensor.load.to.lds' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult TensorLoadToLDSOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cachePolicy; auto attr = dict.get("cachePolicy"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cachePolicy` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute TensorLoadToLDSOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.cachePolicy; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cachePolicy", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code TensorLoadToLDSOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.cachePolicy.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional TensorLoadToLDSOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "cachePolicy") return prop.cachePolicy; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void TensorLoadToLDSOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cachePolicy") { prop.cachePolicy = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void TensorLoadToLDSOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.cachePolicy) attrs.append("cachePolicy", prop.cachePolicy); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult TensorLoadToLDSOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCachePolicyAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "cachePolicy", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult TensorLoadToLDSOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.cachePolicy))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void TensorLoadToLDSOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.cachePolicy); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute TensorLoadToLDSOp::getCachePolicy() { auto attr = getCachePolicyAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > TensorLoadToLDSOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > TensorLoadToLDSOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > TensorLoadToLDSOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void TensorLoadToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(dgroup0); odsState.addOperands(dgroup1); odsState.addOperands(dgroup2); odsState.addOperands(dgroup3); odsState.addOperands(dgroup4); if (cachePolicy) { odsState.getOrAddProperties().cachePolicy = cachePolicy; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } TensorLoadToLDSOp TensorLoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(dgroup0), std::forward(dgroup1), std::forward(dgroup2), std::forward(dgroup3), std::forward(dgroup4), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TensorLoadToLDSOp TensorLoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(dgroup0), std::forward(dgroup1), std::forward(dgroup2), std::forward(dgroup3), std::forward(dgroup4), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void TensorLoadToLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(dgroup0); odsState.addOperands(dgroup1); odsState.addOperands(dgroup2); odsState.addOperands(dgroup3); odsState.addOperands(dgroup4); if (cachePolicy) { odsState.getOrAddProperties().cachePolicy = cachePolicy; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } TensorLoadToLDSOp TensorLoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(dgroup0), std::forward(dgroup1), std::forward(dgroup2), std::forward(dgroup3), std::forward(dgroup4), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TensorLoadToLDSOp TensorLoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(dgroup0), std::forward(dgroup1), std::forward(dgroup2), std::forward(dgroup3), std::forward(dgroup4), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void TensorLoadToLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } TensorLoadToLDSOp TensorLoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TensorLoadToLDSOp TensorLoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void TensorLoadToLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } TensorLoadToLDSOp TensorLoadToLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TensorLoadToLDSOp TensorLoadToLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void TensorLoadToLDSOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.cachePolicy) properties.cachePolicy = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult TensorLoadToLDSOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cachePolicy = getProperties().cachePolicy; (void)tblgen_cachePolicy; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_cachePolicy, "cachePolicy"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult TensorLoadToLDSOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult TensorLoadToLDSOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand dgroup0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup0Operands(&dgroup0RawOperand, 1); ::llvm::SMLoc dgroup0OperandsLoc; (void)dgroup0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand dgroup1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup1Operands(&dgroup1RawOperand, 1); ::llvm::SMLoc dgroup1OperandsLoc; (void)dgroup1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand dgroup2RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup2Operands(&dgroup2RawOperand, 1); ::llvm::SMLoc dgroup2OperandsLoc; (void)dgroup2OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand dgroup3RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup3Operands(&dgroup3RawOperand, 1); ::llvm::SMLoc dgroup3OperandsLoc; (void)dgroup3OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand dgroup4RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup4Operands(&dgroup4RawOperand, 1); ::llvm::SMLoc dgroup4OperandsLoc; (void)dgroup4OperandsLoc; ::mlir::Attribute cachePolicyAttr; ::mlir::Type dgroup0RawType{}; ::llvm::ArrayRef<::mlir::Type> dgroup0Types(&dgroup0RawType, 1); ::mlir::Type dgroup1RawType{}; ::llvm::ArrayRef<::mlir::Type> dgroup1Types(&dgroup1RawType, 1); dgroup0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); dgroup1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); dgroup2OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup2RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); dgroup3OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup3RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); dgroup4OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup4RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, cachePolicyAttr); if (odsResult) return ::mlir::failure(); if (cachePolicyAttr) result.getOrAddProperties().cachePolicy = cachePolicyAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); dgroup0RawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); dgroup1RawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({4} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({8} ,parser.getBuilder().getIntegerType(32)); if (parser.resolveOperands(dgroup0Operands, dgroup0Types, dgroup0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(dgroup1Operands, dgroup1Types, dgroup1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(dgroup2Operands, odsBuildableType0, dgroup2OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(dgroup3Operands, odsBuildableType0, dgroup3OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(dgroup4Operands, odsBuildableType1, dgroup4OperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void TensorLoadToLDSOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getDgroup0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getDgroup1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getDgroup2(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getDgroup3(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getDgroup4(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getCachePolicyAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cachePolicy"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getCachePolicyAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("cachePolicy"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getDgroup0().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getDgroup1().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } SmallVector TensorLoadToLDSOp::getAccessedOperands() { return {getDgroup0(), getDgroup1(), getDgroup2(), getDgroup3()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::TensorLoadToLDSOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::TensorLoadToLDSOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::TensorStoreFromLDSOp definitions //===----------------------------------------------------------------------===// namespace detail { TensorStoreFromLDSOpGenericAdaptorBase::TensorStoreFromLDSOpGenericAdaptorBase(TensorStoreFromLDSOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Attribute TensorStoreFromLDSOpGenericAdaptorBase::getCachePolicyAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::Attribute>(getProperties().cachePolicy); return attr; } ::mlir::Attribute TensorStoreFromLDSOpGenericAdaptorBase::getCachePolicy() { auto attr = getCachePolicyAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > TensorStoreFromLDSOpGenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > TensorStoreFromLDSOpGenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > TensorStoreFromLDSOpGenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail TensorStoreFromLDSOpAdaptor::TensorStoreFromLDSOpAdaptor(TensorStoreFromLDSOp op) : TensorStoreFromLDSOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult TensorStoreFromLDSOpAdaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cachePolicy = getProperties().cachePolicy; (void)tblgen_cachePolicy; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_cachePolicy && !(((::llvm::isa<::mlir::ROCDL::Gfx12CachePolicyAttr>(tblgen_cachePolicy))) || (((::llvm::isa<::mlir::IntegerAttr>(tblgen_cachePolicy))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cachePolicy).getType().isSignlessInteger(32)))))) return emitError(loc, "'rocdl.tensor.store.from.lds' op attribute 'cachePolicy' failed to satisfy constraint: gfx12 non-atomic AMDGPU cache policy attribute"); if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.tensor.store.from.lds' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.tensor.store.from.lds' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.tensor.store.from.lds' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult TensorStoreFromLDSOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cachePolicy; auto attr = dict.get("cachePolicy"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cachePolicy` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute TensorStoreFromLDSOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.cachePolicy; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cachePolicy", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code TensorStoreFromLDSOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.cachePolicy.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional TensorStoreFromLDSOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "cachePolicy") return prop.cachePolicy; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void TensorStoreFromLDSOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cachePolicy") { prop.cachePolicy = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void TensorStoreFromLDSOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.cachePolicy) attrs.append("cachePolicy", prop.cachePolicy); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult TensorStoreFromLDSOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCachePolicyAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(attr, "cachePolicy", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult TensorStoreFromLDSOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.cachePolicy))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void TensorStoreFromLDSOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.cachePolicy); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::mlir::Attribute TensorStoreFromLDSOp::getCachePolicy() { auto attr = getCachePolicyAttr(); return attr; } ::std::optional< ::mlir::ArrayAttr > TensorStoreFromLDSOp::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > TensorStoreFromLDSOp::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > TensorStoreFromLDSOp::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void TensorStoreFromLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(dgroup0); odsState.addOperands(dgroup1); odsState.addOperands(dgroup2); odsState.addOperands(dgroup3); odsState.addOperands(dgroup4); if (cachePolicy) { odsState.getOrAddProperties().cachePolicy = cachePolicy; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } } TensorStoreFromLDSOp TensorStoreFromLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(dgroup0), std::forward(dgroup1), std::forward(dgroup2), std::forward(dgroup3), std::forward(dgroup4), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TensorStoreFromLDSOp TensorStoreFromLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(dgroup0), std::forward(dgroup1), std::forward(dgroup2), std::forward(dgroup3), std::forward(dgroup4), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void TensorStoreFromLDSOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(dgroup0); odsState.addOperands(dgroup1); odsState.addOperands(dgroup2); odsState.addOperands(dgroup3); odsState.addOperands(dgroup4); if (cachePolicy) { odsState.getOrAddProperties().cachePolicy = cachePolicy; } if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } TensorStoreFromLDSOp TensorStoreFromLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(dgroup0), std::forward(dgroup1), std::forward(dgroup2), std::forward(dgroup3), std::forward(dgroup4), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TensorStoreFromLDSOp TensorStoreFromLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value dgroup0, ::mlir::Value dgroup1, ::mlir::Value dgroup2, ::mlir::Value dgroup3, ::mlir::Value dgroup4, ::mlir::Attribute cachePolicy, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(dgroup0), std::forward(dgroup1), std::forward(dgroup2), std::forward(dgroup3), std::forward(dgroup4), std::forward(cachePolicy), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void TensorStoreFromLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } TensorStoreFromLDSOp TensorStoreFromLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TensorStoreFromLDSOp TensorStoreFromLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void TensorStoreFromLDSOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } TensorStoreFromLDSOp TensorStoreFromLDSOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TensorStoreFromLDSOp TensorStoreFromLDSOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void TensorStoreFromLDSOp::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.cachePolicy) properties.cachePolicy = odsBuilder.getI32IntegerAttr(0); } ::llvm::LogicalResult TensorStoreFromLDSOp::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_cachePolicy = getProperties().cachePolicy; (void)tblgen_cachePolicy; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps4(*this, tblgen_cachePolicy, "cachePolicy"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult TensorStoreFromLDSOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult TensorStoreFromLDSOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand dgroup0RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup0Operands(&dgroup0RawOperand, 1); ::llvm::SMLoc dgroup0OperandsLoc; (void)dgroup0OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand dgroup1RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup1Operands(&dgroup1RawOperand, 1); ::llvm::SMLoc dgroup1OperandsLoc; (void)dgroup1OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand dgroup2RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup2Operands(&dgroup2RawOperand, 1); ::llvm::SMLoc dgroup2OperandsLoc; (void)dgroup2OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand dgroup3RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup3Operands(&dgroup3RawOperand, 1); ::llvm::SMLoc dgroup3OperandsLoc; (void)dgroup3OperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand dgroup4RawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> dgroup4Operands(&dgroup4RawOperand, 1); ::llvm::SMLoc dgroup4OperandsLoc; (void)dgroup4OperandsLoc; ::mlir::Attribute cachePolicyAttr; ::mlir::Type dgroup0RawType{}; ::llvm::ArrayRef<::mlir::Type> dgroup0Types(&dgroup0RawType, 1); ::mlir::Type dgroup1RawType{}; ::llvm::ArrayRef<::mlir::Type> dgroup1Types(&dgroup1RawType, 1); dgroup0OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup0RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); dgroup1OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup1RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); dgroup2OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup2RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); dgroup3OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup3RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); dgroup4OperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(dgroup4RawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); { auto odsResult = parseCachePolicy(parser, cachePolicyAttr); if (odsResult) return ::mlir::failure(); if (cachePolicyAttr) result.getOrAddProperties().cachePolicy = cachePolicyAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); dgroup0RawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::VectorType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); dgroup1RawType = type; } ::mlir::Type odsBuildableType0 = ::mlir::VectorType::get({4} ,parser.getBuilder().getIntegerType(32)); ::mlir::Type odsBuildableType1 = ::mlir::VectorType::get({8} ,parser.getBuilder().getIntegerType(32)); if (parser.resolveOperands(dgroup0Operands, dgroup0Types, dgroup0OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(dgroup1Operands, dgroup1Types, dgroup1OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(dgroup2Operands, odsBuildableType0, dgroup2OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(dgroup3Operands, odsBuildableType0, dgroup3OperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(dgroup4Operands, odsBuildableType1, dgroup4OperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void TensorStoreFromLDSOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getDgroup0(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getDgroup1(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getDgroup2(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getDgroup3(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getDgroup4(); _odsPrinter << ","; _odsPrinter << ' '; printCachePolicy(_odsPrinter, *this, getCachePolicyAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cachePolicy"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getCachePolicyAttr(); if(attr && (attr == odsBuilder.getI32IntegerAttr(0))) elidedAttrs.push_back("cachePolicy"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getDgroup0().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getDgroup1().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::VectorType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } SmallVector TensorStoreFromLDSOp::getAccessedOperands() { return {getDgroup0(), getDgroup1(), getDgroup2(), getDgroup3()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::TensorStoreFromLDSOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::TensorStoreFromLDSOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ThreadIdXOp definitions //===----------------------------------------------------------------------===// namespace detail { ThreadIdXOpGenericAdaptorBase::ThreadIdXOpGenericAdaptorBase(ThreadIdXOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ThreadIdXOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ThreadIdXOpAdaptor::ThreadIdXOpAdaptor(ThreadIdXOp op) : ThreadIdXOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ThreadIdXOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.workitem.id.x' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ThreadIdXOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ThreadIdXOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ThreadIdXOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ThreadIdXOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ThreadIdXOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ThreadIdXOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ThreadIdXOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ThreadIdXOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ThreadIdXOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ThreadIdXOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ThreadIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ThreadIdXOp ThreadIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdXOp ThreadIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ThreadIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ThreadIdXOp ThreadIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdXOp ThreadIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ThreadIdXOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ThreadIdXOp ThreadIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdXOp ThreadIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ThreadIdXOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ThreadIdXOp ThreadIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdXOp ThreadIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ThreadIdXOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ThreadIdXOp ThreadIdXOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdXOp ThreadIdXOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ThreadIdXOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ThreadIdXOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ThreadIdXOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ThreadIdXOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ThreadIdXOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ThreadIdXOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ThreadIdXOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ThreadIdYOp definitions //===----------------------------------------------------------------------===// namespace detail { ThreadIdYOpGenericAdaptorBase::ThreadIdYOpGenericAdaptorBase(ThreadIdYOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ThreadIdYOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ThreadIdYOpAdaptor::ThreadIdYOpAdaptor(ThreadIdYOp op) : ThreadIdYOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ThreadIdYOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.workitem.id.y' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ThreadIdYOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ThreadIdYOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ThreadIdYOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ThreadIdYOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ThreadIdYOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ThreadIdYOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ThreadIdYOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ThreadIdYOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ThreadIdYOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ThreadIdYOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ThreadIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ThreadIdYOp ThreadIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdYOp ThreadIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ThreadIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ThreadIdYOp ThreadIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdYOp ThreadIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ThreadIdYOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ThreadIdYOp ThreadIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdYOp ThreadIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ThreadIdYOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ThreadIdYOp ThreadIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdYOp ThreadIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ThreadIdYOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ThreadIdYOp ThreadIdYOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdYOp ThreadIdYOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ThreadIdYOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ThreadIdYOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ThreadIdYOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ThreadIdYOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ThreadIdYOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ThreadIdYOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ThreadIdYOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ThreadIdZOp definitions //===----------------------------------------------------------------------===// namespace detail { ThreadIdZOpGenericAdaptorBase::ThreadIdZOpGenericAdaptorBase(ThreadIdZOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> ThreadIdZOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail ThreadIdZOpAdaptor::ThreadIdZOpAdaptor(ThreadIdZOp op) : ThreadIdZOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ThreadIdZOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.workitem.id.z' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult ThreadIdZOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ThreadIdZOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ThreadIdZOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional ThreadIdZOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void ThreadIdZOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void ThreadIdZOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult ThreadIdZOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ThreadIdZOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void ThreadIdZOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> ThreadIdZOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void ThreadIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } ThreadIdZOp ThreadIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdZOp ThreadIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void ThreadIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } ThreadIdZOp ThreadIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdZOp ThreadIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void ThreadIdZOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ThreadIdZOp ThreadIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdZOp ThreadIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void ThreadIdZOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ThreadIdZOp ThreadIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdZOp ThreadIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ThreadIdZOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ThreadIdZOp ThreadIdZOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ThreadIdZOp ThreadIdZOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ThreadIdZOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ThreadIdZOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ThreadIdZOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void ThreadIdZOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ThreadIdZOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ThreadIdZOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ThreadIdZOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaitAsynccntOp definitions //===----------------------------------------------------------------------===// namespace detail { WaitAsynccntOpGenericAdaptorBase::WaitAsynccntOpGenericAdaptorBase(WaitAsynccntOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t WaitAsynccntOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail WaitAsynccntOpAdaptor::WaitAsynccntOpAdaptor(WaitAsynccntOp op) : WaitAsynccntOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaitAsynccntOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.s.wait.asynccnt' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.wait.asynccnt' op attribute 'count' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult WaitAsynccntOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WaitAsynccntOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaitAsynccntOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional WaitAsynccntOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void WaitAsynccntOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void WaitAsynccntOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult WaitAsynccntOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WaitAsynccntOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void WaitAsynccntOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint16_t WaitAsynccntOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void WaitAsynccntOp::setCount(uint16_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void WaitAsynccntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } WaitAsynccntOp WaitAsynccntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsynccntOp WaitAsynccntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitAsynccntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitAsynccntOp WaitAsynccntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsynccntOp WaitAsynccntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitAsynccntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); } WaitAsynccntOp WaitAsynccntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsynccntOp WaitAsynccntOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitAsynccntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitAsynccntOp WaitAsynccntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsynccntOp WaitAsynccntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitAsynccntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WaitAsynccntOp WaitAsynccntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsynccntOp WaitAsynccntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaitAsynccntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaitAsynccntOp WaitAsynccntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsynccntOp WaitAsynccntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaitAsynccntOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult WaitAsynccntOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaitAsynccntOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void WaitAsynccntOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaitAsynccntOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WaitAsynccntOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaitAsyncmarkOp definitions //===----------------------------------------------------------------------===// namespace detail { WaitAsyncmarkOpGenericAdaptorBase::WaitAsyncmarkOpGenericAdaptorBase(WaitAsyncmarkOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t WaitAsyncmarkOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail WaitAsyncmarkOpAdaptor::WaitAsyncmarkOpAdaptor(WaitAsyncmarkOp op) : WaitAsyncmarkOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaitAsyncmarkOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.wait.asyncmark' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.wait.asyncmark' op attribute 'count' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult WaitAsyncmarkOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WaitAsyncmarkOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaitAsyncmarkOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional WaitAsyncmarkOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void WaitAsyncmarkOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void WaitAsyncmarkOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult WaitAsyncmarkOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WaitAsyncmarkOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void WaitAsyncmarkOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint16_t WaitAsyncmarkOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void WaitAsyncmarkOp::setCount(uint16_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void WaitAsyncmarkOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitAsyncmarkOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitAsyncmarkOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitAsyncmarkOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitAsyncmarkOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaitAsyncmarkOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitAsyncmarkOp WaitAsyncmarkOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaitAsyncmarkOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult WaitAsyncmarkOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaitAsyncmarkOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void WaitAsyncmarkOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaitAsyncmarkOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WaitAsyncmarkOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaitDscntOp definitions //===----------------------------------------------------------------------===// namespace detail { WaitDscntOpGenericAdaptorBase::WaitDscntOpGenericAdaptorBase(WaitDscntOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t WaitDscntOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail WaitDscntOpAdaptor::WaitDscntOpAdaptor(WaitDscntOp op) : WaitDscntOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaitDscntOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.s.wait.dscnt' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.wait.dscnt' op attribute 'count' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult WaitDscntOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WaitDscntOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaitDscntOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional WaitDscntOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void WaitDscntOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void WaitDscntOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult WaitDscntOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WaitDscntOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void WaitDscntOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint16_t WaitDscntOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void WaitDscntOp::setCount(uint16_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void WaitDscntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } WaitDscntOp WaitDscntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitDscntOp WaitDscntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitDscntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitDscntOp WaitDscntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitDscntOp WaitDscntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitDscntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); } WaitDscntOp WaitDscntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitDscntOp WaitDscntOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitDscntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitDscntOp WaitDscntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitDscntOp WaitDscntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitDscntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WaitDscntOp WaitDscntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitDscntOp WaitDscntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaitDscntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaitDscntOp WaitDscntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitDscntOp WaitDscntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaitDscntOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult WaitDscntOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaitDscntOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void WaitDscntOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaitDscntOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WaitDscntOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaitExpcntOp definitions //===----------------------------------------------------------------------===// namespace detail { WaitExpcntOpGenericAdaptorBase::WaitExpcntOpGenericAdaptorBase(WaitExpcntOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t WaitExpcntOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail WaitExpcntOpAdaptor::WaitExpcntOpAdaptor(WaitExpcntOp op) : WaitExpcntOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaitExpcntOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.s.wait.expcnt' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.wait.expcnt' op attribute 'count' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult WaitExpcntOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WaitExpcntOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaitExpcntOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional WaitExpcntOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void WaitExpcntOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void WaitExpcntOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult WaitExpcntOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WaitExpcntOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void WaitExpcntOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint16_t WaitExpcntOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void WaitExpcntOp::setCount(uint16_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void WaitExpcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } WaitExpcntOp WaitExpcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitExpcntOp WaitExpcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitExpcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitExpcntOp WaitExpcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitExpcntOp WaitExpcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitExpcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); } WaitExpcntOp WaitExpcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitExpcntOp WaitExpcntOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitExpcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitExpcntOp WaitExpcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitExpcntOp WaitExpcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitExpcntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WaitExpcntOp WaitExpcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitExpcntOp WaitExpcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaitExpcntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaitExpcntOp WaitExpcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitExpcntOp WaitExpcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaitExpcntOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult WaitExpcntOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaitExpcntOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void WaitExpcntOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaitExpcntOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WaitExpcntOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaitLoadcntOp definitions //===----------------------------------------------------------------------===// namespace detail { WaitLoadcntOpGenericAdaptorBase::WaitLoadcntOpGenericAdaptorBase(WaitLoadcntOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t WaitLoadcntOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail WaitLoadcntOpAdaptor::WaitLoadcntOpAdaptor(WaitLoadcntOp op) : WaitLoadcntOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaitLoadcntOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.s.wait.loadcnt' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.wait.loadcnt' op attribute 'count' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult WaitLoadcntOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WaitLoadcntOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaitLoadcntOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional WaitLoadcntOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void WaitLoadcntOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void WaitLoadcntOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult WaitLoadcntOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WaitLoadcntOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void WaitLoadcntOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint16_t WaitLoadcntOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void WaitLoadcntOp::setCount(uint16_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void WaitLoadcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } WaitLoadcntOp WaitLoadcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitLoadcntOp WaitLoadcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitLoadcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitLoadcntOp WaitLoadcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitLoadcntOp WaitLoadcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitLoadcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); } WaitLoadcntOp WaitLoadcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitLoadcntOp WaitLoadcntOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitLoadcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitLoadcntOp WaitLoadcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitLoadcntOp WaitLoadcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitLoadcntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WaitLoadcntOp WaitLoadcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitLoadcntOp WaitLoadcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaitLoadcntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaitLoadcntOp WaitLoadcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitLoadcntOp WaitLoadcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaitLoadcntOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult WaitLoadcntOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaitLoadcntOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void WaitLoadcntOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaitLoadcntOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WaitLoadcntOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaitStorecntOp definitions //===----------------------------------------------------------------------===// namespace detail { WaitStorecntOpGenericAdaptorBase::WaitStorecntOpGenericAdaptorBase(WaitStorecntOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t WaitStorecntOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail WaitStorecntOpAdaptor::WaitStorecntOpAdaptor(WaitStorecntOp op) : WaitStorecntOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaitStorecntOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.s.wait.storecnt' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.wait.storecnt' op attribute 'count' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult WaitStorecntOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WaitStorecntOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaitStorecntOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional WaitStorecntOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void WaitStorecntOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void WaitStorecntOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult WaitStorecntOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WaitStorecntOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void WaitStorecntOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint16_t WaitStorecntOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void WaitStorecntOp::setCount(uint16_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void WaitStorecntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } WaitStorecntOp WaitStorecntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitStorecntOp WaitStorecntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitStorecntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitStorecntOp WaitStorecntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitStorecntOp WaitStorecntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitStorecntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); } WaitStorecntOp WaitStorecntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitStorecntOp WaitStorecntOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitStorecntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitStorecntOp WaitStorecntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitStorecntOp WaitStorecntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitStorecntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WaitStorecntOp WaitStorecntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitStorecntOp WaitStorecntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaitStorecntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaitStorecntOp WaitStorecntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitStorecntOp WaitStorecntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaitStorecntOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult WaitStorecntOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaitStorecntOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void WaitStorecntOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaitStorecntOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WaitStorecntOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaitTensorcntOp definitions //===----------------------------------------------------------------------===// namespace detail { WaitTensorcntOpGenericAdaptorBase::WaitTensorcntOpGenericAdaptorBase(WaitTensorcntOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint16_t WaitTensorcntOpGenericAdaptorBase::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } } // namespace detail WaitTensorcntOpAdaptor::WaitTensorcntOpAdaptor(WaitTensorcntOp op) : WaitTensorcntOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaitTensorcntOpAdaptor::verify(::mlir::Location loc) { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitError(loc, "'rocdl.s.wait.tensorcnt' op requires attribute 'count'"); if (tblgen_count && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_count))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_count).getType().isSignlessInteger(16))))) return emitError(loc, "'rocdl.s.wait.tensorcnt' op attribute 'count' failed to satisfy constraint: 16-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult WaitTensorcntOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.count; auto attr = dict.get("count"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `count` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WaitTensorcntOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.count; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("count", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaitTensorcntOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.count.getAsOpaquePointer())); } std::optional WaitTensorcntOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "count") return prop.count; return std::nullopt; } void WaitTensorcntOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "count") { prop.count = ::llvm::dyn_cast_or_null>(value); return; } } void WaitTensorcntOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.count) attrs.append("count", prop.count); } ::llvm::LogicalResult WaitTensorcntOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getCountAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(attr, "count", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WaitTensorcntOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.count))) return ::mlir::failure(); return ::mlir::success(); } void WaitTensorcntOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.count); } uint16_t WaitTensorcntOp::getCount() { auto attr = getCountAttr(); return attr.getValue().getZExtValue(); } void WaitTensorcntOp::setCount(uint16_t attrValue) { getProperties().count = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(16), attrValue); } void WaitTensorcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; } WaitTensorcntOp WaitTensorcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitTensorcntOp WaitTensorcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitTensorcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { odsState.getOrAddProperties().count = count; assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitTensorcntOp WaitTensorcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitTensorcntOp WaitTensorcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitTensorcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); } WaitTensorcntOp WaitTensorcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitTensorcntOp WaitTensorcntOp::create(::mlir::ImplicitLocOpBuilder &builder, uint16_t count) { return create(builder, builder.getLoc(), std::forward(count)); } void WaitTensorcntOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, uint16_t count) { odsState.getOrAddProperties().count = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(16), count); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaitTensorcntOp WaitTensorcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, uint16_t count) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(count)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitTensorcntOp WaitTensorcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, uint16_t count) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(count)); } void WaitTensorcntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WaitTensorcntOp WaitTensorcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitTensorcntOp WaitTensorcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaitTensorcntOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaitTensorcntOp WaitTensorcntOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaitTensorcntOp WaitTensorcntOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaitTensorcntOp::verifyInvariantsImpl() { auto tblgen_count = getProperties().count; (void)tblgen_count; if (!tblgen_count) return emitOpError("requires attribute 'count'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps2(*this, tblgen_count, "count"))) return ::mlir::failure(); return ::mlir::success(); } ::llvm::LogicalResult WaitTensorcntOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaitTensorcntOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::IntegerAttr countAttr; if (parser.parseCustomAttributeWithFallback(countAttr, parser.getBuilder().getIntegerType(16))) { return ::mlir::failure(); } if (countAttr) result.getOrAddProperties().count = countAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void WaitTensorcntOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCountAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("count"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaitTensorcntOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WaitTensorcntOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WakeupBarrierOp definitions //===----------------------------------------------------------------------===// namespace detail { WakeupBarrierOpGenericAdaptorBase::WakeupBarrierOpGenericAdaptorBase(WakeupBarrierOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail WakeupBarrierOpAdaptor::WakeupBarrierOpAdaptor(WakeupBarrierOp op) : WakeupBarrierOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WakeupBarrierOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult WakeupBarrierOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute WakeupBarrierOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WakeupBarrierOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional WakeupBarrierOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void WakeupBarrierOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void WakeupBarrierOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult WakeupBarrierOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void WakeupBarrierOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr) { odsState.addOperands(ptr); } WakeupBarrierOp WakeupBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WakeupBarrierOp WakeupBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(ptr)); } void WakeupBarrierOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { odsState.addOperands(ptr); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WakeupBarrierOp WakeupBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WakeupBarrierOp WakeupBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr)); } void WakeupBarrierOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WakeupBarrierOp WakeupBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WakeupBarrierOp WakeupBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WakeupBarrierOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WakeupBarrierOp WakeupBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WakeupBarrierOp WakeupBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WakeupBarrierOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult WakeupBarrierOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WakeupBarrierOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void WakeupBarrierOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WakeupBarrierOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaveBarrierOp definitions //===----------------------------------------------------------------------===// namespace detail { WaveBarrierOpGenericAdaptorBase::WaveBarrierOpGenericAdaptorBase(WaveBarrierOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail WaveBarrierOpAdaptor::WaveBarrierOpAdaptor(WaveBarrierOp op) : WaveBarrierOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaveBarrierOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult WaveBarrierOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute WaveBarrierOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaveBarrierOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional WaveBarrierOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void WaveBarrierOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void WaveBarrierOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult WaveBarrierOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void WaveBarrierOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState) { } WaveBarrierOp WaveBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveBarrierOp WaveBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder) { return create(builder, builder.getLoc()); } void WaveBarrierOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes) { assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaveBarrierOp WaveBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveBarrierOp WaveBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes) { return create(builder, builder.getLoc(), std::forward(resultTypes)); } void WaveBarrierOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaveBarrierOp WaveBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveBarrierOp WaveBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaveBarrierOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaveBarrierOp WaveBarrierOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveBarrierOp WaveBarrierOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaveBarrierOp::verifyInvariantsImpl() { return ::mlir::success(); } ::llvm::LogicalResult WaveBarrierOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaveBarrierOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } return ::mlir::success(); } void WaveBarrierOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaveBarrierOp) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WaveId definitions //===----------------------------------------------------------------------===// namespace detail { WaveIdGenericAdaptorBase::WaveIdGenericAdaptorBase(WaveId op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> WaveIdGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail WaveIdAdaptor::WaveIdAdaptor(WaveId op) : WaveIdGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WaveIdAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.wave.id' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult WaveId::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WaveId::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WaveId::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional WaveId::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void WaveId::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void WaveId::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult WaveId::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WaveId::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void WaveId::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> WaveId::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void WaveId::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } WaveId WaveId::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveId WaveId::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void WaveId::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } WaveId WaveId::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveId WaveId::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void WaveId::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } WaveId WaveId::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveId WaveId::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void WaveId::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WaveId WaveId::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveId WaveId::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WaveId::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WaveId WaveId::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WaveId WaveId::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WaveId::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult WaveId::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WaveId::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void WaveId::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void WaveId::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WaveId) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WaveIdGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::WavefrontSizeOp definitions //===----------------------------------------------------------------------===// namespace detail { WavefrontSizeOpGenericAdaptorBase::WavefrontSizeOpGenericAdaptorBase(WavefrontSizeOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional<::mlir::LLVM::ConstantRangeAttr> WavefrontSizeOpGenericAdaptorBase::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } } // namespace detail WavefrontSizeOpAdaptor::WavefrontSizeOpAdaptor(WavefrontSizeOp op) : WavefrontSizeOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult WavefrontSizeOpAdaptor::verify(::mlir::Location loc) { auto tblgen_range = getProperties().range; (void)tblgen_range; if (tblgen_range && !((::llvm::isa<::mlir::LLVM::ConstantRangeAttr>(tblgen_range)))) return emitError(loc, "'rocdl.wavefrontsize' op attribute 'range' failed to satisfy constraint: A range of two integers, corresponding to LLVM's ConstantRange"); return ::mlir::success(); } ::llvm::LogicalResult WavefrontSizeOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.range; auto attr = dict.get("range"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `range` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute WavefrontSizeOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.range; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("range", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code WavefrontSizeOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.range.getAsOpaquePointer())); } std::optional WavefrontSizeOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "range") return prop.range; return std::nullopt; } void WavefrontSizeOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "range") { prop.range = ::llvm::dyn_cast_or_null>(value); return; } } void WavefrontSizeOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.range) attrs.append("range", prop.range); } ::llvm::LogicalResult WavefrontSizeOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getRangeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(attr, "range", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult WavefrontSizeOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.range))) return ::mlir::failure(); return ::mlir::success(); } void WavefrontSizeOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.range); } ::std::optional<::mlir::LLVM::ConstantRangeAttr> WavefrontSizeOp::getRange() { auto attr = getRangeAttr(); return attr ? ::std::optional<::mlir::LLVM::ConstantRangeAttr>(::llvm::cast<::mlir::LLVM::ConstantRangeAttr>(attr)) : (::std::nullopt); } void WavefrontSizeOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, Type resultType) { build(odsBuilder, odsState, resultType, ::mlir::LLVM::ConstantRangeAttr{}); } WavefrontSizeOp WavefrontSizeOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WavefrontSizeOp WavefrontSizeOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType) { return create(builder, builder.getLoc(), std::forward(resultType)); } void WavefrontSizeOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } odsState.addTypes(res); } WavefrontSizeOp WavefrontSizeOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WavefrontSizeOp WavefrontSizeOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(res), std::forward(range)); } void WavefrontSizeOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { if (range) { odsState.getOrAddProperties().range = range; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } WavefrontSizeOp WavefrontSizeOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(range)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WavefrontSizeOp WavefrontSizeOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, /*optional*/::mlir::LLVM::ConstantRangeAttr range) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(range)); } void WavefrontSizeOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } WavefrontSizeOp WavefrontSizeOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WavefrontSizeOp WavefrontSizeOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void WavefrontSizeOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } WavefrontSizeOp WavefrontSizeOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } WavefrontSizeOp WavefrontSizeOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult WavefrontSizeOp::verifyInvariantsImpl() { auto tblgen_range = getProperties().range; (void)tblgen_range; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps3(*this, tblgen_range, "range"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult WavefrontSizeOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult WavefrontSizeOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::LLVM::ConstantRangeAttr rangeAttr; ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("range"))) { if (parser.parseCustomAttributeWithFallback(rangeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (rangeAttr) result.getOrAddProperties().range = rangeAttr; } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); return ::mlir::success(); } void WavefrontSizeOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getRangeAttr()) { _odsPrinter << ' ' << "range"; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getRangeAttr()); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("range"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void WavefrontSizeOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::WavefrontSizeOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::WavefrontSizeOpGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::dot4_f32_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { dot4_f32_bf8_bf8GenericAdaptorBase::dot4_f32_bf8_bf8GenericAdaptorBase(dot4_f32_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail dot4_f32_bf8_bf8Adaptor::dot4_f32_bf8_bf8Adaptor(dot4_f32_bf8_bf8 op) : dot4_f32_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult dot4_f32_bf8_bf8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult dot4_f32_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute dot4_f32_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code dot4_f32_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional dot4_f32_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void dot4_f32_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void dot4_f32_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult dot4_f32_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void dot4_f32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } dot4_f32_bf8_bf8 dot4_f32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_bf8_bf8 dot4_f32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void dot4_f32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } dot4_f32_bf8_bf8 dot4_f32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_bf8_bf8 dot4_f32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void dot4_f32_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } dot4_f32_bf8_bf8 dot4_f32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_bf8_bf8 dot4_f32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void dot4_f32_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } dot4_f32_bf8_bf8 dot4_f32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_bf8_bf8 dot4_f32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult dot4_f32_bf8_bf8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult dot4_f32_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult dot4_f32_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void dot4_f32_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void dot4_f32_bf8_bf8::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::dot4_f32_bf8_bf8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::dot4_f32_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { dot4_f32_bf8_fp8GenericAdaptorBase::dot4_f32_bf8_fp8GenericAdaptorBase(dot4_f32_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail dot4_f32_bf8_fp8Adaptor::dot4_f32_bf8_fp8Adaptor(dot4_f32_bf8_fp8 op) : dot4_f32_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult dot4_f32_bf8_fp8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult dot4_f32_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute dot4_f32_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code dot4_f32_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional dot4_f32_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void dot4_f32_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void dot4_f32_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult dot4_f32_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void dot4_f32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } dot4_f32_bf8_fp8 dot4_f32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_bf8_fp8 dot4_f32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void dot4_f32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } dot4_f32_bf8_fp8 dot4_f32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_bf8_fp8 dot4_f32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void dot4_f32_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } dot4_f32_bf8_fp8 dot4_f32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_bf8_fp8 dot4_f32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void dot4_f32_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } dot4_f32_bf8_fp8 dot4_f32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_bf8_fp8 dot4_f32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult dot4_f32_bf8_fp8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult dot4_f32_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult dot4_f32_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void dot4_f32_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void dot4_f32_bf8_fp8::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::dot4_f32_bf8_fp8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::dot4_f32_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { dot4_f32_fp8_bf8GenericAdaptorBase::dot4_f32_fp8_bf8GenericAdaptorBase(dot4_f32_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail dot4_f32_fp8_bf8Adaptor::dot4_f32_fp8_bf8Adaptor(dot4_f32_fp8_bf8 op) : dot4_f32_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult dot4_f32_fp8_bf8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult dot4_f32_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute dot4_f32_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code dot4_f32_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional dot4_f32_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void dot4_f32_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void dot4_f32_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult dot4_f32_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void dot4_f32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } dot4_f32_fp8_bf8 dot4_f32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_fp8_bf8 dot4_f32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void dot4_f32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } dot4_f32_fp8_bf8 dot4_f32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_fp8_bf8 dot4_f32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void dot4_f32_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } dot4_f32_fp8_bf8 dot4_f32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_fp8_bf8 dot4_f32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void dot4_f32_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } dot4_f32_fp8_bf8 dot4_f32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_fp8_bf8 dot4_f32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult dot4_f32_fp8_bf8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult dot4_f32_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult dot4_f32_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void dot4_f32_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void dot4_f32_fp8_bf8::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::dot4_f32_fp8_bf8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::dot4_f32_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { dot4_f32_fp8_fp8GenericAdaptorBase::dot4_f32_fp8_fp8GenericAdaptorBase(dot4_f32_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail dot4_f32_fp8_fp8Adaptor::dot4_f32_fp8_fp8Adaptor(dot4_f32_fp8_fp8 op) : dot4_f32_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult dot4_f32_fp8_fp8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult dot4_f32_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute dot4_f32_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code dot4_f32_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional dot4_f32_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void dot4_f32_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void dot4_f32_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult dot4_f32_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void dot4_f32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } dot4_f32_fp8_fp8 dot4_f32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_fp8_fp8 dot4_f32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void dot4_f32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } dot4_f32_fp8_fp8 dot4_f32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_fp8_fp8 dot4_f32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void dot4_f32_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } dot4_f32_fp8_fp8 dot4_f32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_fp8_fp8 dot4_f32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void dot4_f32_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } dot4_f32_fp8_fp8 dot4_f32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } dot4_f32_fp8_fp8 dot4_f32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult dot4_f32_fp8_fp8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult dot4_f32_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult dot4_f32_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void dot4_f32_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void dot4_f32_fp8_fp8::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::dot4_f32_fp8_fp8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ds_read_tr16_b64 definitions //===----------------------------------------------------------------------===// namespace detail { ds_read_tr16_b64GenericAdaptorBase::ds_read_tr16_b64GenericAdaptorBase(ds_read_tr16_b64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > ds_read_tr16_b64GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr16_b64GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr16_b64GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail ds_read_tr16_b64Adaptor::ds_read_tr16_b64Adaptor(ds_read_tr16_b64 op) : ds_read_tr16_b64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ds_read_tr16_b64Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr16.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr16.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr16.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr16_b64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ds_read_tr16_b64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ds_read_tr16_b64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional ds_read_tr16_b64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void ds_read_tr16_b64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void ds_read_tr16_b64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult ds_read_tr16_b64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr16_b64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void ds_read_tr16_b64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr16_b64::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr16_b64::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr16_b64::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void ds_read_tr16_b64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } ds_read_tr16_b64 ds_read_tr16_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr16_b64 ds_read_tr16_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ds_read_tr16_b64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ds_read_tr16_b64 ds_read_tr16_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr16_b64 ds_read_tr16_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ds_read_tr16_b64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ds_read_tr16_b64 ds_read_tr16_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr16_b64 ds_read_tr16_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ds_read_tr16_b64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ds_read_tr16_b64 ds_read_tr16_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr16_b64 ds_read_tr16_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ds_read_tr16_b64::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr16_b64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ds_read_tr16_b64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::LLVM::LLVMPointerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ds_read_tr16_b64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getPtr().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMPointerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ds_read_tr16_b64::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> ds_read_tr16_b64::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ds_read_tr16_b64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ds_read_tr16_b64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ds_read_tr4_b64 definitions //===----------------------------------------------------------------------===// namespace detail { ds_read_tr4_b64GenericAdaptorBase::ds_read_tr4_b64GenericAdaptorBase(ds_read_tr4_b64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > ds_read_tr4_b64GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr4_b64GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr4_b64GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail ds_read_tr4_b64Adaptor::ds_read_tr4_b64Adaptor(ds_read_tr4_b64 op) : ds_read_tr4_b64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ds_read_tr4_b64Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr4.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr4.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr4.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr4_b64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ds_read_tr4_b64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ds_read_tr4_b64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional ds_read_tr4_b64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void ds_read_tr4_b64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void ds_read_tr4_b64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult ds_read_tr4_b64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr4_b64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void ds_read_tr4_b64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr4_b64::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr4_b64::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr4_b64::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void ds_read_tr4_b64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } ds_read_tr4_b64 ds_read_tr4_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr4_b64 ds_read_tr4_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ds_read_tr4_b64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ds_read_tr4_b64 ds_read_tr4_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr4_b64 ds_read_tr4_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ds_read_tr4_b64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ds_read_tr4_b64 ds_read_tr4_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr4_b64 ds_read_tr4_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ds_read_tr4_b64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ds_read_tr4_b64 ds_read_tr4_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr4_b64 ds_read_tr4_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ds_read_tr4_b64::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr4_b64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ds_read_tr4_b64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::LLVM::LLVMPointerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ds_read_tr4_b64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getPtr().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMPointerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ds_read_tr4_b64::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> ds_read_tr4_b64::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ds_read_tr4_b64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ds_read_tr4_b64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ds_read_tr6_b96 definitions //===----------------------------------------------------------------------===// namespace detail { ds_read_tr6_b96GenericAdaptorBase::ds_read_tr6_b96GenericAdaptorBase(ds_read_tr6_b96 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > ds_read_tr6_b96GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr6_b96GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr6_b96GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail ds_read_tr6_b96Adaptor::ds_read_tr6_b96Adaptor(ds_read_tr6_b96 op) : ds_read_tr6_b96GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ds_read_tr6_b96Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr6.b96' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr6.b96' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr6.b96' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr6_b96::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ds_read_tr6_b96::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ds_read_tr6_b96::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional ds_read_tr6_b96::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void ds_read_tr6_b96::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void ds_read_tr6_b96::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult ds_read_tr6_b96::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr6_b96::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void ds_read_tr6_b96::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr6_b96::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr6_b96::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr6_b96::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void ds_read_tr6_b96::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } ds_read_tr6_b96 ds_read_tr6_b96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr6_b96 ds_read_tr6_b96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ds_read_tr6_b96::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ds_read_tr6_b96 ds_read_tr6_b96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr6_b96 ds_read_tr6_b96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ds_read_tr6_b96::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ds_read_tr6_b96 ds_read_tr6_b96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr6_b96 ds_read_tr6_b96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ds_read_tr6_b96::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ds_read_tr6_b96 ds_read_tr6_b96::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr6_b96 ds_read_tr6_b96::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ds_read_tr6_b96::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr6_b96::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ds_read_tr6_b96::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::LLVM::LLVMPointerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ds_read_tr6_b96::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getPtr().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMPointerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ds_read_tr6_b96::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> ds_read_tr6_b96::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ds_read_tr6_b96) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ds_read_tr6_b96GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::ds_read_tr8_b64 definitions //===----------------------------------------------------------------------===// namespace detail { ds_read_tr8_b64GenericAdaptorBase::ds_read_tr8_b64GenericAdaptorBase(ds_read_tr8_b64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::mlir::ArrayAttr > ds_read_tr8_b64GenericAdaptorBase::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr8_b64GenericAdaptorBase::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr8_b64GenericAdaptorBase::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } } // namespace detail ds_read_tr8_b64Adaptor::ds_read_tr8_b64Adaptor(ds_read_tr8_b64 op) : ds_read_tr8_b64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ds_read_tr8_b64Adaptor::verify(::mlir::Location loc) { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (tblgen_alias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_alias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_alias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr8.b64' op attribute 'alias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_noalias_scopes && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_noalias_scopes))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_noalias_scopes), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::AliasScopeAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr8.b64' op attribute 'noalias_scopes' failed to satisfy constraint: LLVM dialect alias scope array"); if (tblgen_tbaa && !(((::llvm::isa<::mlir::ArrayAttr>(tblgen_tbaa))) && (::llvm::all_of(::llvm::cast<::mlir::ArrayAttr>(tblgen_tbaa), [&](::mlir::Attribute attr) { return attr && ((::llvm::isa<::mlir::LLVM::TBAATagAttr>(attr))); })))) return emitError(loc, "'rocdl.ds.read.tr8.b64' op attribute 'tbaa' failed to satisfy constraint: LLVM dialect TBAA tag metadata array"); return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr8_b64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.alias_scopes; auto attr = dict.get("alias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `alias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.noalias_scopes; auto attr = dict.get("noalias_scopes"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `noalias_scopes` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.tbaa; auto attr = dict.get("tbaa"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `tbaa` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ds_read_tr8_b64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("alias_scopes", propStorage)); } { const auto &propStorage = prop.noalias_scopes; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("noalias_scopes", propStorage)); } { const auto &propStorage = prop.tbaa; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("tbaa", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ds_read_tr8_b64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.alias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.noalias_scopes.getAsOpaquePointer()), llvm::hash_value(prop.tbaa.getAsOpaquePointer())); } std::optional ds_read_tr8_b64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "alias_scopes") return prop.alias_scopes; if (name == "noalias_scopes") return prop.noalias_scopes; if (name == "tbaa") return prop.tbaa; return std::nullopt; } void ds_read_tr8_b64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "alias_scopes") { prop.alias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "noalias_scopes") { prop.noalias_scopes = ::llvm::dyn_cast_or_null>(value); return; } if (name == "tbaa") { prop.tbaa = ::llvm::dyn_cast_or_null>(value); return; } } void ds_read_tr8_b64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.alias_scopes) attrs.append("alias_scopes", prop.alias_scopes); if (prop.noalias_scopes) attrs.append("noalias_scopes", prop.noalias_scopes); if (prop.tbaa) attrs.append("tbaa", prop.tbaa); } ::llvm::LogicalResult ds_read_tr8_b64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "alias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getNoaliasScopesAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(attr, "noalias_scopes", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getTbaaAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(attr, "tbaa", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr8_b64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.alias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.noalias_scopes))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.tbaa))) return ::mlir::failure(); return ::mlir::success(); } void ds_read_tr8_b64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.alias_scopes); writer.writeOptionalAttribute(prop.noalias_scopes); writer.writeOptionalAttribute(prop.tbaa); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr8_b64::getAliasScopes() { auto attr = getAliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr8_b64::getNoaliasScopes() { auto attr = getNoaliasScopesAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } ::std::optional< ::mlir::ArrayAttr > ds_read_tr8_b64::getTbaa() { auto attr = getTbaaAttr(); return attr ? ::std::optional< ::mlir::ArrayAttr >(attr) : (::std::nullopt); } void ds_read_tr8_b64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } odsState.addTypes(res); } ds_read_tr8_b64 ds_read_tr8_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr8_b64 ds_read_tr8_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(res), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ds_read_tr8_b64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { odsState.addOperands(ptr); if (alias_scopes) { odsState.getOrAddProperties().alias_scopes = alias_scopes; } if (noalias_scopes) { odsState.getOrAddProperties().noalias_scopes = noalias_scopes; } if (tbaa) { odsState.getOrAddProperties().tbaa = tbaa; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ds_read_tr8_b64 ds_read_tr8_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr8_b64 ds_read_tr8_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::ArrayAttr alias_scopes, /*optional*/::mlir::ArrayAttr noalias_scopes, /*optional*/::mlir::ArrayAttr tbaa) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alias_scopes), std::forward(noalias_scopes), std::forward(tbaa)); } void ds_read_tr8_b64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ds_read_tr8_b64 ds_read_tr8_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr8_b64 ds_read_tr8_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ds_read_tr8_b64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ds_read_tr8_b64 ds_read_tr8_b64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ds_read_tr8_b64 ds_read_tr8_b64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ds_read_tr8_b64::verifyInvariantsImpl() { auto tblgen_alias_scopes = getProperties().alias_scopes; (void)tblgen_alias_scopes; auto tblgen_noalias_scopes = getProperties().noalias_scopes; (void)tblgen_noalias_scopes; auto tblgen_tbaa = getProperties().tbaa; (void)tblgen_tbaa; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_alias_scopes, "alias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps5(*this, tblgen_noalias_scopes, "noalias_scopes"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps6(*this, tblgen_tbaa, "tbaa"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ds_read_tr8_b64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult ds_read_tr8_b64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resRawType{}; ::llvm::ArrayRef<::mlir::Type> resTypes(&resRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::LLVM::LLVMPointerType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resRawType = type; } result.addTypes(resTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ds_read_tr8_b64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getPtr().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::LLVM::LLVMPointerType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getRes().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ds_read_tr8_b64::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { { auto valueRange = getODSOperandIndexAndLength(0); for (unsigned idx = valueRange.first; idx < valueRange.first + valueRange.second; idx++) { effects.emplace_back(::mlir::MemoryEffects::Read::get(), &getOperation()->getOpOperand(idx), 0, false, ::mlir::SideEffects::DefaultResource::get()); } } } ::llvm::SmallVector<::mlir::Value> ds_read_tr8_b64::getAccessedOperands() { return {getPtr()}; } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::ds_read_tr8_b64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::ds_read_tr8_b64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::fdot2 definitions //===----------------------------------------------------------------------===// namespace detail { fdot2GenericAdaptorBase::fdot2GenericAdaptorBase(fdot2 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr fdot2GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool fdot2GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail fdot2Adaptor::fdot2Adaptor(fdot2 op) : fdot2GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult fdot2Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.fdot2' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult fdot2::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute fdot2::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code fdot2::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer())); } std::optional fdot2::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; return std::nullopt; } void fdot2::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } } void fdot2::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); } ::llvm::LogicalResult fdot2::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult fdot2::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); return ::mlir::success(); } void fdot2::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); } bool fdot2::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void fdot2::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void fdot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } fdot2 fdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2 fdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void fdot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } fdot2 fdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2 fdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void fdot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } fdot2 fdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2 fdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void fdot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } fdot2 fdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2 fdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void fdot2::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } fdot2 fdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2 fdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void fdot2::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } fdot2 fdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2 fdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void fdot2::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult fdot2::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult fdot2::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult fdot2::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void fdot2::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void fdot2::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::fdot2) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::fdot2GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::fdot2_bf16_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { fdot2_bf16_bf16GenericAdaptorBase::fdot2_bf16_bf16GenericAdaptorBase(fdot2_bf16_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail fdot2_bf16_bf16Adaptor::fdot2_bf16_bf16Adaptor(fdot2_bf16_bf16 op) : fdot2_bf16_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult fdot2_bf16_bf16Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult fdot2_bf16_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute fdot2_bf16_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code fdot2_bf16_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional fdot2_bf16_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void fdot2_bf16_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void fdot2_bf16_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult fdot2_bf16_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void fdot2_bf16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } fdot2_bf16_bf16 fdot2_bf16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_bf16_bf16 fdot2_bf16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void fdot2_bf16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } fdot2_bf16_bf16 fdot2_bf16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_bf16_bf16 fdot2_bf16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void fdot2_bf16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } fdot2_bf16_bf16 fdot2_bf16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_bf16_bf16 fdot2_bf16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void fdot2_bf16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } fdot2_bf16_bf16 fdot2_bf16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_bf16_bf16 fdot2_bf16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult fdot2_bf16_bf16::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps24(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps24(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult fdot2_bf16_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult fdot2_bf16_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void fdot2_bf16_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void fdot2_bf16_bf16::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::fdot2_bf16_bf16) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::fdot2_f16_f16 definitions //===----------------------------------------------------------------------===// namespace detail { fdot2_f16_f16GenericAdaptorBase::fdot2_f16_f16GenericAdaptorBase(fdot2_f16_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail fdot2_f16_f16Adaptor::fdot2_f16_f16Adaptor(fdot2_f16_f16 op) : fdot2_f16_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult fdot2_f16_f16Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult fdot2_f16_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute fdot2_f16_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code fdot2_f16_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional fdot2_f16_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void fdot2_f16_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void fdot2_f16_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult fdot2_f16_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void fdot2_f16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } fdot2_f16_f16 fdot2_f16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f16_f16 fdot2_f16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void fdot2_f16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } fdot2_f16_f16 fdot2_f16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f16_f16 fdot2_f16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void fdot2_f16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } fdot2_f16_f16 fdot2_f16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f16_f16 fdot2_f16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void fdot2_f16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } fdot2_f16_f16 fdot2_f16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f16_f16 fdot2_f16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult fdot2_f16_f16::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps17(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps25(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps25(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult fdot2_f16_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult fdot2_f16_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void fdot2_f16_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void fdot2_f16_f16::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::fdot2_f16_f16) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::fdot2_f32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { fdot2_f32_bf16GenericAdaptorBase::fdot2_f32_bf16GenericAdaptorBase(fdot2_f32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr fdot2_f32_bf16GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool fdot2_f32_bf16GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail fdot2_f32_bf16Adaptor::fdot2_f32_bf16Adaptor(fdot2_f32_bf16 op) : fdot2_f32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult fdot2_f32_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.fdot2.f32.bf16' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult fdot2_f32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute fdot2_f32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code fdot2_f32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer())); } std::optional fdot2_f32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; return std::nullopt; } void fdot2_f32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } } void fdot2_f32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); } ::llvm::LogicalResult fdot2_f32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult fdot2_f32_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); return ::mlir::success(); } void fdot2_f32_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); } bool fdot2_f32_bf16::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void fdot2_f32_bf16::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void fdot2_f32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void fdot2_f32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void fdot2_f32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void fdot2_f32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void fdot2_f32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void fdot2_f32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } fdot2_f32_bf16 fdot2_f32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void fdot2_f32_bf16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult fdot2_f32_bf16::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps21(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult fdot2_f32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult fdot2_f32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void fdot2_f32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void fdot2_f32_bf16::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::fdot2_f32_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::fdot2_f32_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x16bf16_1k definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x16bf16_1kGenericAdaptorBase::mfma_f32_16x16x16bf16_1kGenericAdaptorBase(mfma_f32_16x16x16bf16_1k op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x16bf16_1kGenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x16bf16_1kGenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x16bf16_1kGenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x16bf16_1kAdaptor::mfma_f32_16x16x16bf16_1kAdaptor(mfma_f32_16x16x16bf16_1k op) : mfma_f32_16x16x16bf16_1kGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x16bf16_1kAdaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x16bf16.1k' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x16bf16.1k' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x16bf16.1k' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x16bf16.1k' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x16bf16.1k' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x16bf16.1k' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x16bf16_1k::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x16bf16_1k::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x16bf16_1k::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x16bf16_1k::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x16bf16_1k::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x16bf16_1k::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x16bf16_1k::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x16bf16_1k::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x16bf16_1k::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x16bf16_1k::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x16bf16_1k::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x16bf16_1k::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x16bf16_1k::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x16bf16_1k::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x16bf16_1k::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x16bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x16bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x16bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x16bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x16bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x16bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16bf16_1k mfma_f32_16x16x16bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x16bf16_1k::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x16bf16_1k::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x16bf16_1k::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x16bf16_1k::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x16bf16_1k) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x16bf16_1kGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x16f16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x16f16GenericAdaptorBase::mfma_f32_16x16x16f16GenericAdaptorBase(mfma_f32_16x16x16f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x16f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x16f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x16f16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x16f16Adaptor::mfma_f32_16x16x16f16Adaptor(mfma_f32_16x16x16f16 op) : mfma_f32_16x16x16f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x16f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x16f16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x16f16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x16f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x16f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x16f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x16f16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x16f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x16f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x16f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x16f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x16f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x16f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x16f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x16f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x16f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x16f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x16f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x16f16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x16f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x16f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x16f16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x16f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x16f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x16f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x16f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x16f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x16f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x16f16 mfma_f32_16x16x16f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x16f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x16f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x16f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x16f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x16f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x16f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x1f32 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x1f32GenericAdaptorBase::mfma_f32_16x16x1f32GenericAdaptorBase(mfma_f32_16x16x1f32 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x1f32GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x1f32GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x1f32GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x1f32Adaptor::mfma_f32_16x16x1f32Adaptor(mfma_f32_16x16x1f32 op) : mfma_f32_16x16x1f32GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x1f32Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x1f32' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x1f32' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x1f32' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x1f32' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x1f32' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x1f32' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x1f32::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x1f32::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x1f32::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x1f32::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x1f32::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x1f32::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x1f32::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x1f32::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x1f32::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x1f32::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x1f32::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x1f32::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x1f32::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x1f32::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x1f32::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x1f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x1f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x1f32 mfma_f32_16x16x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x1f32::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x1f32::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x1f32::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x1f32::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x1f32) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x1f32GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x2bf16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x2bf16GenericAdaptorBase::mfma_f32_16x16x2bf16GenericAdaptorBase(mfma_f32_16x16x2bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x2bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x2bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x2bf16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x2bf16Adaptor::mfma_f32_16x16x2bf16Adaptor(mfma_f32_16x16x2bf16 op) : mfma_f32_16x16x2bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x2bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x2bf16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x2bf16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x2bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x2bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x2bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x2bf16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x2bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x2bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x2bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x2bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x2bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x2bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x2bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x2bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x2bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x2bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x2bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x2bf16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x2bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x2bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x2bf16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x2bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x2bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x2bf16 mfma_f32_16x16x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x2bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x2bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x2bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x2bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x2bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x2bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x32_bf16GenericAdaptorBase::mfma_f32_16x16x32_bf16GenericAdaptorBase(mfma_f32_16x16x32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x32_bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_bf16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x32_bf16Adaptor::mfma_f32_16x16x32_bf16Adaptor(mfma_f32_16x16x32_bf16 op) : mfma_f32_16x16x32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x32_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x32_bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_bf16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x32_bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_bf16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf16 mfma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x32_bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x32_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x32_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x32_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x32_bf8_bf8GenericAdaptorBase::mfma_f32_16x16x32_bf8_bf8GenericAdaptorBase(mfma_f32_16x16x32_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x32_bf8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_bf8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_bf8_bf8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x32_bf8_bf8Adaptor::mfma_f32_16x16x32_bf8_bf8Adaptor(mfma_f32_16x16x32_bf8_bf8 op) : mfma_f32_16x16x32_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x32_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.bf8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.bf8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.bf8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x32_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x32_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x32_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x32_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x32_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x32_bf8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_bf8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_bf8_bf8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x32_bf8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_bf8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_bf8_bf8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_bf8 mfma_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x32_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x32_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x32_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x32_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x32_bf8_fp8GenericAdaptorBase::mfma_f32_16x16x32_bf8_fp8GenericAdaptorBase(mfma_f32_16x16x32_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x32_bf8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_bf8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_bf8_fp8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x32_bf8_fp8Adaptor::mfma_f32_16x16x32_bf8_fp8Adaptor(mfma_f32_16x16x32_bf8_fp8 op) : mfma_f32_16x16x32_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x32_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.fp8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.fp8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.bf8.fp8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x32_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x32_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x32_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x32_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x32_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x32_bf8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_bf8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_bf8_fp8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x32_bf8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_bf8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_bf8_fp8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_bf8_fp8 mfma_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x32_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x32_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x32_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x32_f16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x32_f16GenericAdaptorBase::mfma_f32_16x16x32_f16GenericAdaptorBase(mfma_f32_16x16x32_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x32_f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_f16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x32_f16Adaptor::mfma_f32_16x16x32_f16Adaptor(mfma_f32_16x16x32_f16 op) : mfma_f32_16x16x32_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x32_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x32.f16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x32.f16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x32.f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.f16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x32_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x32_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x32_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x32_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x32_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x32_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x32_f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_f16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x32_f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_f16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_f16 mfma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x32_f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x32_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x32_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x32_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x32_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x32_fp8_bf8GenericAdaptorBase::mfma_f32_16x16x32_fp8_bf8GenericAdaptorBase(mfma_f32_16x16x32_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x32_fp8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_fp8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_fp8_bf8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x32_fp8_bf8Adaptor::mfma_f32_16x16x32_fp8_bf8Adaptor(mfma_f32_16x16x32_fp8_bf8 op) : mfma_f32_16x16x32_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x32_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.bf8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.bf8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.bf8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x32_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x32_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x32_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x32_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x32_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x32_fp8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_fp8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_fp8_bf8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x32_fp8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_fp8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_fp8_bf8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_bf8 mfma_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x32_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x32_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x32_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x32_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x32_fp8_fp8GenericAdaptorBase::mfma_f32_16x16x32_fp8_fp8GenericAdaptorBase(mfma_f32_16x16x32_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x32_fp8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_fp8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_fp8_fp8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x32_fp8_fp8Adaptor::mfma_f32_16x16x32_fp8_fp8Adaptor(mfma_f32_16x16x32_fp8_fp8 op) : mfma_f32_16x16x32_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x32_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.fp8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.fp8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x32.fp8.fp8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x32_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x32_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x32_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x32_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x32_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x32_fp8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x32_fp8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x32_fp8_fp8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x32_fp8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_fp8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x32_fp8_fp8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x32_fp8_fp8 mfma_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x32_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x32_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x32_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x32_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x32_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x4bf16_1k definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x4bf16_1kGenericAdaptorBase::mfma_f32_16x16x4bf16_1kGenericAdaptorBase(mfma_f32_16x16x4bf16_1k op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x4bf16_1kGenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x4bf16_1kGenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x4bf16_1kGenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x4bf16_1kAdaptor::mfma_f32_16x16x4bf16_1kAdaptor(mfma_f32_16x16x4bf16_1k op) : mfma_f32_16x16x4bf16_1kGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x4bf16_1kAdaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x4bf16.1k' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x4bf16.1k' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x4bf16.1k' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x4bf16.1k' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x4bf16.1k' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x4bf16.1k' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4bf16_1k::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x4bf16_1k::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x4bf16_1k::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x4bf16_1k::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x4bf16_1k::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x4bf16_1k::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x4bf16_1k::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4bf16_1k::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x4bf16_1k::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x4bf16_1k::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x4bf16_1k::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x4bf16_1k::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x4bf16_1k::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x4bf16_1k::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x4bf16_1k::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x4bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4bf16_1k mfma_f32_16x16x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x4bf16_1k::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4bf16_1k::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x4bf16_1k::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x4bf16_1k::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x4bf16_1k) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x4bf16_1kGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x4f16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x4f16GenericAdaptorBase::mfma_f32_16x16x4f16GenericAdaptorBase(mfma_f32_16x16x4f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x4f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x4f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x4f16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x4f16Adaptor::mfma_f32_16x16x4f16Adaptor(mfma_f32_16x16x4f16 op) : mfma_f32_16x16x4f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x4f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x4f16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x4f16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x4f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x4f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x4f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x4f16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x4f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x4f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x4f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x4f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x4f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x4f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x4f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x4f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x4f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x4f16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x4f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x4f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x4f16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x4f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f16 mfma_f32_16x16x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x4f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x4f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x4f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x4f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x4f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x4f32 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x4f32GenericAdaptorBase::mfma_f32_16x16x4f32GenericAdaptorBase(mfma_f32_16x16x4f32 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x4f32GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x4f32GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x4f32GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x4f32Adaptor::mfma_f32_16x16x4f32Adaptor(mfma_f32_16x16x4f32 op) : mfma_f32_16x16x4f32GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x4f32Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x4f32' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x4f32' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x4f32' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x4f32' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x4f32' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x4f32' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4f32::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x4f32::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x4f32::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x4f32::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x4f32::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x4f32::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x4f32::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4f32::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x4f32::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x4f32::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x4f32::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x4f32::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x4f32::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x4f32::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x4f32::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x4f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x4f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x4f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x4f32 mfma_f32_16x16x4f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x4f32::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x4f32::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x4f32::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x4f32::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x4f32) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x4f32GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x8_xf32 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x8_xf32GenericAdaptorBase::mfma_f32_16x16x8_xf32GenericAdaptorBase(mfma_f32_16x16x8_xf32 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x8_xf32GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x8_xf32GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x8_xf32GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x8_xf32Adaptor::mfma_f32_16x16x8_xf32Adaptor(mfma_f32_16x16x8_xf32 op) : mfma_f32_16x16x8_xf32GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x8_xf32Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x8.xf32' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x8.xf32' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x8.xf32' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x8.xf32' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x8.xf32' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x8.xf32' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x8_xf32::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x8_xf32::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x8_xf32::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x8_xf32::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x8_xf32::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x8_xf32::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x8_xf32::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x8_xf32::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x8_xf32::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x8_xf32::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x8_xf32::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x8_xf32::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x8_xf32::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x8_xf32::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x8_xf32::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x8_xf32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x8_xf32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x8_xf32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x8_xf32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x8_xf32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x8_xf32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8_xf32 mfma_f32_16x16x8_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x8_xf32::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps23(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps23(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x8_xf32::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x8_xf32::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x8_xf32::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x8_xf32) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x8_xf32GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_16x16x8bf16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_16x16x8bf16GenericAdaptorBase::mfma_f32_16x16x8bf16GenericAdaptorBase(mfma_f32_16x16x8bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_16x16x8bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x8bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x8bf16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_16x16x8bf16Adaptor::mfma_f32_16x16x8bf16Adaptor(mfma_f32_16x16x8bf16 op) : mfma_f32_16x16x8bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_16x16x8bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.16x16x8bf16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.16x16x8bf16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.16x16x8bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x8bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.16x16x8bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.16x16x8bf16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x8bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_16x16x8bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_16x16x8bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_16x16x8bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_16x16x8bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_16x16x8bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_16x16x8bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x8bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x8bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_16x16x8bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_16x16x8bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_16x16x8bf16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_16x16x8bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x8bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_16x16x8bf16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_16x16x8bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x8bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x8bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x8bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_16x16x8bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_16x16x8bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_16x16x8bf16 mfma_f32_16x16x8bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_16x16x8bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_16x16x8bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_16x16x8bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_16x16x8bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_16x16x8bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_16x16x8bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x16_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x16_bf16GenericAdaptorBase::mfma_f32_32x32x16_bf16GenericAdaptorBase(mfma_f32_32x32x16_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x16_bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_bf16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x16_bf16Adaptor::mfma_f32_32x32x16_bf16Adaptor(mfma_f32_32x32x16_bf16 op) : mfma_f32_32x32x16_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x16_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x16_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x16_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x16_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x16_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x16_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x16_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x16_bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_bf16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x16_bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_bf16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf16 mfma_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x16_bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x16_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x16_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x16_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x16_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x16_bf8_bf8GenericAdaptorBase::mfma_f32_32x32x16_bf8_bf8GenericAdaptorBase(mfma_f32_32x32x16_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x16_bf8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_bf8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_bf8_bf8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x16_bf8_bf8Adaptor::mfma_f32_32x32x16_bf8_bf8Adaptor(mfma_f32_32x32x16_bf8_bf8 op) : mfma_f32_32x32x16_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x16_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.bf8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.bf8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.bf8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x16_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x16_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x16_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x16_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x16_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x16_bf8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_bf8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_bf8_bf8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x16_bf8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_bf8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_bf8_bf8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x16_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x16_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_bf8 mfma_f32_32x32x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x16_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x16_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x16_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x16_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x16_bf8_fp8GenericAdaptorBase::mfma_f32_32x32x16_bf8_fp8GenericAdaptorBase(mfma_f32_32x32x16_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x16_bf8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_bf8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_bf8_fp8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x16_bf8_fp8Adaptor::mfma_f32_32x32x16_bf8_fp8Adaptor(mfma_f32_32x32x16_bf8_fp8 op) : mfma_f32_32x32x16_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x16_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.fp8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.fp8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.bf8.fp8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x16_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x16_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x16_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x16_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x16_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x16_bf8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_bf8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_bf8_fp8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x16_bf8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_bf8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_bf8_fp8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x16_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x16_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_bf8_fp8 mfma_f32_32x32x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x16_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x16_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x16_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x16_f16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x16_f16GenericAdaptorBase::mfma_f32_32x32x16_f16GenericAdaptorBase(mfma_f32_32x32x16_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x16_f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_f16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x16_f16Adaptor::mfma_f32_32x32x16_f16Adaptor(mfma_f32_32x32x16_f16 op) : mfma_f32_32x32x16_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x16_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x16.f16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x16.f16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x16.f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.f16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x16_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x16_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x16_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x16_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x16_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x16_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x16_f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_f16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x16_f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_f16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_f16 mfma_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x16_f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x16_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x16_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x16_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x16_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x16_fp8_bf8GenericAdaptorBase::mfma_f32_32x32x16_fp8_bf8GenericAdaptorBase(mfma_f32_32x32x16_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x16_fp8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_fp8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_fp8_bf8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x16_fp8_bf8Adaptor::mfma_f32_32x32x16_fp8_bf8Adaptor(mfma_f32_32x32x16_fp8_bf8 op) : mfma_f32_32x32x16_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x16_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.bf8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.bf8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.bf8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x16_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x16_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x16_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x16_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x16_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x16_fp8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_fp8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_fp8_bf8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x16_fp8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_fp8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_fp8_bf8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x16_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x16_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_bf8 mfma_f32_32x32x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x16_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x16_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x16_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x16_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x16_fp8_fp8GenericAdaptorBase::mfma_f32_32x32x16_fp8_fp8GenericAdaptorBase(mfma_f32_32x32x16_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x16_fp8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_fp8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_fp8_fp8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x16_fp8_fp8Adaptor::mfma_f32_32x32x16_fp8_fp8Adaptor(mfma_f32_32x32x16_fp8_fp8 op) : mfma_f32_32x32x16_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x16_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.fp8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.fp8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x16.fp8.fp8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x16_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x16_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x16_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x16_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x16_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x16_fp8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x16_fp8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x16_fp8_fp8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x16_fp8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_fp8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x16_fp8_fp8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x16_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x16_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x16_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x16_fp8_fp8 mfma_f32_32x32x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x16_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x16_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x16_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x16_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x16_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x1f32 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x1f32GenericAdaptorBase::mfma_f32_32x32x1f32GenericAdaptorBase(mfma_f32_32x32x1f32 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x1f32GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x1f32GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x1f32GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x1f32Adaptor::mfma_f32_32x32x1f32Adaptor(mfma_f32_32x32x1f32 op) : mfma_f32_32x32x1f32GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x1f32Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x1f32' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x1f32' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x1f32' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x1f32' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x1f32' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x1f32' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x1f32::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x1f32::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x1f32::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x1f32::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x1f32::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x1f32::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x1f32::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x1f32::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x1f32::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x1f32::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x1f32::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x1f32::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x1f32::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x1f32::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x1f32::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x1f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x1f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x1f32 mfma_f32_32x32x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x1f32::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x1f32::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x1f32::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x1f32::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x1f32) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x1f32GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x2bf16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x2bf16GenericAdaptorBase::mfma_f32_32x32x2bf16GenericAdaptorBase(mfma_f32_32x32x2bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x2bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x2bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x2bf16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x2bf16Adaptor::mfma_f32_32x32x2bf16Adaptor(mfma_f32_32x32x2bf16 op) : mfma_f32_32x32x2bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x2bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x2bf16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x2bf16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x2bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x2bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x2bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x2bf16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x2bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x2bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x2bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x2bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x2bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x2bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x2bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x2bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x2bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x2bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x2bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x2bf16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x2bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x2bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x2bf16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x2bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x2bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2bf16 mfma_f32_32x32x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x2bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x2bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x2bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x2bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x2bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x2bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x2f32 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x2f32GenericAdaptorBase::mfma_f32_32x32x2f32GenericAdaptorBase(mfma_f32_32x32x2f32 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x2f32GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x2f32GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x2f32GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x2f32Adaptor::mfma_f32_32x32x2f32Adaptor(mfma_f32_32x32x2f32 op) : mfma_f32_32x32x2f32GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x2f32Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x2f32' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x2f32' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x2f32' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x2f32' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x2f32' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x2f32' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x2f32::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x2f32::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x2f32::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x2f32::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x2f32::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x2f32::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x2f32::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x2f32::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x2f32::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x2f32::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x2f32::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x2f32::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x2f32::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x2f32::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x2f32::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x2f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x2f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x2f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x2f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x2f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x2f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x2f32 mfma_f32_32x32x2f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x2f32::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x2f32::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x2f32::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x2f32::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x2f32) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x2f32GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x4_xf32 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x4_xf32GenericAdaptorBase::mfma_f32_32x32x4_xf32GenericAdaptorBase(mfma_f32_32x32x4_xf32 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x4_xf32GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x4_xf32GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x4_xf32GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x4_xf32Adaptor::mfma_f32_32x32x4_xf32Adaptor(mfma_f32_32x32x4_xf32 op) : mfma_f32_32x32x4_xf32GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x4_xf32Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x4.xf32' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x4.xf32' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x4.xf32' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x4.xf32' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x4.xf32' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x4.xf32' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4_xf32::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x4_xf32::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x4_xf32::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x4_xf32::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x4_xf32::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x4_xf32::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x4_xf32::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4_xf32::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x4_xf32::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x4_xf32::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x4_xf32::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x4_xf32::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x4_xf32::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x4_xf32::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x4_xf32::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x4_xf32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4_xf32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4_xf32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4_xf32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4_xf32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x4_xf32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4_xf32 mfma_f32_32x32x4_xf32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x4_xf32::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps23(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps23(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4_xf32::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x4_xf32::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x4_xf32::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x4_xf32) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x4_xf32GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x4bf16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x4bf16GenericAdaptorBase::mfma_f32_32x32x4bf16GenericAdaptorBase(mfma_f32_32x32x4bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x4bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x4bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x4bf16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x4bf16Adaptor::mfma_f32_32x32x4bf16Adaptor(mfma_f32_32x32x4bf16 op) : mfma_f32_32x32x4bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x4bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x4bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x4bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x4bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x4bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x4bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x4bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x4bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x4bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x4bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x4bf16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x4bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x4bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x4bf16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x4bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x4bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16 mfma_f32_32x32x4bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x4bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x4bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x4bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x4bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x4bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x4bf16_1k definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x4bf16_1kGenericAdaptorBase::mfma_f32_32x32x4bf16_1kGenericAdaptorBase(mfma_f32_32x32x4bf16_1k op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x4bf16_1kGenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x4bf16_1kGenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x4bf16_1kGenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x4bf16_1kAdaptor::mfma_f32_32x32x4bf16_1kAdaptor(mfma_f32_32x32x4bf16_1k op) : mfma_f32_32x32x4bf16_1kGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x4bf16_1kAdaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16.1k' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16.1k' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16.1k' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16.1k' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16.1k' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x4bf16.1k' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4bf16_1k::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x4bf16_1k::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x4bf16_1k::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x4bf16_1k::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x4bf16_1k::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x4bf16_1k::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x4bf16_1k::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4bf16_1k::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x4bf16_1k::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x4bf16_1k::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x4bf16_1k::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x4bf16_1k::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x4bf16_1k::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x4bf16_1k::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x4bf16_1k::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x4bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4bf16_1k mfma_f32_32x32x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x4bf16_1k::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4bf16_1k::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x4bf16_1k::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x4bf16_1k::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x4bf16_1k) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x4bf16_1kGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x4f16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x4f16GenericAdaptorBase::mfma_f32_32x32x4f16GenericAdaptorBase(mfma_f32_32x32x4f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x4f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x4f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x4f16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x4f16Adaptor::mfma_f32_32x32x4f16Adaptor(mfma_f32_32x32x4f16 op) : mfma_f32_32x32x4f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x4f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x4f16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x4f16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x4f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x4f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x4f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x4f16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x4f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x4f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x4f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x4f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x4f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x4f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x4f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x4f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x4f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x4f16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x4f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x4f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x4f16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x4f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x4f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x4f16 mfma_f32_32x32x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x4f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps20(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x4f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x4f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x4f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x4f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x4f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x8bf16_1k definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x8bf16_1kGenericAdaptorBase::mfma_f32_32x32x8bf16_1kGenericAdaptorBase(mfma_f32_32x32x8bf16_1k op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x8bf16_1kGenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x8bf16_1kGenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x8bf16_1kGenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x8bf16_1kAdaptor::mfma_f32_32x32x8bf16_1kAdaptor(mfma_f32_32x32x8bf16_1k op) : mfma_f32_32x32x8bf16_1kGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x8bf16_1kAdaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x8bf16.1k' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x8bf16.1k' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x8bf16.1k' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x8bf16.1k' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x8bf16.1k' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x8bf16.1k' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x8bf16_1k::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x8bf16_1k::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x8bf16_1k::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x8bf16_1k::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x8bf16_1k::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x8bf16_1k::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x8bf16_1k::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x8bf16_1k::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x8bf16_1k::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x8bf16_1k::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x8bf16_1k::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x8bf16_1k::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x8bf16_1k::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x8bf16_1k::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x8bf16_1k::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x8bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x8bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x8bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x8bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x8bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x8bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8bf16_1k mfma_f32_32x32x8bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x8bf16_1k::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x8bf16_1k::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x8bf16_1k::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x8bf16_1k::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x8bf16_1k) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x8bf16_1kGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_32x32x8f16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_32x32x8f16GenericAdaptorBase::mfma_f32_32x32x8f16GenericAdaptorBase(mfma_f32_32x32x8f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_32x32x8f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x8f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x8f16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_32x32x8f16Adaptor::mfma_f32_32x32x8f16Adaptor(mfma_f32_32x32x8f16 op) : mfma_f32_32x32x8f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_32x32x8f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.32x32x8f16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.32x32x8f16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.32x32x8f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x8f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.32x32x8f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.32x32x8f16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x8f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_32x32x8f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_32x32x8f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_32x32x8f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_32x32x8f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_32x32x8f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_32x32x8f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x8f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x8f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_32x32x8f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_32x32x8f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_32x32x8f16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_32x32x8f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x8f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_32x32x8f16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_32x32x8f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x8f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x8f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x8f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_32x32x8f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_32x32x8f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_32x32x8f16 mfma_f32_32x32x8f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_32x32x8f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_32x32x8f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_32x32x8f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_32x32x8f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_32x32x8f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_32x32x8f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_4x4x1f32 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_4x4x1f32GenericAdaptorBase::mfma_f32_4x4x1f32GenericAdaptorBase(mfma_f32_4x4x1f32 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_4x4x1f32GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_4x4x1f32GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_4x4x1f32GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_4x4x1f32Adaptor::mfma_f32_4x4x1f32Adaptor(mfma_f32_4x4x1f32 op) : mfma_f32_4x4x1f32GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_4x4x1f32Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.4x4x1f32' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.4x4x1f32' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.4x4x1f32' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.4x4x1f32' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.4x4x1f32' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.4x4x1f32' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x1f32::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_4x4x1f32::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_4x4x1f32::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_4x4x1f32::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_4x4x1f32::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_4x4x1f32::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_4x4x1f32::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x1f32::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_4x4x1f32::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_4x4x1f32::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_4x4x1f32::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_4x4x1f32::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_4x4x1f32::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_4x4x1f32::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_4x4x1f32::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_4x4x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x1f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x1f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_4x4x1f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x1f32 mfma_f32_4x4x1f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_4x4x1f32::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x1f32::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_4x4x1f32::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_4x4x1f32::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_4x4x1f32) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_4x4x1f32GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_4x4x2bf16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_4x4x2bf16GenericAdaptorBase::mfma_f32_4x4x2bf16GenericAdaptorBase(mfma_f32_4x4x2bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_4x4x2bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_4x4x2bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_4x4x2bf16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_4x4x2bf16Adaptor::mfma_f32_4x4x2bf16Adaptor(mfma_f32_4x4x2bf16 op) : mfma_f32_4x4x2bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_4x4x2bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.4x4x2bf16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.4x4x2bf16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.4x4x2bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.4x4x2bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.4x4x2bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.4x4x2bf16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x2bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_4x4x2bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_4x4x2bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_4x4x2bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_4x4x2bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_4x4x2bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_4x4x2bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x2bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_4x4x2bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_4x4x2bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_4x4x2bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_4x4x2bf16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_4x4x2bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_4x4x2bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_4x4x2bf16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_4x4x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x2bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x2bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_4x4x2bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x2bf16 mfma_f32_4x4x2bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_4x4x2bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x2bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_4x4x2bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_4x4x2bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_4x4x2bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_4x4x2bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_4x4x4bf16_1k definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_4x4x4bf16_1kGenericAdaptorBase::mfma_f32_4x4x4bf16_1kGenericAdaptorBase(mfma_f32_4x4x4bf16_1k op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_4x4x4bf16_1kGenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_4x4x4bf16_1kGenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_4x4x4bf16_1kGenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_4x4x4bf16_1kAdaptor::mfma_f32_4x4x4bf16_1kAdaptor(mfma_f32_4x4x4bf16_1k op) : mfma_f32_4x4x4bf16_1kGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_4x4x4bf16_1kAdaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.4x4x4bf16.1k' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.4x4x4bf16.1k' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.4x4x4bf16.1k' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.4x4x4bf16.1k' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.4x4x4bf16.1k' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.4x4x4bf16.1k' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x4bf16_1k::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_4x4x4bf16_1k::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_4x4x4bf16_1k::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_4x4x4bf16_1k::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_4x4x4bf16_1k::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_4x4x4bf16_1k::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_4x4x4bf16_1k::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x4bf16_1k::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_4x4x4bf16_1k::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_4x4x4bf16_1k::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_4x4x4bf16_1k::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_4x4x4bf16_1k::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_4x4x4bf16_1k::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_4x4x4bf16_1k::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_4x4x4bf16_1k::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_4x4x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x4bf16_1k::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x4bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_4x4x4bf16_1k::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4bf16_1k mfma_f32_4x4x4bf16_1k::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_4x4x4bf16_1k::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x4bf16_1k::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_4x4x4bf16_1k::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_4x4x4bf16_1k::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_4x4x4bf16_1k) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_4x4x4bf16_1kGenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f32_4x4x4f16 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f32_4x4x4f16GenericAdaptorBase::mfma_f32_4x4x4f16GenericAdaptorBase(mfma_f32_4x4x4f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f32_4x4x4f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_4x4x4f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_4x4x4f16GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f32_4x4x4f16Adaptor::mfma_f32_4x4x4f16Adaptor(mfma_f32_4x4x4f16 op) : mfma_f32_4x4x4f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f32_4x4x4f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f32.4x4x4f16' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f32.4x4x4f16' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f32.4x4x4f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.4x4x4f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f32.4x4x4f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f32.4x4x4f16' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x4f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f32_4x4x4f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f32_4x4x4f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f32_4x4x4f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f32_4x4x4f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f32_4x4x4f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f32_4x4x4f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x4f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_4x4x4f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f32_4x4x4f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f32_4x4x4f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_f32_4x4x4f16::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f32_4x4x4f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_4x4x4f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f32_4x4x4f16::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f32_4x4x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x4f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f32_4x4x4f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f32_4x4x4f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f32_4x4x4f16 mfma_f32_4x4x4f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f32_4x4x4f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f32_4x4x4f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f32_4x4x4f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f32_4x4x4f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f32_4x4x4f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f32_4x4x4f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f64_16x16x4f64 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f64_16x16x4f64GenericAdaptorBase::mfma_f64_16x16x4f64GenericAdaptorBase(mfma_f64_16x16x4f64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f64_16x16x4f64GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f64_16x16x4f64GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMANegModifier mfma_f64_16x16x4f64GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f64_16x16x4f64Adaptor::mfma_f64_16x16x4f64Adaptor(mfma_f64_16x16x4f64 op) : mfma_f64_16x16x4f64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f64_16x16x4f64Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f64.16x16x4f64' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f64.16x16x4f64' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f64.16x16x4f64' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f64.16x16x4f64' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f64.16x16x4f64' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMANegModifierAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f64.16x16x4f64' op attribute 'blgp' failed to satisfy constraint: negation modifier bitfield for gfx94x double-precision MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f64_16x16x4f64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f64_16x16x4f64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f64_16x16x4f64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f64_16x16x4f64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f64_16x16x4f64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f64_16x16x4f64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f64_16x16x4f64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps14(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f64_16x16x4f64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f64_16x16x4f64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f64_16x16x4f64::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f64_16x16x4f64::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMANegModifier mfma_f64_16x16x4f64::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f64_16x16x4f64::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f64_16x16x4f64::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f64_16x16x4f64::setBlgp(::mlir::ROCDL::MFMANegModifier attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMANegModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f64_16x16x4f64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f64_16x16x4f64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f64_16x16x4f64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMANegModifierAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f64_16x16x4f64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMANegModifierAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f64_16x16x4f64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f64_16x16x4f64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_16x16x4f64 mfma_f64_16x16x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f64_16x16x4f64::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps14(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps38(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps38(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps39(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps39(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f64_16x16x4f64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f64_16x16x4f64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMANegModifierAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f64_16x16x4f64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f64_16x16x4f64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f64_16x16x4f64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_f64_4x4x4f64 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_f64_4x4x4f64GenericAdaptorBase::mfma_f64_4x4x4f64GenericAdaptorBase(mfma_f64_4x4x4f64 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_f64_4x4x4f64GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f64_4x4x4f64GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMANegModifier mfma_f64_4x4x4f64GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_f64_4x4x4f64Adaptor::mfma_f64_4x4x4f64Adaptor(mfma_f64_4x4x4f64 op) : mfma_f64_4x4x4f64GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_f64_4x4x4f64Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.f64.4x4x4f64' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.f64.4x4x4f64' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.f64.4x4x4f64' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f64.4x4x4f64' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.f64.4x4x4f64' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMANegModifierAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.f64.4x4x4f64' op attribute 'blgp' failed to satisfy constraint: negation modifier bitfield for gfx94x double-precision MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_f64_4x4x4f64::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_f64_4x4x4f64::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_f64_4x4x4f64::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_f64_4x4x4f64::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_f64_4x4x4f64::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_f64_4x4x4f64::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_f64_4x4x4f64::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps14(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_f64_4x4x4f64::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_f64_4x4x4f64::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_f64_4x4x4f64::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_f64_4x4x4f64::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMANegModifier mfma_f64_4x4x4f64::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_f64_4x4x4f64::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f64_4x4x4f64::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_f64_4x4x4f64::setBlgp(::mlir::ROCDL::MFMANegModifier attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMANegModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_f64_4x4x4f64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f64_4x4x4f64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMANegModifierAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f64_4x4x4f64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMANegModifierAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f64_4x4x4f64::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMANegModifierAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMANegModifier blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_f64_4x4x4f64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_f64_4x4x4f64::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_f64_4x4x4f64 mfma_f64_4x4x4f64::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_f64_4x4x4f64::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps14(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps38(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps38(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps38(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps38(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_f64_4x4x4f64::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_f64_4x4x4f64::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMANegModifierAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_f64_4x4x4f64::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_f64_4x4x4f64) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_f64_4x4x4f64GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_16x16x16i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_16x16x16i8GenericAdaptorBase::mfma_i32_16x16x16i8GenericAdaptorBase(mfma_i32_16x16x16i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_16x16x16i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_16x16x16i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_16x16x16i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_16x16x16i8Adaptor::mfma_i32_16x16x16i8Adaptor(mfma_i32_16x16x16i8 op) : mfma_i32_16x16x16i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_16x16x16i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.16x16x16i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.16x16x16i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.16x16x16i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.16x16x16i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.16x16x16i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.16x16x16i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x16i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_16x16x16i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_16x16x16i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_16x16x16i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_16x16x16i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_16x16x16i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_16x16x16i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x16i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_16x16x16i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_16x16x16i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_16x16x16i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_16x16x16i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_16x16x16i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_16x16x16i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_16x16x16i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_16x16x16i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x16i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x16i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x16i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x16i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_16x16x16i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x16i8 mfma_i32_16x16x16i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_16x16x16i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x16i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_16x16x16i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_16x16x16i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_16x16x16i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_16x16x16i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_16x16x32_i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_16x16x32_i8GenericAdaptorBase::mfma_i32_16x16x32_i8GenericAdaptorBase(mfma_i32_16x16x32_i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_16x16x32_i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_16x16x32_i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_16x16x32_i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_16x16x32_i8Adaptor::mfma_i32_16x16x32_i8Adaptor(mfma_i32_16x16x32_i8 op) : mfma_i32_16x16x32_i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_16x16x32_i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.16x16x32.i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.16x16x32.i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.16x16x32.i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.16x16x32.i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.16x16x32.i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.16x16x32.i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x32_i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_16x16x32_i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_16x16x32_i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_16x16x32_i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_16x16x32_i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_16x16x32_i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_16x16x32_i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x32_i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_16x16x32_i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_16x16x32_i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_16x16x32_i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_16x16x32_i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_16x16x32_i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_16x16x32_i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_16x16x32_i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_16x16x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x32_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_16x16x32_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x32_i8 mfma_i32_16x16x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_16x16x32_i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x32_i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_16x16x32_i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_16x16x32_i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_16x16x32_i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_16x16x32_i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_16x16x4i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_16x16x4i8GenericAdaptorBase::mfma_i32_16x16x4i8GenericAdaptorBase(mfma_i32_16x16x4i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_16x16x4i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_16x16x4i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_16x16x4i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_16x16x4i8Adaptor::mfma_i32_16x16x4i8Adaptor(mfma_i32_16x16x4i8 op) : mfma_i32_16x16x4i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_16x16x4i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.16x16x4i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.16x16x4i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.16x16x4i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.16x16x4i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.16x16x4i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.16x16x4i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x4i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_16x16x4i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_16x16x4i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_16x16x4i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_16x16x4i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_16x16x4i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_16x16x4i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x4i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_16x16x4i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_16x16x4i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_16x16x4i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_16x16x4i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_16x16x4i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_16x16x4i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_16x16x4i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_16x16x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x4i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_16x16x4i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x4i8 mfma_i32_16x16x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_16x16x4i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x4i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_16x16x4i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_16x16x4i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_16x16x4i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_16x16x4i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_16x16x64_i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_16x16x64_i8GenericAdaptorBase::mfma_i32_16x16x64_i8GenericAdaptorBase(mfma_i32_16x16x64_i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_16x16x64_i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_16x16x64_i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_16x16x64_i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_16x16x64_i8Adaptor::mfma_i32_16x16x64_i8Adaptor(mfma_i32_16x16x64_i8 op) : mfma_i32_16x16x64_i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_16x16x64_i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.16x16x64.i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.16x16x64.i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.16x16x64.i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.16x16x64.i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.16x16x64.i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.16x16x64.i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x64_i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_16x16x64_i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_16x16x64_i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_16x16x64_i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_16x16x64_i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_16x16x64_i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_16x16x64_i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x64_i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_16x16x64_i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_16x16x64_i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_16x16x64_i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_16x16x64_i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_16x16x64_i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_16x16x64_i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_16x16x64_i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_16x16x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_16x16x64_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_16x16x64_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_16x16x64_i8 mfma_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_16x16x64_i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_16x16x64_i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_16x16x64_i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_16x16x64_i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_16x16x64_i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_16x16x64_i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_32x32x16_i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_32x32x16_i8GenericAdaptorBase::mfma_i32_32x32x16_i8GenericAdaptorBase(mfma_i32_32x32x16_i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_32x32x16_i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_32x32x16_i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_32x32x16_i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_32x32x16_i8Adaptor::mfma_i32_32x32x16_i8Adaptor(mfma_i32_32x32x16_i8 op) : mfma_i32_32x32x16_i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_32x32x16_i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.32x32x16.i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.32x32x16.i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.32x32x16.i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.32x32x16.i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.32x32x16.i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.32x32x16.i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x16_i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_32x32x16_i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_32x32x16_i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_32x32x16_i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_32x32x16_i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_32x32x16_i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_32x32x16_i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x16_i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_32x32x16_i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_32x32x16_i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_32x32x16_i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_32x32x16_i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_32x32x16_i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_32x32x16_i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_32x32x16_i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_32x32x16_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x16_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x16_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x16_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x16_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_32x32x16_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x16_i8 mfma_i32_32x32x16_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_32x32x16_i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x16_i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_32x32x16_i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_32x32x16_i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_32x32x16_i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_32x32x16_i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_32x32x32_i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_32x32x32_i8GenericAdaptorBase::mfma_i32_32x32x32_i8GenericAdaptorBase(mfma_i32_32x32x32_i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_32x32x32_i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_32x32x32_i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_32x32x32_i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_32x32x32_i8Adaptor::mfma_i32_32x32x32_i8Adaptor(mfma_i32_32x32x32_i8 op) : mfma_i32_32x32x32_i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_32x32x32_i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.32x32x32.i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.32x32x32.i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.32x32x32.i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.32x32x32.i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.32x32x32.i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.32x32x32.i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x32_i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_32x32x32_i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_32x32x32_i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_32x32x32_i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_32x32x32_i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_32x32x32_i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_32x32x32_i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x32_i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_32x32x32_i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_32x32x32_i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_32x32x32_i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_32x32x32_i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_32x32x32_i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_32x32x32_i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_32x32x32_i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_32x32x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x32_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_32x32x32_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x32_i8 mfma_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_32x32x32_i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x32_i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_32x32x32_i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_32x32x32_i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_32x32x32_i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_32x32x32_i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_32x32x4i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_32x32x4i8GenericAdaptorBase::mfma_i32_32x32x4i8GenericAdaptorBase(mfma_i32_32x32x4i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_32x32x4i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_32x32x4i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_32x32x4i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_32x32x4i8Adaptor::mfma_i32_32x32x4i8Adaptor(mfma_i32_32x32x4i8 op) : mfma_i32_32x32x4i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_32x32x4i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.32x32x4i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.32x32x4i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.32x32x4i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.32x32x4i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.32x32x4i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.32x32x4i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x4i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_32x32x4i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_32x32x4i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_32x32x4i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_32x32x4i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_32x32x4i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_32x32x4i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x4i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_32x32x4i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_32x32x4i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_32x32x4i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_32x32x4i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_32x32x4i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_32x32x4i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_32x32x4i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_32x32x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x4i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_32x32x4i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x4i8 mfma_i32_32x32x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_32x32x4i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps41(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps41(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x4i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_32x32x4i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_32x32x4i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_32x32x4i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_32x32x4i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_32x32x8i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_32x32x8i8GenericAdaptorBase::mfma_i32_32x32x8i8GenericAdaptorBase(mfma_i32_32x32x8i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_32x32x8i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_32x32x8i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_32x32x8i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_32x32x8i8Adaptor::mfma_i32_32x32x8i8Adaptor(mfma_i32_32x32x8i8 op) : mfma_i32_32x32x8i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_32x32x8i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.32x32x8i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.32x32x8i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.32x32x8i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.32x32x8i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.32x32x8i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.32x32x8i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x8i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_32x32x8i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_32x32x8i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_32x32x8i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_32x32x8i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_32x32x8i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_32x32x8i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x8i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_32x32x8i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_32x32x8i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_32x32x8i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_32x32x8i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_32x32x8i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_32x32x8i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_32x32x8i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_32x32x8i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x8i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x8i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x8i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_32x32x8i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_32x32x8i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_32x32x8i8 mfma_i32_32x32x8i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_32x32x8i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_32x32x8i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_32x32x8i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_32x32x8i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_32x32x8i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_32x32x8i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_i32_4x4x4i8 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_i32_4x4x4i8GenericAdaptorBase::mfma_i32_4x4x4i8GenericAdaptorBase(mfma_i32_4x4x4i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t mfma_i32_4x4x4i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_4x4x4i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_4x4x4i8GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } } // namespace detail mfma_i32_4x4x4i8Adaptor::mfma_i32_4x4x4i8Adaptor(mfma_i32_4x4x4i8 op) : mfma_i32_4x4x4i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_i32_4x4x4i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.mfma.i32.4x4x4i8' op requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.i32.4x4x4i8' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.i32.4x4x4i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.4x4x4i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.i32.4x4x4i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MFMAPermBAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.i32.4x4x4i8' op attribute 'blgp' failed to satisfy constraint: permutations of the lanes storing B in an MFMA"); return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_4x4x4i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_i32_4x4x4i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_i32_4x4x4i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional mfma_i32_4x4x4i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void mfma_i32_4x4x4i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_i32_4x4x4i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult mfma_i32_4x4x4i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_4x4x4i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_4x4x4i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); } uint32_t mfma_i32_4x4x4i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_i32_4x4x4i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } ::mlir::ROCDL::MFMAPermB mfma_i32_4x4x4i8::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } void mfma_i32_4x4x4i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_4x4x4i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_i32_4x4x4i8::setBlgp(::mlir::ROCDL::MFMAPermB attrValue) { getProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_i32_4x4x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; odsState.addTypes(res); } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_4x4x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.getOrAddProperties().blgp = blgp; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid, ::mlir::ROCDL::MFMAPermBAttr blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_4x4x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); odsState.addTypes(res); } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_4x4x4i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MFMAPermBAttr::get(odsBuilder.getContext(), blgp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, uint32_t cbsz, uint32_t abid, ::mlir::ROCDL::MFMAPermB blgp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(abid), std::forward(blgp)); } void mfma_i32_4x4x4i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_i32_4x4x4i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_i32_4x4x4i8 mfma_i32_4x4x4i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_i32_4x4x4i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps13(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_i32_4x4x4i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_i32_4x4x4i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::mlir::ROCDL::MFMAPermBAttr blgpAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_i32_4x4x4i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); elidedAttrs.push_back("blgp"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_i32_4x4x4i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_i32_4x4x4i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_scale_f32_16x16x128_f8f6f4 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::mfma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase(mfma_scale_f32_16x16x128_f8f6f4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::MatrixFormat mfma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue(); } ::mlir::ROCDL::MatrixFormat mfma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } uint32_t mfma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getOpselA() { auto attr = getOpselAAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getOpselB() { auto attr = getOpselBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail mfma_scale_f32_16x16x128_f8f6f4Adaptor::mfma_scale_f32_16x16x128_f8f6f4Adaptor(mfma_scale_f32_16x16x128_f8f6f4 op) : mfma_scale_f32_16x16x128_f8f6f4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_scale_f32_16x16x128_f8f6f4Adaptor::verify(::mlir::Location loc) { auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.scale.f32.16x16x128.f8f6f4' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.scale.f32.16x16x128.f8f6f4' op requires attribute 'cbsz'"); auto tblgen_opselA = getProperties().opselA; (void)tblgen_opselA; if (!tblgen_opselA) return emitError(loc, "'rocdl.mfma.scale.f32.16x16x128.f8f6f4' op requires attribute 'opselA'"); auto tblgen_opselB = getProperties().opselB; (void)tblgen_opselB; if (!tblgen_opselB) return emitError(loc, "'rocdl.mfma.scale.f32.16x16x128.f8f6f4' op requires attribute 'opselB'"); if (tblgen_cbsz && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(tblgen_cbsz)))) return emitError(loc, "'rocdl.mfma.scale.f32.16x16x128.f8f6f4' op attribute 'cbsz' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.scale.f32.16x16x128.f8f6f4' op attribute 'blgp' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"); if (tblgen_opselA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_opselA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_opselA).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.scale.f32.16x16x128.f8f6f4' op attribute 'opselA' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_opselB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_opselB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_opselB).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.scale.f32.16x16x128.f8f6f4' op attribute 'opselB' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult mfma_scale_f32_16x16x128_f8f6f4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.opselA; auto attr = dict.get("opselA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `opselA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.opselB; auto attr = dict.get("opselB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `opselB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_scale_f32_16x16x128_f8f6f4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } { const auto &propStorage = prop.opselA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("opselA", propStorage)); } { const auto &propStorage = prop.opselB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("opselB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_scale_f32_16x16x128_f8f6f4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer()), llvm::hash_value(prop.opselA.getAsOpaquePointer()), llvm::hash_value(prop.opselB.getAsOpaquePointer())); } std::optional mfma_scale_f32_16x16x128_f8f6f4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; if (name == "opselA") return prop.opselA; if (name == "opselB") return prop.opselB; return std::nullopt; } void mfma_scale_f32_16x16x128_f8f6f4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } if (name == "opselA") { prop.opselA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "opselB") { prop.opselB = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_scale_f32_16x16x128_f8f6f4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); if (prop.opselA) attrs.append("opselA", prop.opselA); if (prop.opselB) attrs.append("opselB", prop.opselB); } ::llvm::LogicalResult mfma_scale_f32_16x16x128_f8f6f4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(attr, "cbsz", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOpselAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "opselA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOpselBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "opselB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_scale_f32_16x16x128_f8f6f4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.opselA))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.opselB))) return ::mlir::failure(); return ::mlir::success(); } void mfma_scale_f32_16x16x128_f8f6f4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); writer.writeAttribute(prop.opselA); writer.writeAttribute(prop.opselB); } ::mlir::ROCDL::MatrixFormat mfma_scale_f32_16x16x128_f8f6f4::getCbsz() { auto attr = getCbszAttr(); return attr.getValue(); } ::mlir::ROCDL::MatrixFormat mfma_scale_f32_16x16x128_f8f6f4::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } uint32_t mfma_scale_f32_16x16x128_f8f6f4::getOpselA() { auto attr = getOpselAAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_scale_f32_16x16x128_f8f6f4::getOpselB() { auto attr = getOpselBAttr(); return attr.getValue().getZExtValue(); } void mfma_scale_f32_16x16x128_f8f6f4::setCbsz(::mlir::ROCDL::MatrixFormat attrValue) { getProperties().cbsz = ::mlir::ROCDL::MatrixFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_scale_f32_16x16x128_f8f6f4::setBlgp(::mlir::ROCDL::MatrixFormat attrValue) { getProperties().blgp = ::mlir::ROCDL::MatrixFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_scale_f32_16x16x128_f8f6f4::setOpselA(uint32_t attrValue) { getProperties().opselA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_scale_f32_16x16x128_f8f6f4::setOpselB(uint32_t attrValue) { getProperties().opselB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().blgp = blgp; odsState.getOrAddProperties().opselA = opselA; odsState.getOrAddProperties().opselB = opselB; odsState.addTypes(res); } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); } void mfma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().blgp = blgp; odsState.getOrAddProperties().opselA = opselA; odsState.getOrAddProperties().opselB = opselB; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); } void mfma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().cbsz = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), cbsz); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), blgp); odsState.getOrAddProperties().opselA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), opselA); odsState.getOrAddProperties().opselB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), opselB); odsState.addTypes(res); } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); } void mfma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().cbsz = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), cbsz); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), blgp); odsState.getOrAddProperties().opselA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), opselA); odsState.getOrAddProperties().opselB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), opselB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); } void mfma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_16x16x128_f8f6f4 mfma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_scale_f32_16x16x128_f8f6f4::verifyInvariantsImpl() { auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); auto tblgen_opselA = getProperties().opselA; (void)tblgen_opselA; if (!tblgen_opselA) return emitOpError("requires attribute 'opselA'"); auto tblgen_opselB = getProperties().opselB; (void)tblgen_opselB; if (!tblgen_opselB) return emitOpError("requires attribute 'opselB'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_opselA, "opselA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_opselB, "opselB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps42(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps42(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps43(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_scale_f32_16x16x128_f8f6f4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_scale_f32_16x16x128_f8f6f4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::MatrixFormatAttr cbszAttr; ::mlir::ROCDL::MatrixFormatAttr blgpAttr; ::mlir::IntegerAttr opselAAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleAOperands(&scaleARawOperand, 1); ::llvm::SMLoc scaleAOperandsLoc; (void)scaleAOperandsLoc; ::mlir::IntegerAttr opselBAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleBOperands(&scaleBRawOperand, 1); ::llvm::SMLoc scaleBOperandsLoc; (void)scaleBOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(opselAAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (opselAAttr) result.getOrAddProperties().opselA = opselAAttr; if (parser.parseComma()) return ::mlir::failure(); scaleAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(opselBAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (opselBAttr) result.getOrAddProperties().opselB = opselBAttr; if (parser.parseComma()) return ::mlir::failure(); scaleBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleBRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, scaleAOperands, scaleBOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_scale_f32_16x16x128_f8f6f4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOpselAAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOpselBAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleB(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("blgp"); elidedAttrs.push_back("opselA"); elidedAttrs.push_back("opselB"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_scale_f32_16x16x128_f8f6f4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::mfma_scale_f32_32x32x64_f8f6f4 definitions //===----------------------------------------------------------------------===// namespace detail { mfma_scale_f32_32x32x64_f8f6f4GenericAdaptorBase::mfma_scale_f32_32x32x64_f8f6f4GenericAdaptorBase(mfma_scale_f32_32x32x64_f8f6f4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::MatrixFormat mfma_scale_f32_32x32x64_f8f6f4GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue(); } ::mlir::ROCDL::MatrixFormat mfma_scale_f32_32x32x64_f8f6f4GenericAdaptorBase::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } uint32_t mfma_scale_f32_32x32x64_f8f6f4GenericAdaptorBase::getOpselA() { auto attr = getOpselAAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_scale_f32_32x32x64_f8f6f4GenericAdaptorBase::getOpselB() { auto attr = getOpselBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail mfma_scale_f32_32x32x64_f8f6f4Adaptor::mfma_scale_f32_32x32x64_f8f6f4Adaptor(mfma_scale_f32_32x32x64_f8f6f4 op) : mfma_scale_f32_32x32x64_f8f6f4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult mfma_scale_f32_32x32x64_f8f6f4Adaptor::verify(::mlir::Location loc) { auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitError(loc, "'rocdl.mfma.scale.f32.32x32x64.f8f6f4' op requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.mfma.scale.f32.32x32x64.f8f6f4' op requires attribute 'cbsz'"); auto tblgen_opselA = getProperties().opselA; (void)tblgen_opselA; if (!tblgen_opselA) return emitError(loc, "'rocdl.mfma.scale.f32.32x32x64.f8f6f4' op requires attribute 'opselA'"); auto tblgen_opselB = getProperties().opselB; (void)tblgen_opselB; if (!tblgen_opselB) return emitError(loc, "'rocdl.mfma.scale.f32.32x32x64.f8f6f4' op requires attribute 'opselB'"); if (tblgen_cbsz && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(tblgen_cbsz)))) return emitError(loc, "'rocdl.mfma.scale.f32.32x32x64.f8f6f4' op attribute 'cbsz' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"); if (tblgen_blgp && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(tblgen_blgp)))) return emitError(loc, "'rocdl.mfma.scale.f32.32x32x64.f8f6f4' op attribute 'blgp' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"); if (tblgen_opselA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_opselA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_opselA).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.scale.f32.32x32x64.f8f6f4' op attribute 'opselA' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_opselB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_opselB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_opselB).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.mfma.scale.f32.32x32x64.f8f6f4' op attribute 'opselB' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult mfma_scale_f32_32x32x64_f8f6f4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.blgp; auto attr = dict.get("blgp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `blgp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.opselA; auto attr = dict.get("opselA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `opselA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.opselB; auto attr = dict.get("opselB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `opselB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute mfma_scale_f32_32x32x64_f8f6f4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.blgp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("blgp", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } { const auto &propStorage = prop.opselA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("opselA", propStorage)); } { const auto &propStorage = prop.opselB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("opselB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code mfma_scale_f32_32x32x64_f8f6f4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.blgp.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer()), llvm::hash_value(prop.opselA.getAsOpaquePointer()), llvm::hash_value(prop.opselB.getAsOpaquePointer())); } std::optional mfma_scale_f32_32x32x64_f8f6f4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "blgp") return prop.blgp; if (name == "cbsz") return prop.cbsz; if (name == "opselA") return prop.opselA; if (name == "opselB") return prop.opselB; return std::nullopt; } void mfma_scale_f32_32x32x64_f8f6f4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "blgp") { prop.blgp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } if (name == "opselA") { prop.opselA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "opselB") { prop.opselB = ::llvm::dyn_cast_or_null>(value); return; } } void mfma_scale_f32_32x32x64_f8f6f4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.blgp) attrs.append("blgp", prop.blgp); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); if (prop.opselA) attrs.append("opselA", prop.opselA); if (prop.opselB) attrs.append("opselB", prop.opselB); } ::llvm::LogicalResult mfma_scale_f32_32x32x64_f8f6f4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getBlgpAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(attr, "blgp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(attr, "cbsz", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOpselAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "opselA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getOpselBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "opselB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult mfma_scale_f32_32x32x64_f8f6f4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.blgp))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.opselA))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.opselB))) return ::mlir::failure(); return ::mlir::success(); } void mfma_scale_f32_32x32x64_f8f6f4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.blgp); writer.writeAttribute(prop.cbsz); writer.writeAttribute(prop.opselA); writer.writeAttribute(prop.opselB); } ::mlir::ROCDL::MatrixFormat mfma_scale_f32_32x32x64_f8f6f4::getCbsz() { auto attr = getCbszAttr(); return attr.getValue(); } ::mlir::ROCDL::MatrixFormat mfma_scale_f32_32x32x64_f8f6f4::getBlgp() { auto attr = getBlgpAttr(); return attr.getValue(); } uint32_t mfma_scale_f32_32x32x64_f8f6f4::getOpselA() { auto attr = getOpselAAttr(); return attr.getValue().getZExtValue(); } uint32_t mfma_scale_f32_32x32x64_f8f6f4::getOpselB() { auto attr = getOpselBAttr(); return attr.getValue().getZExtValue(); } void mfma_scale_f32_32x32x64_f8f6f4::setCbsz(::mlir::ROCDL::MatrixFormat attrValue) { getProperties().cbsz = ::mlir::ROCDL::MatrixFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_scale_f32_32x32x64_f8f6f4::setBlgp(::mlir::ROCDL::MatrixFormat attrValue) { getProperties().blgp = ::mlir::ROCDL::MatrixFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void mfma_scale_f32_32x32x64_f8f6f4::setOpselA(uint32_t attrValue) { getProperties().opselA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_scale_f32_32x32x64_f8f6f4::setOpselB(uint32_t attrValue) { getProperties().opselB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void mfma_scale_f32_32x32x64_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().blgp = blgp; odsState.getOrAddProperties().opselA = opselA; odsState.getOrAddProperties().opselB = opselB; odsState.addTypes(res); } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); } void mfma_scale_f32_32x32x64_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().blgp = blgp; odsState.getOrAddProperties().opselA = opselA; odsState.getOrAddProperties().opselB = opselB; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormatAttr cbsz, ::mlir::ROCDL::MatrixFormatAttr blgp, ::mlir::IntegerAttr opselA, ::mlir::Value scaleA, ::mlir::IntegerAttr opselB, ::mlir::Value scaleB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); } void mfma_scale_f32_32x32x64_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().cbsz = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), cbsz); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), blgp); odsState.getOrAddProperties().opselA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), opselA); odsState.getOrAddProperties().opselB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), opselB); odsState.addTypes(res); } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); } void mfma_scale_f32_32x32x64_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().cbsz = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), cbsz); odsState.getOrAddProperties().blgp = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), blgp); odsState.getOrAddProperties().opselA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), opselA); odsState.getOrAddProperties().opselB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), opselB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::ROCDL::MatrixFormat cbsz, ::mlir::ROCDL::MatrixFormat blgp, uint32_t opselA, ::mlir::Value scaleA, uint32_t opselB, ::mlir::Value scaleB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(cbsz), std::forward(blgp), std::forward(opselA), std::forward(scaleA), std::forward(opselB), std::forward(scaleB)); } void mfma_scale_f32_32x32x64_f8f6f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void mfma_scale_f32_32x32x64_f8f6f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } mfma_scale_f32_32x32x64_f8f6f4 mfma_scale_f32_32x32x64_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult mfma_scale_f32_32x32x64_f8f6f4::verifyInvariantsImpl() { auto tblgen_blgp = getProperties().blgp; (void)tblgen_blgp; if (!tblgen_blgp) return emitOpError("requires attribute 'blgp'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); auto tblgen_opselA = getProperties().opselA; (void)tblgen_opselA; if (!tblgen_opselA) return emitOpError("requires attribute 'opselA'"); auto tblgen_opselB = getProperties().opselB; (void)tblgen_opselB; if (!tblgen_opselB) return emitOpError("requires attribute 'opselB'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(*this, tblgen_blgp, "blgp"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_opselA, "opselA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_opselB, "opselB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps42(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps42(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps43(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult mfma_scale_f32_32x32x64_f8f6f4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult mfma_scale_f32_32x32x64_f8f6f4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::MatrixFormatAttr cbszAttr; ::mlir::ROCDL::MatrixFormatAttr blgpAttr; ::mlir::IntegerAttr opselAAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleAOperands(&scaleARawOperand, 1); ::llvm::SMLoc scaleAOperandsLoc; (void)scaleAOperandsLoc; ::mlir::IntegerAttr opselBAttr; ::mlir::OpAsmParser::UnresolvedOperand scaleBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleBOperands(&scaleBRawOperand, 1); ::llvm::SMLoc scaleBOperandsLoc; (void)scaleBOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(blgpAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (blgpAttr) result.getOrAddProperties().blgp = blgpAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(opselAAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (opselAAttr) result.getOrAddProperties().opselA = opselAAttr; if (parser.parseComma()) return ::mlir::failure(); scaleAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(opselBAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (opselBAttr) result.getOrAddProperties().opselB = opselBAttr; if (parser.parseComma()) return ::mlir::failure(); scaleBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleBRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, scaleAOperands, scaleBOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void mfma_scale_f32_32x32x64_f8f6f4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getBlgpAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOpselAAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getOpselBAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleB(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("blgp"); elidedAttrs.push_back("opselA"); elidedAttrs.push_back("opselB"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::mfma_scale_f32_32x32x64_f8f6f4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::mfma_scale_f32_32x32x64_f8f6f4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::sdot2 definitions //===----------------------------------------------------------------------===// namespace detail { sdot2GenericAdaptorBase::sdot2GenericAdaptorBase(sdot2 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr sdot2GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool sdot2GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail sdot2Adaptor::sdot2Adaptor(sdot2 op) : sdot2GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult sdot2Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sdot2' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult sdot2::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute sdot2::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code sdot2::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer())); } std::optional sdot2::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; return std::nullopt; } void sdot2::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } } void sdot2::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); } ::llvm::LogicalResult sdot2::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult sdot2::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); return ::mlir::success(); } void sdot2::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); } bool sdot2::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void sdot2::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sdot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } sdot2 sdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot2 sdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sdot2 sdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot2 sdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } sdot2 sdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot2 sdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sdot2 sdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot2 sdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot2::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } sdot2 sdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot2 sdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void sdot2::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } sdot2 sdot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot2 sdot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void sdot2::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult sdot2::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult sdot2::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult sdot2::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void sdot2::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void sdot2::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::sdot2) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::sdot2GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::sdot4 definitions //===----------------------------------------------------------------------===// namespace detail { sdot4GenericAdaptorBase::sdot4GenericAdaptorBase(sdot4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr sdot4GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool sdot4GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail sdot4Adaptor::sdot4Adaptor(sdot4 op) : sdot4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult sdot4Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sdot4' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult sdot4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute sdot4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code sdot4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer())); } std::optional sdot4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; return std::nullopt; } void sdot4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } } void sdot4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); } ::llvm::LogicalResult sdot4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult sdot4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); return ::mlir::success(); } void sdot4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); } bool sdot4::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void sdot4::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sdot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } sdot4 sdot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot4 sdot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sdot4 sdot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot4 sdot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } sdot4 sdot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot4 sdot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sdot4 sdot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot4 sdot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } sdot4 sdot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot4 sdot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void sdot4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } sdot4 sdot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot4 sdot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void sdot4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult sdot4::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult sdot4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult sdot4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void sdot4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void sdot4::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::sdot4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::sdot4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::sdot8 definitions //===----------------------------------------------------------------------===// namespace detail { sdot8GenericAdaptorBase::sdot8GenericAdaptorBase(sdot8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr sdot8GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool sdot8GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail sdot8Adaptor::sdot8Adaptor(sdot8 op) : sdot8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult sdot8Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sdot8' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult sdot8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute sdot8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code sdot8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer())); } std::optional sdot8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; return std::nullopt; } void sdot8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } } void sdot8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); } ::llvm::LogicalResult sdot8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult sdot8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); return ::mlir::success(); } void sdot8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); } bool sdot8::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void sdot8::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sdot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } sdot8 sdot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot8 sdot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sdot8 sdot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot8 sdot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } sdot8 sdot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot8 sdot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sdot8 sdot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot8 sdot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void sdot8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } sdot8 sdot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot8 sdot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void sdot8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } sdot8 sdot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sdot8 sdot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void sdot8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult sdot8::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult sdot8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult sdot8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void sdot8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void sdot8::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::sdot8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::sdot8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x128_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::smfmac_f32_16x16x128_bf8_bf8GenericAdaptorBase(smfmac_f32_16x16x128_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x128_bf8_bf8Adaptor::smfmac_f32_16x16x128_bf8_bf8Adaptor(smfmac_f32_16x16x128_bf8_bf8 op) : smfmac_f32_16x16x128_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.bf8.bf8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.bf8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.bf8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.bf8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x128_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x128_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x128_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x128_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x128_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x128_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x128_bf8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x128_bf8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x128_bf8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x128_bf8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_bf8 smfmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x128_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x128_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x128_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x128_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::smfmac_f32_16x16x128_bf8_fp8GenericAdaptorBase(smfmac_f32_16x16x128_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x128_bf8_fp8Adaptor::smfmac_f32_16x16x128_bf8_fp8Adaptor(smfmac_f32_16x16x128_bf8_fp8 op) : smfmac_f32_16x16x128_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.bf8.fp8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.bf8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.bf8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.bf8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x128_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x128_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x128_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x128_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x128_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x128_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x128_bf8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x128_bf8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x128_bf8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x128_bf8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_bf8_fp8 smfmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x128_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x128_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x128_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x128_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::smfmac_f32_16x16x128_fp8_bf8GenericAdaptorBase(smfmac_f32_16x16x128_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x128_fp8_bf8Adaptor::smfmac_f32_16x16x128_fp8_bf8Adaptor(smfmac_f32_16x16x128_fp8_bf8 op) : smfmac_f32_16x16x128_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.fp8.bf8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.fp8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.fp8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.fp8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x128_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x128_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x128_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x128_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x128_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x128_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x128_fp8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x128_fp8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x128_fp8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x128_fp8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_bf8 smfmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x128_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x128_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x128_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x128_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::smfmac_f32_16x16x128_fp8_fp8GenericAdaptorBase(smfmac_f32_16x16x128_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x128_fp8_fp8Adaptor::smfmac_f32_16x16x128_fp8_fp8Adaptor(smfmac_f32_16x16x128_fp8_fp8 op) : smfmac_f32_16x16x128_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.fp8.fp8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.fp8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.fp8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x128.fp8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x128_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x128_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x128_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x128_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x128_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x128_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x128_fp8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x128_fp8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x128_fp8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x128_fp8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x128_fp8_fp8 smfmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x128_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x128_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x128_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x128_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x32_bf16GenericAdaptorBase::smfmac_f32_16x16x32_bf16GenericAdaptorBase(smfmac_f32_16x16x32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x32_bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x32_bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x32_bf16Adaptor::smfmac_f32_16x16x32_bf16Adaptor(smfmac_f32_16x16x32_bf16 op) : smfmac_f32_16x16x32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x32_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x32.bf16' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x32.bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x32.bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x32.bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x32_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x32_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x32_bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x32_bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x32_bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x32_bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_bf16 smfmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x32_bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps45(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x32_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x32_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x32_f16 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x32_f16GenericAdaptorBase::smfmac_f32_16x16x32_f16GenericAdaptorBase(smfmac_f32_16x16x32_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x32_f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x32_f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x32_f16Adaptor::smfmac_f32_16x16x32_f16Adaptor(smfmac_f32_16x16x32_f16 op) : smfmac_f32_16x16x32_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x32_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x32.f16' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x32.f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x32.f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x32.f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x32_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x32_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x32_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x32_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x32_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x32_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x32_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x32_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x32_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x32_f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x32_f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x32_f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x32_f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x32_f16 smfmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x32_f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x32_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x32_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x32_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x32_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x32_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x64_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x64_bf16GenericAdaptorBase::smfmac_f32_16x16x64_bf16GenericAdaptorBase(smfmac_f32_16x16x64_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x64_bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x64_bf16Adaptor::smfmac_f32_16x16x64_bf16Adaptor(smfmac_f32_16x16x64_bf16 op) : smfmac_f32_16x16x64_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x64_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf16' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x64_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x64_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x64_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x64_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x64_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x64_bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x64_bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf16 smfmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps9(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x64_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x64_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x64_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x64_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x64_bf8_bf8GenericAdaptorBase::smfmac_f32_16x16x64_bf8_bf8GenericAdaptorBase(smfmac_f32_16x16x64_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x64_bf8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_bf8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x64_bf8_bf8Adaptor::smfmac_f32_16x16x64_bf8_bf8Adaptor(smfmac_f32_16x16x64_bf8_bf8 op) : smfmac_f32_16x16x64_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf8.bf8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x64_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x64_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x64_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x64_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x64_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x64_bf8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_bf8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x64_bf8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_bf8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_bf8 smfmac_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x64_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x64_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x64_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x64_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x64_bf8_fp8GenericAdaptorBase::smfmac_f32_16x16x64_bf8_fp8GenericAdaptorBase(smfmac_f32_16x16x64_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x64_bf8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_bf8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x64_bf8_fp8Adaptor::smfmac_f32_16x16x64_bf8_fp8Adaptor(smfmac_f32_16x16x64_bf8_fp8 op) : smfmac_f32_16x16x64_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf8.fp8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.bf8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x64_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x64_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x64_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x64_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x64_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x64_bf8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_bf8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x64_bf8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_bf8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_bf8_fp8 smfmac_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x64_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x64_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x64_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x64_f16 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x64_f16GenericAdaptorBase::smfmac_f32_16x16x64_f16GenericAdaptorBase(smfmac_f32_16x16x64_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x64_f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x64_f16Adaptor::smfmac_f32_16x16x64_f16Adaptor(smfmac_f32_16x16x64_f16 op) : smfmac_f32_16x16x64_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x64_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.f16' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x64_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x64_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x64_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x64_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x64_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x64_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x64_f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x64_f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x64_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_f16 smfmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x64_f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps10(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x64_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x64_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x64_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x64_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x64_fp8_bf8GenericAdaptorBase::smfmac_f32_16x16x64_fp8_bf8GenericAdaptorBase(smfmac_f32_16x16x64_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x64_fp8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_fp8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x64_fp8_bf8Adaptor::smfmac_f32_16x16x64_fp8_bf8Adaptor(smfmac_f32_16x16x64_fp8_bf8 op) : smfmac_f32_16x16x64_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.fp8.bf8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.fp8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.fp8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.fp8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x64_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x64_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x64_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x64_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x64_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x64_fp8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_fp8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x64_fp8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_fp8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_bf8 smfmac_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x64_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x64_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x64_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_16x16x64_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_16x16x64_fp8_fp8GenericAdaptorBase::smfmac_f32_16x16x64_fp8_fp8GenericAdaptorBase(smfmac_f32_16x16x64_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_16x16x64_fp8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_fp8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_16x16x64_fp8_fp8Adaptor::smfmac_f32_16x16x64_fp8_fp8Adaptor(smfmac_f32_16x16x64_fp8_fp8 op) : smfmac_f32_16x16x64_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.fp8.fp8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.fp8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.fp8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.16x16x64.fp8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_16x16x64_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_16x16x64_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_16x16x64_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_16x16x64_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_16x16x64_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_16x16x64_fp8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_16x16x64_fp8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_16x16x64_fp8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_fp8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_16x16x64_fp8_fp8 smfmac_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps36(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_16x16x64_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_16x16x64_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_16x16x64_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_16x16x64_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_16x16x64_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x16_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x16_bf16GenericAdaptorBase::smfmac_f32_32x32x16_bf16GenericAdaptorBase(smfmac_f32_32x32x16_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x16_bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x16_bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x16_bf16Adaptor::smfmac_f32_32x32x16_bf16Adaptor(smfmac_f32_32x32x16_bf16 op) : smfmac_f32_32x32x16_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x16_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x16.bf16' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x16.bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x16.bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x16.bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x16_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x16_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x16_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x16_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x16_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x16_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x16_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x16_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x16_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x16_bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x16_bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x16_bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x16_bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_bf16 smfmac_f32_32x32x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x16_bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps35(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps45(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x16_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x16_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x16_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x16_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x16_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x16_f16 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x16_f16GenericAdaptorBase::smfmac_f32_32x32x16_f16GenericAdaptorBase(smfmac_f32_32x32x16_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x16_f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x16_f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x16_f16Adaptor::smfmac_f32_32x32x16_f16Adaptor(smfmac_f32_32x32x16_f16 op) : smfmac_f32_32x32x16_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x16_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x16.f16' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x16.f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x16.f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x16.f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x16_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x16_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x16_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x16_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x16_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x16_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x16_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x16_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x16_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x16_f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x16_f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x16_f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x16_f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x16_f16 smfmac_f32_32x32x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x16_f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps37(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x16_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x16_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x16_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x16_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x16_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x32_bf16GenericAdaptorBase::smfmac_f32_32x32x32_bf16GenericAdaptorBase(smfmac_f32_32x32x32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x32_bf16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_bf16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x32_bf16Adaptor::smfmac_f32_32x32x32_bf16Adaptor(smfmac_f32_32x32x32_bf16 op) : smfmac_f32_32x32x32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x32_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf16' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x32_bf16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_bf16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x32_bf16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_bf16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf16 smfmac_f32_32x32x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps13(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps9(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x32_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x32_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x32_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x32_bf8_bf8GenericAdaptorBase::smfmac_f32_32x32x32_bf8_bf8GenericAdaptorBase(smfmac_f32_32x32x32_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x32_bf8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_bf8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x32_bf8_bf8Adaptor::smfmac_f32_32x32x32_bf8_bf8Adaptor(smfmac_f32_32x32x32_bf8_bf8 op) : smfmac_f32_32x32x32_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf8.bf8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x32_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x32_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x32_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x32_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x32_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x32_bf8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_bf8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x32_bf8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_bf8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x32_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_bf8 smfmac_f32_32x32x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x32_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x32_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x32_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x32_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x32_bf8_fp8GenericAdaptorBase::smfmac_f32_32x32x32_bf8_fp8GenericAdaptorBase(smfmac_f32_32x32x32_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x32_bf8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_bf8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x32_bf8_fp8Adaptor::smfmac_f32_32x32x32_bf8_fp8Adaptor(smfmac_f32_32x32x32_bf8_fp8 op) : smfmac_f32_32x32x32_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf8.fp8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.bf8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x32_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x32_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x32_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x32_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x32_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x32_bf8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_bf8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x32_bf8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_bf8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x32_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_bf8_fp8 smfmac_f32_32x32x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x32_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x32_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x32_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x32_f16 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x32_f16GenericAdaptorBase::smfmac_f32_32x32x32_f16GenericAdaptorBase(smfmac_f32_32x32x32_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x32_f16GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_f16GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x32_f16Adaptor::smfmac_f32_32x32x32_f16Adaptor(smfmac_f32_32x32x32_f16 op) : smfmac_f32_32x32x32_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x32_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.f16' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.f16' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.f16' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.f16' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x32_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x32_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x32_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x32_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x32_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x32_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x32_f16::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_f16::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x32_f16::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_f16::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_f16 smfmac_f32_32x32x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x32_f16::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps14(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps10(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x32_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x32_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x32_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x32_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x32_fp8_bf8GenericAdaptorBase::smfmac_f32_32x32x32_fp8_bf8GenericAdaptorBase(smfmac_f32_32x32x32_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x32_fp8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_fp8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x32_fp8_bf8Adaptor::smfmac_f32_32x32x32_fp8_bf8Adaptor(smfmac_f32_32x32x32_fp8_bf8 op) : smfmac_f32_32x32x32_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.fp8.bf8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.fp8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.fp8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.fp8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x32_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x32_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x32_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x32_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x32_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x32_fp8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_fp8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x32_fp8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_fp8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x32_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_bf8 smfmac_f32_32x32x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x32_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x32_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x32_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x32_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x32_fp8_fp8GenericAdaptorBase::smfmac_f32_32x32x32_fp8_fp8GenericAdaptorBase(smfmac_f32_32x32x32_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x32_fp8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_fp8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x32_fp8_fp8Adaptor::smfmac_f32_32x32x32_fp8_fp8Adaptor(smfmac_f32_32x32x32_fp8_fp8 op) : smfmac_f32_32x32x32_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.fp8.fp8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.fp8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.fp8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x32.fp8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x32_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x32_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x32_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x32_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x32_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x32_fp8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x32_fp8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x32_fp8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_fp8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x32_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x32_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x32_fp8_fp8 smfmac_f32_32x32x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x32_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x32_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x32_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x32_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x32_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x64_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x64_bf8_bf8GenericAdaptorBase::smfmac_f32_32x32x64_bf8_bf8GenericAdaptorBase(smfmac_f32_32x32x64_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x64_bf8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x64_bf8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x64_bf8_bf8Adaptor::smfmac_f32_32x32x64_bf8_bf8Adaptor(smfmac_f32_32x32x64_bf8_bf8 op) : smfmac_f32_32x32x64_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.bf8.bf8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.bf8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.bf8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.bf8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x64_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x64_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x64_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x64_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x64_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x64_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x64_bf8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x64_bf8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x64_bf8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x64_bf8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x64_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_bf8 smfmac_f32_32x32x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x64_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x64_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x64_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x64_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x64_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x64_bf8_fp8GenericAdaptorBase::smfmac_f32_32x32x64_bf8_fp8GenericAdaptorBase(smfmac_f32_32x32x64_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x64_bf8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x64_bf8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x64_bf8_fp8Adaptor::smfmac_f32_32x32x64_bf8_fp8Adaptor(smfmac_f32_32x32x64_bf8_fp8 op) : smfmac_f32_32x32x64_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.bf8.fp8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.bf8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.bf8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.bf8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x64_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x64_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x64_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x64_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x64_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x64_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x64_bf8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x64_bf8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x64_bf8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x64_bf8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x64_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_bf8_fp8 smfmac_f32_32x32x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x64_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x64_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x64_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x64_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x64_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x64_fp8_bf8GenericAdaptorBase::smfmac_f32_32x32x64_fp8_bf8GenericAdaptorBase(smfmac_f32_32x32x64_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x64_fp8_bf8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x64_fp8_bf8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x64_fp8_bf8Adaptor::smfmac_f32_32x32x64_fp8_bf8Adaptor(smfmac_f32_32x32x64_fp8_bf8 op) : smfmac_f32_32x32x64_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.fp8.bf8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.fp8.bf8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.fp8.bf8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.fp8.bf8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x64_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x64_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x64_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x64_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x64_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x64_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x64_fp8_bf8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x64_fp8_bf8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x64_fp8_bf8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x64_fp8_bf8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x64_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_bf8 smfmac_f32_32x32x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_bf8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x64_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x64_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x64_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x64_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_f32_32x32x64_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_f32_32x32x64_fp8_fp8GenericAdaptorBase::smfmac_f32_32x32x64_fp8_fp8GenericAdaptorBase(smfmac_f32_32x32x64_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_f32_32x32x64_fp8_fp8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x64_fp8_fp8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_f32_32x32x64_fp8_fp8Adaptor::smfmac_f32_32x32x64_fp8_fp8Adaptor(smfmac_f32_32x32x64_fp8_fp8 op) : smfmac_f32_32x32x64_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.fp8.fp8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.fp8.fp8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.fp8.fp8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.f32.32x32x64.fp8.fp8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_f32_32x32x64_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_f32_32x32x64_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_f32_32x32x64_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_f32_32x32x64_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_f32_32x32x64_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x64_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_f32_32x32x64_fp8_fp8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_f32_32x32x64_fp8_fp8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_f32_32x32x64_fp8_fp8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x64_fp8_fp8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_f32_32x32x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_f32_32x32x64_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_f32_32x32x64_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_f32_32x32x64_fp8_fp8 smfmac_f32_32x32x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_fp8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps11(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_f32_32x32x64_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_f32_32x32x64_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_f32_32x32x64_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_f32_32x32x64_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_f32_32x32x64_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_i32_16x16x128_i8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_i32_16x16x128_i8GenericAdaptorBase::smfmac_i32_16x16x128_i8GenericAdaptorBase(smfmac_i32_16x16x128_i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_i32_16x16x128_i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_i32_16x16x128_i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_i32_16x16x128_i8Adaptor::smfmac_i32_16x16x128_i8Adaptor(smfmac_i32_16x16x128_i8 op) : smfmac_i32_16x16x128_i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_i32_16x16x128_i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.i32.16x16x128.i8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.i32.16x16x128.i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.i32.16x16x128.i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.i32.16x16x128.i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_16x16x128_i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_i32_16x16x128_i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_i32_16x16x128_i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_i32_16x16x128_i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_i32_16x16x128_i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_i32_16x16x128_i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_i32_16x16x128_i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_16x16x128_i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_i32_16x16x128_i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_i32_16x16x128_i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_i32_16x16x128_i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_i32_16x16x128_i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_i32_16x16x128_i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_i32_16x16x128_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_16x16x128_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_16x16x128_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_16x16x128_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_16x16x128_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_i32_16x16x128_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x128_i8 smfmac_i32_16x16x128_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_i32_16x16x128_i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_16x16x128_i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_i32_16x16x128_i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_i32_16x16x128_i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_i32_16x16x128_i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_i32_16x16x128_i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_i32_16x16x64_i8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_i32_16x16x64_i8GenericAdaptorBase::smfmac_i32_16x16x64_i8GenericAdaptorBase(smfmac_i32_16x16x64_i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_i32_16x16x64_i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_i32_16x16x64_i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_i32_16x16x64_i8Adaptor::smfmac_i32_16x16x64_i8Adaptor(smfmac_i32_16x16x64_i8 op) : smfmac_i32_16x16x64_i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_i32_16x16x64_i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.i32.16x16x64.i8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.i32.16x16x64.i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.i32.16x16x64.i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.i32.16x16x64.i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_16x16x64_i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_i32_16x16x64_i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_i32_16x16x64_i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_i32_16x16x64_i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_i32_16x16x64_i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_i32_16x16x64_i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_i32_16x16x64_i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_16x16x64_i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_i32_16x16x64_i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_i32_16x16x64_i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_i32_16x16x64_i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_i32_16x16x64_i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_i32_16x16x64_i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_i32_16x16x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_16x16x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_16x16x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_16x16x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_16x16x64_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_i32_16x16x64_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_16x16x64_i8 smfmac_i32_16x16x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_i32_16x16x64_i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_16x16x64_i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_i32_16x16x64_i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_i32_16x16x64_i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_i32_16x16x64_i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_i32_16x16x64_i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_i32_32x32x32_i8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_i32_32x32x32_i8GenericAdaptorBase::smfmac_i32_32x32x32_i8GenericAdaptorBase(smfmac_i32_32x32x32_i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_i32_32x32x32_i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_i32_32x32x32_i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_i32_32x32x32_i8Adaptor::smfmac_i32_32x32x32_i8Adaptor(smfmac_i32_32x32x32_i8 op) : smfmac_i32_32x32x32_i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_i32_32x32x32_i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.i32.32x32x32.i8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.i32.32x32x32.i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.i32.32x32x32.i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.i32.32x32x32.i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_32x32x32_i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_i32_32x32x32_i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_i32_32x32x32_i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_i32_32x32x32_i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_i32_32x32x32_i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_i32_32x32x32_i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_i32_32x32x32_i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_32x32x32_i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_i32_32x32x32_i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_i32_32x32x32_i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_i32_32x32x32_i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_i32_32x32x32_i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_i32_32x32x32_i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_i32_32x32x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_32x32x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_32x32x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_32x32x32_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_32x32x32_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_i32_32x32x32_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x32_i8 smfmac_i32_32x32x32_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_i32_32x32x32_i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps12(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_32x32x32_i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_i32_32x32x32_i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_i32_32x32x32_i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_i32_32x32x32_i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_i32_32x32x32_i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::smfmac_i32_32x32x64_i8 definitions //===----------------------------------------------------------------------===// namespace detail { smfmac_i32_32x32x64_i8GenericAdaptorBase::smfmac_i32_32x32x64_i8GenericAdaptorBase(smfmac_i32_32x32x64_i8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} uint32_t smfmac_i32_32x32x64_i8GenericAdaptorBase::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_i32_32x32x64_i8GenericAdaptorBase::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } } // namespace detail smfmac_i32_32x32x64_i8Adaptor::smfmac_i32_32x32x64_i8Adaptor(smfmac_i32_32x32x64_i8 op) : smfmac_i32_32x32x64_i8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult smfmac_i32_32x32x64_i8Adaptor::verify(::mlir::Location loc) { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitError(loc, "'rocdl.smfmac.i32.32x32x64.i8' op requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitError(loc, "'rocdl.smfmac.i32.32x32x64.i8' op requires attribute 'cbsz'"); if (tblgen_cbsz && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_cbsz))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_cbsz).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.i32.32x32x64.i8' op attribute 'cbsz' failed to satisfy constraint: 32-bit signless integer attribute"); if (tblgen_abid && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_abid))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_abid).getType().isSignlessInteger(32))))) return emitError(loc, "'rocdl.smfmac.i32.32x32x64.i8' op attribute 'abid' failed to satisfy constraint: 32-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_32x32x64_i8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.abid; auto attr = dict.get("abid"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `abid` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.cbsz; auto attr = dict.get("cbsz"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `cbsz` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute smfmac_i32_32x32x64_i8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.abid; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("abid", propStorage)); } { const auto &propStorage = prop.cbsz; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("cbsz", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code smfmac_i32_32x32x64_i8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.abid.getAsOpaquePointer()), llvm::hash_value(prop.cbsz.getAsOpaquePointer())); } std::optional smfmac_i32_32x32x64_i8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "abid") return prop.abid; if (name == "cbsz") return prop.cbsz; return std::nullopt; } void smfmac_i32_32x32x64_i8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "abid") { prop.abid = ::llvm::dyn_cast_or_null>(value); return; } if (name == "cbsz") { prop.cbsz = ::llvm::dyn_cast_or_null>(value); return; } } void smfmac_i32_32x32x64_i8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.abid) attrs.append("abid", prop.abid); if (prop.cbsz) attrs.append("cbsz", prop.cbsz); } ::llvm::LogicalResult smfmac_i32_32x32x64_i8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getAbidAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "abid", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getCbszAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(attr, "cbsz", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_32x32x64_i8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.abid))) return ::mlir::failure(); if (::mlir::failed(reader.readAttribute(prop.cbsz))) return ::mlir::failure(); return ::mlir::success(); } void smfmac_i32_32x32x64_i8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.abid); writer.writeAttribute(prop.cbsz); } uint32_t smfmac_i32_32x32x64_i8::getCbsz() { auto attr = getCbszAttr(); return attr.getValue().getZExtValue(); } uint32_t smfmac_i32_32x32x64_i8::getAbid() { auto attr = getAbidAttr(); return attr.getValue().getZExtValue(); } void smfmac_i32_32x32x64_i8::setCbsz(uint32_t attrValue) { getProperties().cbsz = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_i32_32x32x64_i8::setAbid(uint32_t attrValue) { getProperties().abid = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(32), attrValue); } void smfmac_i32_32x32x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; odsState.addTypes(res); } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_32x32x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = cbsz; odsState.getOrAddProperties().abid = abid; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr cbsz, ::mlir::IntegerAttr abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_32x32x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); odsState.addTypes(res); } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_32x32x64_i8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().cbsz = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), cbsz); odsState.getOrAddProperties().abid = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(32), abid); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, uint32_t cbsz, uint32_t abid) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(cbsz), std::forward(abid)); } void smfmac_i32_32x32x64_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void smfmac_i32_32x32x64_i8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } smfmac_i32_32x32x64_i8 smfmac_i32_32x32x64_i8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult smfmac_i32_32x32x64_i8::verifyInvariantsImpl() { auto tblgen_abid = getProperties().abid; (void)tblgen_abid; if (!tblgen_abid) return emitOpError("requires attribute 'abid'"); auto tblgen_cbsz = getProperties().cbsz; (void)tblgen_cbsz; if (!tblgen_cbsz) return emitOpError("requires attribute 'cbsz'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_cbsz, "cbsz"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps1(*this, tblgen_abid, "abid"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps32(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps34(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps40(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult smfmac_i32_32x32x64_i8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult smfmac_i32_32x32x64_i8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::mlir::IntegerAttr cbszAttr; ::mlir::IntegerAttr abidAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(cbszAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (cbszAttr) result.getOrAddProperties().cbsz = cbszAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(abidAttr, parser.getBuilder().getIntegerType(32))) { return ::mlir::failure(); } if (abidAttr) result.getOrAddProperties().abid = abidAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void smfmac_i32_32x32x64_i8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getCbszAttr()); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getAbidAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("cbsz"); elidedAttrs.push_back("abid"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::smfmac_i32_32x32x64_i8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::smfmac_i32_32x32x64_i8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::sudot4 definitions //===----------------------------------------------------------------------===// namespace detail { sudot4GenericAdaptorBase::sudot4GenericAdaptorBase(sudot4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr sudot4GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool sudot4GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr sudot4GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool sudot4GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr sudot4GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool sudot4GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail sudot4Adaptor::sudot4Adaptor(sudot4 op) : sudot4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult sudot4Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sudot4' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sudot4' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sudot4' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult sudot4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute sudot4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code sudot4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional sudot4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void sudot4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void sudot4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult sudot4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult sudot4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void sudot4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool sudot4::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool sudot4::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool sudot4::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void sudot4::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sudot4::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sudot4::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sudot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } sudot4 sudot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot4 sudot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void sudot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sudot4 sudot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot4 sudot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void sudot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } sudot4 sudot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot4 sudot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void sudot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sudot4 sudot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot4 sudot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void sudot4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } sudot4 sudot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot4 sudot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void sudot4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } sudot4 sudot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot4 sudot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void sudot4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult sudot4::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult sudot4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult sudot4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void sudot4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void sudot4::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::sudot4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::sudot4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::sudot8 definitions //===----------------------------------------------------------------------===// namespace detail { sudot8GenericAdaptorBase::sudot8GenericAdaptorBase(sudot8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr sudot8GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool sudot8GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr sudot8GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool sudot8GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr sudot8GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool sudot8GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail sudot8Adaptor::sudot8Adaptor(sudot8 op) : sudot8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult sudot8Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sudot8' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sudot8' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.sudot8' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult sudot8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute sudot8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code sudot8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional sudot8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void sudot8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void sudot8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult sudot8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult sudot8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void sudot8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool sudot8::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool sudot8::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool sudot8::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void sudot8::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sudot8::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sudot8::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void sudot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } sudot8 sudot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot8 sudot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void sudot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sudot8 sudot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot8 sudot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void sudot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } sudot8 sudot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot8 sudot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void sudot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } sudot8 sudot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot8 sudot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void sudot8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } sudot8 sudot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot8 sudot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void sudot8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } sudot8 sudot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } sudot8 sudot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void sudot8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult sudot8::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult sudot8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult sudot8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void sudot8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void sudot8::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::sudot8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::sudot8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_bf16_16x16x32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_bf16_16x16x32_bf16GenericAdaptorBase::swmmac_bf16_16x16x32_bf16GenericAdaptorBase(swmmac_bf16_16x16x32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail swmmac_bf16_16x16x32_bf16Adaptor::swmmac_bf16_16x16x32_bf16Adaptor(swmmac_bf16_16x16x32_bf16 op) : swmmac_bf16_16x16x32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_bf16_16x16x32_bf16Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult swmmac_bf16_16x16x32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute swmmac_bf16_16x16x32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_bf16_16x16x32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional swmmac_bf16_16x16x32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void swmmac_bf16_16x16x32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void swmmac_bf16_16x16x32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult swmmac_bf16_16x16x32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void swmmac_bf16_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.addTypes(res); } swmmac_bf16_16x16x32_bf16 swmmac_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x32_bf16 swmmac_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_bf16_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_bf16_16x16x32_bf16 swmmac_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x32_bf16 swmmac_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_bf16_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_bf16_16x16x32_bf16 swmmac_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x32_bf16 swmmac_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_bf16_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_bf16_16x16x32_bf16 swmmac_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x32_bf16 swmmac_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult swmmac_bf16_16x16x32_bf16::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps46(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps46(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps46(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps46(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_bf16_16x16x32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_bf16_16x16x32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_bf16_16x16x32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_bf16_16x16x32_bf16) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_bf16_16x16x64_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_bf16_16x16x64_bf16GenericAdaptorBase::swmmac_bf16_16x16x64_bf16GenericAdaptorBase(swmmac_bf16_16x16x64_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_bf16_16x16x64_bf16GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_bf16_16x16x64_bf16GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_bf16_16x16x64_bf16GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_bf16_16x16x64_bf16GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_bf16_16x16x64_bf16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_bf16_16x16x64_bf16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_bf16_16x16x64_bf16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_bf16_16x16x64_bf16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_bf16_16x16x64_bf16Adaptor::swmmac_bf16_16x16x64_bf16Adaptor(swmmac_bf16_16x16x64_bf16 op) : swmmac_bf16_16x16x64_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_bf16_16x16x64_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.bf16.16x16x64.bf16' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.bf16.16x16x64.bf16' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.bf16.16x16x64.bf16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.bf16.16x16x64.bf16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_bf16_16x16x64_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_bf16_16x16x64_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_bf16_16x16x64_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_bf16_16x16x64_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_bf16_16x16x64_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_bf16_16x16x64_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_bf16_16x16x64_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_bf16_16x16x64_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_bf16_16x16x64_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_bf16_16x16x64_bf16::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_bf16_16x16x64_bf16::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_bf16_16x16x64_bf16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_bf16_16x16x64_bf16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_bf16_16x16x64_bf16::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_bf16_16x16x64_bf16::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_bf16_16x16x64_bf16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_bf16_16x16x64_bf16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_bf16_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_bf16_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_bf16_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_bf16_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_bf16_16x16x64_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_bf16_16x16x64_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16_16x16x64_bf16 swmmac_bf16_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_bf16_16x16x64_bf16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_bf16_16x16x64_bf16::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_bf16_16x16x64_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_bf16_16x16x64_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_bf16_16x16x64_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_bf16_16x16x64_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_bf16_16x16x64_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_bf16f32_16x16x64_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase(swmmac_bf16f32_16x16x64_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_bf16f32_16x16x64_bf16Adaptor::swmmac_bf16f32_16x16x64_bf16Adaptor(swmmac_bf16f32_16x16x64_bf16 op) : swmmac_bf16f32_16x16x64_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_bf16f32_16x16x64_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.bf16f32.16x16x64.bf16' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.bf16f32.16x16x64.bf16' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.bf16f32.16x16x64.bf16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.bf16f32.16x16x64.bf16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_bf16f32_16x16x64_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_bf16f32_16x16x64_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_bf16f32_16x16x64_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_bf16f32_16x16x64_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_bf16f32_16x16x64_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_bf16f32_16x16x64_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_bf16f32_16x16x64_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_bf16f32_16x16x64_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_bf16f32_16x16x64_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_bf16f32_16x16x64_bf16::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_bf16f32_16x16x64_bf16::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_bf16f32_16x16x64_bf16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_bf16f32_16x16x64_bf16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_bf16f32_16x16x64_bf16::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_bf16f32_16x16x64_bf16::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_bf16f32_16x16x64_bf16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_bf16f32_16x16x64_bf16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_bf16f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_bf16f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_bf16f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_bf16f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_bf16f32_16x16x64_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_bf16f32_16x16x64_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_bf16f32_16x16x64_bf16 swmmac_bf16f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_bf16f32_16x16x64_bf16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_bf16f32_16x16x64_bf16::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_bf16f32_16x16x64_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_bf16f32_16x16x64_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_bf16f32_16x16x64_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_bf16f32_16x16x64_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_bf16f32_16x16x64_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f16_16x16x128_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f16_16x16x128_bf8_bf8GenericAdaptorBase::swmmac_f16_16x16x128_bf8_bf8GenericAdaptorBase(swmmac_f16_16x16x128_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f16_16x16x128_bf8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f16_16x16x128_bf8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f16_16x16x128_bf8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f16_16x16x128_bf8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f16_16x16x128_bf8_bf8Adaptor::swmmac_f16_16x16x128_bf8_bf8Adaptor(swmmac_f16_16x16x128_bf8_bf8 op) : swmmac_f16_16x16x128_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x128.bf8.bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x128.bf8.bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f16_16x16x128_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f16_16x16x128_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional swmmac_f16_16x16x128_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void swmmac_f16_16x16x128_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f16_16x16x128_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x128_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } bool swmmac_f16_16x16x128_bf8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f16_16x16x128_bf8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f16_16x16x128_bf8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x128_bf8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_bf8 swmmac_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f16_16x16x128_bf8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_bf8::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f16_16x16x128_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x128_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f16_16x16x128_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f16_16x16x128_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f16_16x16x128_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f16_16x16x128_bf8_fp8GenericAdaptorBase::swmmac_f16_16x16x128_bf8_fp8GenericAdaptorBase(swmmac_f16_16x16x128_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f16_16x16x128_bf8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f16_16x16x128_bf8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f16_16x16x128_bf8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f16_16x16x128_bf8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f16_16x16x128_bf8_fp8Adaptor::swmmac_f16_16x16x128_bf8_fp8Adaptor(swmmac_f16_16x16x128_bf8_fp8 op) : swmmac_f16_16x16x128_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x128.bf8.fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x128.bf8.fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f16_16x16x128_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f16_16x16x128_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional swmmac_f16_16x16x128_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void swmmac_f16_16x16x128_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f16_16x16x128_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x128_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } bool swmmac_f16_16x16x128_bf8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f16_16x16x128_bf8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f16_16x16x128_bf8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x128_bf8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_bf8_fp8 swmmac_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f16_16x16x128_bf8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_fp8::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f16_16x16x128_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x128_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f16_16x16x128_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f16_16x16x128_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f16_16x16x128_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f16_16x16x128_fp8_bf8GenericAdaptorBase::swmmac_f16_16x16x128_fp8_bf8GenericAdaptorBase(swmmac_f16_16x16x128_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f16_16x16x128_fp8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f16_16x16x128_fp8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f16_16x16x128_fp8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f16_16x16x128_fp8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f16_16x16x128_fp8_bf8Adaptor::swmmac_f16_16x16x128_fp8_bf8Adaptor(swmmac_f16_16x16x128_fp8_bf8 op) : swmmac_f16_16x16x128_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x128.fp8.bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x128.fp8.bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f16_16x16x128_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f16_16x16x128_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional swmmac_f16_16x16x128_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void swmmac_f16_16x16x128_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f16_16x16x128_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x128_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } bool swmmac_f16_16x16x128_fp8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f16_16x16x128_fp8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f16_16x16x128_fp8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x128_fp8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_bf8 swmmac_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f16_16x16x128_fp8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_bf8::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f16_16x16x128_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x128_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f16_16x16x128_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f16_16x16x128_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f16_16x16x128_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f16_16x16x128_fp8_fp8GenericAdaptorBase::swmmac_f16_16x16x128_fp8_fp8GenericAdaptorBase(swmmac_f16_16x16x128_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f16_16x16x128_fp8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f16_16x16x128_fp8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f16_16x16x128_fp8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f16_16x16x128_fp8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f16_16x16x128_fp8_fp8Adaptor::swmmac_f16_16x16x128_fp8_fp8Adaptor(swmmac_f16_16x16x128_fp8_fp8 op) : swmmac_f16_16x16x128_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x128.fp8.fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x128.fp8.fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f16_16x16x128_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f16_16x16x128_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional swmmac_f16_16x16x128_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void swmmac_f16_16x16x128_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f16_16x16x128_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x128_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } bool swmmac_f16_16x16x128_fp8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f16_16x16x128_fp8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f16_16x16x128_fp8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x128_fp8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x128_fp8_fp8 swmmac_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f16_16x16x128_fp8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_fp8::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x128_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f16_16x16x128_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x128_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f16_16x16x128_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f16_16x16x128_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f16_16x16x32_f16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f16_16x16x32_f16GenericAdaptorBase::swmmac_f16_16x16x32_f16GenericAdaptorBase(swmmac_f16_16x16x32_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail swmmac_f16_16x16x32_f16Adaptor::swmmac_f16_16x16x32_f16Adaptor(swmmac_f16_16x16x32_f16 op) : swmmac_f16_16x16x32_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f16_16x16x32_f16Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x32_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute swmmac_f16_16x16x32_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f16_16x16x32_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional swmmac_f16_16x16x32_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void swmmac_f16_16x16x32_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void swmmac_f16_16x16x32_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult swmmac_f16_16x16x32_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void swmmac_f16_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.addTypes(res); } swmmac_f16_16x16x32_f16 swmmac_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x32_f16 swmmac_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f16_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x32_f16 swmmac_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x32_f16 swmmac_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f16_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x32_f16 swmmac_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x32_f16 swmmac_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f16_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x32_f16 swmmac_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x32_f16 swmmac_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult swmmac_f16_16x16x32_f16::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps50(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps50(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps50(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps50(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x32_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f16_16x16x32_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x32_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f16_16x16x32_f16) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f16_16x16x64_f16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f16_16x16x64_f16GenericAdaptorBase::swmmac_f16_16x16x64_f16GenericAdaptorBase(swmmac_f16_16x16x64_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f16_16x16x64_f16GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_f16_16x16x64_f16GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f16_16x16x64_f16GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_f16_16x16x64_f16GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f16_16x16x64_f16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f16_16x16x64_f16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f16_16x16x64_f16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f16_16x16x64_f16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f16_16x16x64_f16Adaptor::swmmac_f16_16x16x64_f16Adaptor(swmmac_f16_16x16x64_f16 op) : swmmac_f16_16x16x64_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f16_16x16x64_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x64.f16' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x64.f16' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x64.f16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f16.16x16x64.f16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x64_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f16_16x16x64_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f16_16x16x64_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_f16_16x16x64_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_f16_16x16x64_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f16_16x16x64_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_f16_16x16x64_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x64_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x64_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_f16_16x16x64_f16::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f16_16x16x64_f16::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f16_16x16x64_f16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f16_16x16x64_f16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f16_16x16x64_f16::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x64_f16::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x64_f16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x64_f16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f16_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f16_16x16x64_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f16_16x16x64_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f16_16x16x64_f16 swmmac_f16_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f16_16x16x64_f16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f16_16x16x64_f16::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f16_16x16x64_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f16_16x16x64_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f16_16x16x64_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f16_16x16x64_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f16_16x16x64_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x128_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::swmmac_f32_16x16x128_bf8_bf8GenericAdaptorBase(swmmac_f32_16x16x128_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f32_16x16x128_bf8_bf8Adaptor::swmmac_f32_16x16x128_bf8_bf8Adaptor(swmmac_f32_16x16x128_bf8_bf8 op) : swmmac_f32_16x16x128_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x128.bf8.bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x128.bf8.bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x128_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x128_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional swmmac_f32_16x16x128_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void swmmac_f32_16x16x128_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f32_16x16x128_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x128_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } bool swmmac_f32_16x16x128_bf8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x128_bf8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f32_16x16x128_bf8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x128_bf8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_bf8 swmmac_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f32_16x16x128_bf8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_bf8::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x128_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x128_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x128_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f32_16x16x128_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x128_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::swmmac_f32_16x16x128_bf8_fp8GenericAdaptorBase(swmmac_f32_16x16x128_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f32_16x16x128_bf8_fp8Adaptor::swmmac_f32_16x16x128_bf8_fp8Adaptor(swmmac_f32_16x16x128_bf8_fp8 op) : swmmac_f32_16x16x128_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x128.bf8.fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x128.bf8.fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x128_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x128_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional swmmac_f32_16x16x128_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void swmmac_f32_16x16x128_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f32_16x16x128_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x128_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } bool swmmac_f32_16x16x128_bf8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x128_bf8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f32_16x16x128_bf8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x128_bf8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_bf8_fp8 swmmac_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f32_16x16x128_bf8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_fp8::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x128_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x128_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x128_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f32_16x16x128_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x128_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::swmmac_f32_16x16x128_fp8_bf8GenericAdaptorBase(swmmac_f32_16x16x128_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f32_16x16x128_fp8_bf8Adaptor::swmmac_f32_16x16x128_fp8_bf8Adaptor(swmmac_f32_16x16x128_fp8_bf8 op) : swmmac_f32_16x16x128_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x128.fp8.bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x128.fp8.bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x128_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x128_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional swmmac_f32_16x16x128_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void swmmac_f32_16x16x128_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f32_16x16x128_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x128_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } bool swmmac_f32_16x16x128_fp8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x128_fp8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f32_16x16x128_fp8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x128_fp8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_bf8 swmmac_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f32_16x16x128_fp8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_bf8::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x128_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x128_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x128_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f32_16x16x128_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x128_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::swmmac_f32_16x16x128_fp8_fp8GenericAdaptorBase(swmmac_f32_16x16x128_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f32_16x16x128_fp8_fp8Adaptor::swmmac_f32_16x16x128_fp8_fp8Adaptor(swmmac_f32_16x16x128_fp8_fp8 op) : swmmac_f32_16x16x128_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x128.fp8.fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x128.fp8.fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x128_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x128_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional swmmac_f32_16x16x128_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void swmmac_f32_16x16x128_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f32_16x16x128_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x128_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } bool swmmac_f32_16x16x128_fp8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x128_fp8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f32_16x16x128_fp8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x128_fp8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x128_fp8_fp8 swmmac_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f32_16x16x128_fp8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_fp8::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x128_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x128_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x128_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x128_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f32_16x16x128_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x32_bf16GenericAdaptorBase::swmmac_f32_16x16x32_bf16GenericAdaptorBase(swmmac_f32_16x16x32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail swmmac_f32_16x16x32_bf16Adaptor::swmmac_f32_16x16x32_bf16Adaptor(swmmac_f32_16x16x32_bf16 op) : swmmac_f32_16x16x32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x32_bf16Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional swmmac_f32_16x16x32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void swmmac_f32_16x16x32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void swmmac_f32_16x16x32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult swmmac_f32_16x16x32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void swmmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.addTypes(res); } swmmac_f32_16x16x32_bf16 swmmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf16 swmmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf16 swmmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf16 swmmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf16 swmmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf16 swmmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf16 swmmac_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf16 swmmac_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf16::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps46(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps46(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps43(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps43(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x32_bf16) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x32_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x32_bf8_bf8GenericAdaptorBase::swmmac_f32_16x16x32_bf8_bf8GenericAdaptorBase(swmmac_f32_16x16x32_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail swmmac_f32_16x16x32_bf8_bf8Adaptor::swmmac_f32_16x16x32_bf8_bf8Adaptor(swmmac_f32_16x16x32_bf8_bf8 op) : swmmac_f32_16x16x32_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_bf8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x32_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x32_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional swmmac_f32_16x16x32_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void swmmac_f32_16x16x32_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void swmmac_f32_16x16x32_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void swmmac_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.addTypes(res); } swmmac_f32_16x16x32_bf8_bf8 swmmac_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf8_bf8 swmmac_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf8_bf8 swmmac_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf8_bf8 swmmac_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf8_bf8 swmmac_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf8_bf8 swmmac_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x32_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf8_bf8 swmmac_f32_16x16x32_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf8_bf8 swmmac_f32_16x16x32_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_bf8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x32_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x32_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x32_bf8_bf8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x32_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x32_bf8_fp8GenericAdaptorBase::swmmac_f32_16x16x32_bf8_fp8GenericAdaptorBase(swmmac_f32_16x16x32_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail swmmac_f32_16x16x32_bf8_fp8Adaptor::swmmac_f32_16x16x32_bf8_fp8Adaptor(swmmac_f32_16x16x32_bf8_fp8 op) : swmmac_f32_16x16x32_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_fp8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x32_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x32_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional swmmac_f32_16x16x32_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void swmmac_f32_16x16x32_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void swmmac_f32_16x16x32_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void swmmac_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.addTypes(res); } swmmac_f32_16x16x32_bf8_fp8 swmmac_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf8_fp8 swmmac_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf8_fp8 swmmac_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf8_fp8 swmmac_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf8_fp8 swmmac_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf8_fp8 swmmac_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x32_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_bf8_fp8 swmmac_f32_16x16x32_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_bf8_fp8 swmmac_f32_16x16x32_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_fp8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x32_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x32_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x32_bf8_fp8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x32_f16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x32_f16GenericAdaptorBase::swmmac_f32_16x16x32_f16GenericAdaptorBase(swmmac_f32_16x16x32_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail swmmac_f32_16x16x32_f16Adaptor::swmmac_f32_16x16x32_f16Adaptor(swmmac_f32_16x16x32_f16 op) : swmmac_f32_16x16x32_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x32_f16Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x32_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x32_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional swmmac_f32_16x16x32_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void swmmac_f32_16x16x32_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void swmmac_f32_16x16x32_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult swmmac_f32_16x16x32_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void swmmac_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.addTypes(res); } swmmac_f32_16x16x32_f16 swmmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_f16 swmmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_f16 swmmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_f16 swmmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_f16 swmmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_f16 swmmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_f16 swmmac_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_f16 swmmac_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult swmmac_f32_16x16x32_f16::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps50(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps50(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps43(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps43(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x32_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x32_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x32_f16) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x32_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x32_fp8_bf8GenericAdaptorBase::swmmac_f32_16x16x32_fp8_bf8GenericAdaptorBase(swmmac_f32_16x16x32_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail swmmac_f32_16x16x32_fp8_bf8Adaptor::swmmac_f32_16x16x32_fp8_bf8Adaptor(swmmac_f32_16x16x32_fp8_bf8 op) : swmmac_f32_16x16x32_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_bf8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x32_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x32_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional swmmac_f32_16x16x32_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void swmmac_f32_16x16x32_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void swmmac_f32_16x16x32_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void swmmac_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.addTypes(res); } swmmac_f32_16x16x32_fp8_bf8 swmmac_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_fp8_bf8 swmmac_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_fp8_bf8 swmmac_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_fp8_bf8 swmmac_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_fp8_bf8 swmmac_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_fp8_bf8 swmmac_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x32_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_fp8_bf8 swmmac_f32_16x16x32_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_fp8_bf8 swmmac_f32_16x16x32_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_bf8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x32_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x32_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x32_fp8_bf8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x32_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x32_fp8_fp8GenericAdaptorBase::swmmac_f32_16x16x32_fp8_fp8GenericAdaptorBase(swmmac_f32_16x16x32_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail swmmac_f32_16x16x32_fp8_fp8Adaptor::swmmac_f32_16x16x32_fp8_fp8Adaptor(swmmac_f32_16x16x32_fp8_fp8 op) : swmmac_f32_16x16x32_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_fp8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x32_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x32_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional swmmac_f32_16x16x32_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void swmmac_f32_16x16x32_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void swmmac_f32_16x16x32_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void swmmac_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.addTypes(res); } swmmac_f32_16x16x32_fp8_fp8 swmmac_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_fp8_fp8 swmmac_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_fp8_fp8 swmmac_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_fp8_fp8 swmmac_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(index)); } void swmmac_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_fp8_fp8 swmmac_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_fp8_fp8 swmmac_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x32_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x32_fp8_fp8 swmmac_f32_16x16x32_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x32_fp8_fp8 swmmac_f32_16x16x32_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_fp8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x32_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x32_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x32_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x32_fp8_fp8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x64_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x64_bf16GenericAdaptorBase::swmmac_f32_16x16x64_bf16GenericAdaptorBase(swmmac_f32_16x16x64_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f32_16x16x64_bf16GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_f32_16x16x64_bf16GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x64_bf16GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_f32_16x16x64_bf16GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x64_bf16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f32_16x16x64_bf16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x64_bf16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f32_16x16x64_bf16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f32_16x16x64_bf16Adaptor::swmmac_f32_16x16x64_bf16Adaptor(swmmac_f32_16x16x64_bf16 op) : swmmac_f32_16x16x64_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x64_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x64.bf16' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x64.bf16' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x64.bf16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x64.bf16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x64_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x64_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x64_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_f32_16x16x64_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_f32_16x16x64_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f32_16x16x64_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_f32_16x16x64_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x64_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x64_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_f32_16x16x64_bf16::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x64_bf16::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x64_bf16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x64_bf16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f32_16x16x64_bf16::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x64_bf16::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x64_bf16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x64_bf16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x64_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_bf16 swmmac_f32_16x16x64_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f32_16x16x64_bf16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f32_16x16x64_bf16::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x64_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x64_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x64_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x64_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f32_16x16x64_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_f32_16x16x64_f16 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_f32_16x16x64_f16GenericAdaptorBase::swmmac_f32_16x16x64_f16GenericAdaptorBase(swmmac_f32_16x16x64_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_f32_16x16x64_f16GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_f32_16x16x64_f16GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x64_f16GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_f32_16x16x64_f16GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x64_f16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_f32_16x16x64_f16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_f32_16x16x64_f16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_f32_16x16x64_f16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_f32_16x16x64_f16Adaptor::swmmac_f32_16x16x64_f16Adaptor(swmmac_f32_16x16x64_f16 op) : swmmac_f32_16x16x64_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_f32_16x16x64_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x64.f16' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x64.f16' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x64.f16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.f32.16x16x64.f16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x64_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_f32_16x16x64_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_f32_16x16x64_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_f32_16x16x64_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_f32_16x16x64_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_f32_16x16x64_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_f32_16x16x64_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x64_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x64_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_f32_16x16x64_f16::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x64_f16::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x64_f16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_f32_16x16x64_f16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void swmmac_f32_16x16x64_f16::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x64_f16::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x64_f16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x64_f16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_f32_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x64_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB)); } void swmmac_f32_16x16x64_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_f32_16x16x64_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_f32_16x16x64_f16 swmmac_f32_16x16x64_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_f32_16x16x64_f16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_f32_16x16x64_f16::verifyInvariantsImpl() { auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_f32_16x16x64_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_f32_16x16x64_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_f32_16x16x64_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_f32_16x16x64_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_f32_16x16x64_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_i32_16x16x128_iu8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_i32_16x16x128_iu8GenericAdaptorBase::swmmac_i32_16x16x128_iu8GenericAdaptorBase(swmmac_i32_16x16x128_iu8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_i32_16x16x128_iu8GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_i32_16x16x128_iu8GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x128_iu8GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_i32_16x16x128_iu8GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x128_iu8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool swmmac_i32_16x16x128_iu8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x128_iu8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool swmmac_i32_16x16x128_iu8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x128_iu8GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool swmmac_i32_16x16x128_iu8GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_i32_16x16x128_iu8Adaptor::swmmac_i32_16x16x128_iu8Adaptor(swmmac_i32_16x16x128_iu8 op) : swmmac_i32_16x16x128_iu8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_i32_16x16x128_iu8Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x128.iu8' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x128.iu8' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x128.iu8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x128.iu8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x128.iu8' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x128_iu8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_i32_16x16x128_iu8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_i32_16x16x128_iu8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_i32_16x16x128_iu8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_i32_16x16x128_iu8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_i32_16x16x128_iu8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_i32_16x16x128_iu8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x128_iu8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_i32_16x16x128_iu8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_i32_16x16x128_iu8::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x128_iu8::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x128_iu8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x128_iu8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x128_iu8::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void swmmac_i32_16x16x128_iu8::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x128_iu8::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x128_iu8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x128_iu8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x128_iu8::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x128_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); } void swmmac_i32_16x16x128_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); } void swmmac_i32_16x16x128_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); } void swmmac_i32_16x16x128_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool reuseA, bool reuseB, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); } void swmmac_i32_16x16x128_iu8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_i32_16x16x128_iu8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x128_iu8 swmmac_i32_16x16x128_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_i32_16x16x128_iu8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_i32_16x16x128_iu8::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x128_iu8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_i32_16x16x128_iu8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_i32_16x16x128_iu8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_i32_16x16x128_iu8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_i32_16x16x128_iu8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_i32_16x16x32_iu4 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_i32_16x16x32_iu4GenericAdaptorBase::swmmac_i32_16x16x32_iu4GenericAdaptorBase(swmmac_i32_16x16x32_iu4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_i32_16x16x32_iu4GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_i32_16x16x32_iu4GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x32_iu4GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_i32_16x16x32_iu4GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x32_iu4GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool swmmac_i32_16x16x32_iu4GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_i32_16x16x32_iu4Adaptor::swmmac_i32_16x16x32_iu4Adaptor(swmmac_i32_16x16x32_iu4 op) : swmmac_i32_16x16x32_iu4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_i32_16x16x32_iu4Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x32.iu4' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x32.iu4' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x32.iu4' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_i32_16x16x32_iu4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_i32_16x16x32_iu4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_i32_16x16x32_iu4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_i32_16x16x32_iu4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_i32_16x16x32_iu4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_i32_16x16x32_iu4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_i32_16x16x32_iu4::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x32_iu4::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x32_iu4::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void swmmac_i32_16x16x32_iu4::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x32_iu4::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x32_iu4::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x32_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x32_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x32_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x32_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x32_iu4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_i32_16x16x32_iu4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu4 swmmac_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_i32_16x16x32_iu4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu4::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_i32_16x16x32_iu4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_i32_16x16x32_iu4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_i32_16x16x32_iu4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_i32_16x16x32_iu4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_i32_16x16x32_iu8 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_i32_16x16x32_iu8GenericAdaptorBase::swmmac_i32_16x16x32_iu8GenericAdaptorBase(swmmac_i32_16x16x32_iu8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_i32_16x16x32_iu8GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_i32_16x16x32_iu8GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x32_iu8GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_i32_16x16x32_iu8GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x32_iu8GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool swmmac_i32_16x16x32_iu8GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_i32_16x16x32_iu8Adaptor::swmmac_i32_16x16x32_iu8Adaptor(swmmac_i32_16x16x32_iu8 op) : swmmac_i32_16x16x32_iu8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_i32_16x16x32_iu8Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x32.iu8' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x32.iu8' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x32.iu8' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_i32_16x16x32_iu8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_i32_16x16x32_iu8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_i32_16x16x32_iu8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_i32_16x16x32_iu8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_i32_16x16x32_iu8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_i32_16x16x32_iu8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_i32_16x16x32_iu8::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x32_iu8::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x32_iu8::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void swmmac_i32_16x16x32_iu8::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x32_iu8::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x32_iu8::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x32_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x32_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x32_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x32_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x32_iu8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_i32_16x16x32_iu8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x32_iu8 swmmac_i32_16x16x32_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_i32_16x16x32_iu8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu8::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x32_iu8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_i32_16x16x32_iu8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_i32_16x16x32_iu8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_i32_16x16x32_iu8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_i32_16x16x32_iu8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::swmmac_i32_16x16x64_iu4 definitions //===----------------------------------------------------------------------===// namespace detail { swmmac_i32_16x16x64_iu4GenericAdaptorBase::swmmac_i32_16x16x64_iu4GenericAdaptorBase(swmmac_i32_16x16x64_iu4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr swmmac_i32_16x16x64_iu4GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool swmmac_i32_16x16x64_iu4GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x64_iu4GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool swmmac_i32_16x16x64_iu4GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr swmmac_i32_16x16x64_iu4GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool swmmac_i32_16x16x64_iu4GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail swmmac_i32_16x16x64_iu4Adaptor::swmmac_i32_16x16x64_iu4Adaptor(swmmac_i32_16x16x64_iu4 op) : swmmac_i32_16x16x64_iu4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult swmmac_i32_16x16x64_iu4Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x64.iu4' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x64.iu4' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.swmmac.i32.16x16x64.iu4' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x64_iu4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute swmmac_i32_16x16x64_iu4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code swmmac_i32_16x16x64_iu4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional swmmac_i32_16x16x64_iu4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void swmmac_i32_16x16x64_iu4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void swmmac_i32_16x16x64_iu4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult swmmac_i32_16x16x64_iu4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x64_iu4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void swmmac_i32_16x16x64_iu4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool swmmac_i32_16x16x64_iu4::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x64_iu4::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool swmmac_i32_16x16x64_iu4::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void swmmac_i32_16x16x64_iu4::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x64_iu4::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x64_iu4::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void swmmac_i32_16x16x64_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x64_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x64_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x64_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(index); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, ::mlir::Value index, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(index), std::forward(clamp)); } void swmmac_i32_16x16x64_iu4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void swmmac_i32_16x16x64_iu4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 4u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } swmmac_i32_16x16x64_iu4 swmmac_i32_16x16x64_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void swmmac_i32_16x16x64_iu4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult swmmac_i32_16x16x64_iu4::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult swmmac_i32_16x16x64_iu4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult swmmac_i32_16x16x64_iu4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand indexRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> indexOperands(&indexRawOperand, 1); ::llvm::SMLoc indexOperandsLoc; (void)indexOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); indexOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(indexRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, indexOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void swmmac_i32_16x16x64_iu4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getIndex(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::swmmac_i32_16x16x64_iu4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::swmmac_i32_16x16x64_iu4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::udot2 definitions //===----------------------------------------------------------------------===// namespace detail { udot2GenericAdaptorBase::udot2GenericAdaptorBase(udot2 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr udot2GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool udot2GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail udot2Adaptor::udot2Adaptor(udot2 op) : udot2GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult udot2Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.udot2' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult udot2::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute udot2::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code udot2::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer())); } std::optional udot2::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; return std::nullopt; } void udot2::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } } void udot2::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); } ::llvm::LogicalResult udot2::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult udot2::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); return ::mlir::success(); } void udot2::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); } bool udot2::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void udot2::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void udot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } udot2 udot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot2 udot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } udot2 udot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot2 udot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } udot2 udot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot2 udot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot2::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } udot2 udot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot2 udot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot2::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } udot2 udot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot2 udot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void udot2::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } udot2 udot2::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot2 udot2::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void udot2::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult udot2::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps22(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult udot2::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult udot2::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void udot2::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void udot2::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::udot2) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::udot2GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::udot4 definitions //===----------------------------------------------------------------------===// namespace detail { udot4GenericAdaptorBase::udot4GenericAdaptorBase(udot4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr udot4GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool udot4GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail udot4Adaptor::udot4Adaptor(udot4 op) : udot4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult udot4Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.udot4' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult udot4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute udot4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code udot4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer())); } std::optional udot4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; return std::nullopt; } void udot4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } } void udot4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); } ::llvm::LogicalResult udot4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult udot4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); return ::mlir::success(); } void udot4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); } bool udot4::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void udot4::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void udot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } udot4 udot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot4 udot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } udot4 udot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot4 udot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } udot4 udot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot4 udot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } udot4 udot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot4 udot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } udot4 udot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot4 udot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void udot4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } udot4 udot4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot4 udot4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void udot4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult udot4::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult udot4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult udot4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void udot4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void udot4::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::udot4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::udot4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::udot8 definitions //===----------------------------------------------------------------------===// namespace detail { udot8GenericAdaptorBase::udot8GenericAdaptorBase(udot8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr udot8GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool udot8GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail udot8Adaptor::udot8Adaptor(udot8 op) : udot8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult udot8Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.udot8' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult udot8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute udot8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code udot8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer())); } std::optional udot8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; return std::nullopt; } void udot8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } } void udot8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); } ::llvm::LogicalResult udot8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult udot8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); return ::mlir::success(); } void udot8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); } bool udot8::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void udot8::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void udot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } udot8 udot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot8 udot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } udot8 udot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot8 udot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } udot8 udot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot8 udot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } udot8 udot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot8 udot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(clamp)); } void udot8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } udot8 udot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot8 udot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void udot8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } udot8 udot8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } udot8 udot8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void udot8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult udot8::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult udot8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult udot8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void udot8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } void udot8::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::udot8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::udot8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_bf16_16x16x16_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_bf16_16x16x16_bf16GenericAdaptorBase::wmma_bf16_16x16x16_bf16GenericAdaptorBase(wmma_bf16_16x16x16_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr wmma_bf16_16x16x16_bf16GenericAdaptorBase::getOpselAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().opsel); return attr; } bool wmma_bf16_16x16x16_bf16GenericAdaptorBase::getOpsel() { auto attr = getOpselAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_bf16_16x16x16_bf16Adaptor::wmma_bf16_16x16x16_bf16Adaptor(wmma_bf16_16x16x16_bf16 op) : wmma_bf16_16x16x16_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_bf16_16x16x16_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_opsel = getProperties().opsel; (void)tblgen_opsel; if (tblgen_opsel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_opsel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_opsel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.bf16.16x16x16.bf16' op attribute 'opsel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16_16x16x16_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.opsel; auto attr = dict.get("opsel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `opsel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_bf16_16x16x16_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.opsel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("opsel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_bf16_16x16x16_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.opsel.getAsOpaquePointer())); } std::optional wmma_bf16_16x16x16_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "opsel") return prop.opsel; return std::nullopt; } void wmma_bf16_16x16x16_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "opsel") { prop.opsel = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_bf16_16x16x16_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.opsel) attrs.append("opsel", prop.opsel); } ::llvm::LogicalResult wmma_bf16_16x16x16_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getOpselAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "opsel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16_16x16x16_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.opsel))) return ::mlir::failure(); return ::mlir::success(); } void wmma_bf16_16x16x16_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.opsel); } bool wmma_bf16_16x16x16_bf16::getOpsel() { auto attr = getOpselAttr(); return attr.getValue().getZExtValue(); } void wmma_bf16_16x16x16_bf16::setOpsel(bool attrValue) { getProperties().opsel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_bf16_16x16x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (opsel) { odsState.getOrAddProperties().opsel = opsel; } odsState.addTypes(res); } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); } void wmma_bf16_16x16x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (opsel) { odsState.getOrAddProperties().opsel = opsel; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); } void wmma_bf16_16x16x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().opsel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), opsel); odsState.addTypes(res); } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); } void wmma_bf16_16x16x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().opsel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), opsel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); } void wmma_bf16_16x16x16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_bf16_16x16x16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x16_bf16 wmma_bf16_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_bf16_16x16x16_bf16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.opsel) properties.opsel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_bf16_16x16x16_bf16::verifyInvariantsImpl() { auto tblgen_opsel = getProperties().opsel; (void)tblgen_opsel; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_opsel, "opsel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16_16x16x16_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_bf16_16x16x16_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_bf16_16x16x16_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getOpselAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("opsel"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_bf16_16x16x16_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_bf16_16x16x16_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_bf16_16x16x32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_bf16_16x16x32_bf16GenericAdaptorBase::wmma_bf16_16x16x32_bf16GenericAdaptorBase(wmma_bf16_16x16x32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_bf16_16x16x32_bf16GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_bf16_16x16x32_bf16GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_bf16_16x16x32_bf16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_bf16_16x16x32_bf16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_bf16_16x16x32_bf16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_bf16_16x16x32_bf16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_bf16_16x16x32_bf16Adaptor::wmma_bf16_16x16x32_bf16Adaptor(wmma_bf16_16x16x32_bf16 op) : wmma_bf16_16x16x32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_bf16_16x16x32_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.bf16.16x16x32.bf16' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.bf16.16x16x32.bf16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.bf16.16x16x32.bf16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16_16x16x32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_bf16_16x16x32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_bf16_16x16x32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_bf16_16x16x32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_bf16_16x16x32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_bf16_16x16x32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_bf16_16x16x32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16_16x16x32_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_bf16_16x16x32_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_bf16_16x16x32_bf16::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_bf16_16x16x32_bf16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_bf16_16x16x32_bf16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_bf16_16x16x32_bf16::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_bf16_16x16x32_bf16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_bf16_16x16x32_bf16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_bf16_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_bf16_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_bf16_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_bf16_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_bf16_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_bf16_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16_16x16x32_bf16 wmma_bf16_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_bf16_16x16x32_bf16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_bf16_16x16x32_bf16::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16_16x16x32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_bf16_16x16x32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_bf16_16x16x32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_bf16_16x16x32_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_bf16_16x16x32_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_bf16f32_16x16x32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_bf16f32_16x16x32_bf16GenericAdaptorBase::wmma_bf16f32_16x16x32_bf16GenericAdaptorBase(wmma_bf16f32_16x16x32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_bf16f32_16x16x32_bf16GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_bf16f32_16x16x32_bf16GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_bf16f32_16x16x32_bf16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_bf16f32_16x16x32_bf16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_bf16f32_16x16x32_bf16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_bf16f32_16x16x32_bf16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_bf16f32_16x16x32_bf16Adaptor::wmma_bf16f32_16x16x32_bf16Adaptor(wmma_bf16f32_16x16x32_bf16 op) : wmma_bf16f32_16x16x32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_bf16f32_16x16x32_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.bf16f32.16x16x32.bf16' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.bf16f32.16x16x32.bf16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.bf16f32.16x16x32.bf16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16f32_16x16x32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_bf16f32_16x16x32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_bf16f32_16x16x32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_bf16f32_16x16x32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_bf16f32_16x16x32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_bf16f32_16x16x32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_bf16f32_16x16x32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16f32_16x16x32_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_bf16f32_16x16x32_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_bf16f32_16x16x32_bf16::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_bf16f32_16x16x32_bf16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_bf16f32_16x16x32_bf16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_bf16f32_16x16x32_bf16::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_bf16f32_16x16x32_bf16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_bf16f32_16x16x32_bf16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_bf16f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_bf16f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_bf16f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_bf16f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_bf16f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_bf16f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_bf16f32_16x16x32_bf16 wmma_bf16f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_bf16f32_16x16x32_bf16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_bf16f32_16x16x32_bf16::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_bf16f32_16x16x32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_bf16f32_16x16x32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_bf16f32_16x16x32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_bf16f32_16x16x32_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_bf16f32_16x16x32_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x128_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase::wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase(wmma_f16_16x16x128_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x128_bf8_bf8Adaptor::wmma_f16_16x16x128_bf8_bf8Adaptor(wmma_f16_16x16x128_bf8_bf8 op) : wmma_f16_16x16x128_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x128_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.bf8_bf8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.bf8_bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.bf8_bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x128_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x128_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x128_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x128_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x128_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x128_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x128_bf8_bf8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x128_bf8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x128_bf8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x128_bf8_bf8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x128_bf8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x128_bf8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_bf8 wmma_f16_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x128_bf8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_bf8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x128_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x128_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x128_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x128_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x128_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase::wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase(wmma_f16_16x16x128_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x128_bf8_fp8Adaptor::wmma_f16_16x16x128_bf8_fp8Adaptor(wmma_f16_16x16x128_bf8_fp8 op) : wmma_f16_16x16x128_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x128_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.bf8_fp8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.bf8_fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.bf8_fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x128_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x128_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x128_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x128_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x128_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x128_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x128_bf8_fp8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x128_bf8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x128_bf8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x128_bf8_fp8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x128_bf8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x128_bf8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_bf8_fp8 wmma_f16_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x128_bf8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_fp8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x128_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x128_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x128_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x128_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x128_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase::wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase(wmma_f16_16x16x128_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x128_fp8_bf8Adaptor::wmma_f16_16x16x128_fp8_bf8Adaptor(wmma_f16_16x16x128_fp8_bf8 op) : wmma_f16_16x16x128_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x128_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.fp8_bf8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.fp8_bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.fp8_bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x128_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x128_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x128_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x128_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x128_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x128_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x128_fp8_bf8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x128_fp8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x128_fp8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x128_fp8_bf8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x128_fp8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x128_fp8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_bf8 wmma_f16_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x128_fp8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_bf8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x128_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x128_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x128_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x128_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x128_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase::wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase(wmma_f16_16x16x128_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x128_fp8_fp8Adaptor::wmma_f16_16x16x128_fp8_fp8Adaptor(wmma_f16_16x16x128_fp8_fp8 op) : wmma_f16_16x16x128_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x128_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.fp8_fp8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.fp8_fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x128.fp8_fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x128_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x128_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x128_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x128_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x128_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x128_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x128_fp8_fp8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x128_fp8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x128_fp8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x128_fp8_fp8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x128_fp8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x128_fp8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x128_fp8_fp8 wmma_f16_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x128_fp8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_fp8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x128_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x128_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x128_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x128_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x128_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x16_f16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x16_f16GenericAdaptorBase::wmma_f16_16x16x16_f16GenericAdaptorBase(wmma_f16_16x16x16_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr wmma_f16_16x16x16_f16GenericAdaptorBase::getOpselAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().opsel); return attr; } bool wmma_f16_16x16x16_f16GenericAdaptorBase::getOpsel() { auto attr = getOpselAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x16_f16Adaptor::wmma_f16_16x16x16_f16Adaptor(wmma_f16_16x16x16_f16 op) : wmma_f16_16x16x16_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x16_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_opsel = getProperties().opsel; (void)tblgen_opsel; if (tblgen_opsel && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_opsel))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_opsel).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x16.f16' op attribute 'opsel' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x16_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.opsel; auto attr = dict.get("opsel"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `opsel` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x16_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.opsel; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("opsel", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x16_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.opsel.getAsOpaquePointer())); } std::optional wmma_f16_16x16x16_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "opsel") return prop.opsel; return std::nullopt; } void wmma_f16_16x16x16_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "opsel") { prop.opsel = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x16_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.opsel) attrs.append("opsel", prop.opsel); } ::llvm::LogicalResult wmma_f16_16x16x16_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getOpselAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "opsel", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x16_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.opsel))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x16_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.opsel); } bool wmma_f16_16x16x16_f16::getOpsel() { auto attr = getOpselAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x16_f16::setOpsel(bool attrValue) { getProperties().opsel = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (opsel) { odsState.getOrAddProperties().opsel = opsel; } odsState.addTypes(res); } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); } void wmma_f16_16x16x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (opsel) { odsState.getOrAddProperties().opsel = opsel; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr opsel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); } void wmma_f16_16x16x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().opsel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), opsel); odsState.addTypes(res); } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); } void wmma_f16_16x16x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().opsel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), opsel); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c, bool opsel) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c), std::forward(opsel)); } void wmma_f16_16x16x16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x16_f16 wmma_f16_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x16_f16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.opsel) properties.opsel = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x16_f16::verifyInvariantsImpl() { auto tblgen_opsel = getProperties().opsel; (void)tblgen_opsel; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_opsel, "opsel"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x16_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x16_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x16_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getOpselAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("opsel"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x16_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x16_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x32_f16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x32_f16GenericAdaptorBase::wmma_f16_16x16x32_f16GenericAdaptorBase(wmma_f16_16x16x32_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x32_f16GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x32_f16GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x32_f16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x32_f16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x32_f16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x32_f16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x32_f16Adaptor::wmma_f16_16x16x32_f16Adaptor(wmma_f16_16x16x32_f16 op) : wmma_f16_16x16x32_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x32_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x32.f16' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x32.f16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x32.f16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x32_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x32_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x32_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x32_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x32_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x32_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x32_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x32_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x32_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x32_f16::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x32_f16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x32_f16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x32_f16::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x32_f16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x32_f16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x32_f16 wmma_f16_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x32_f16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x32_f16::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x32_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x32_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x32_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x32_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x32_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x64_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase::wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase(wmma_f16_16x16x64_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x64_bf8_bf8Adaptor::wmma_f16_16x16x64_bf8_bf8Adaptor(wmma_f16_16x16x64_bf8_bf8 op) : wmma_f16_16x16x64_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x64_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.bf8_bf8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.bf8_bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.bf8_bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x64_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x64_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x64_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x64_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x64_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x64_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x64_bf8_bf8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x64_bf8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x64_bf8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x64_bf8_bf8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x64_bf8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x64_bf8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x64_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_bf8 wmma_f16_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x64_bf8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_bf8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x64_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x64_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x64_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x64_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x64_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase::wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase(wmma_f16_16x16x64_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x64_bf8_fp8Adaptor::wmma_f16_16x16x64_bf8_fp8Adaptor(wmma_f16_16x16x64_bf8_fp8 op) : wmma_f16_16x16x64_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x64_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.bf8_fp8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.bf8_fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.bf8_fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x64_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x64_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x64_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x64_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x64_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x64_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x64_bf8_fp8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x64_bf8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x64_bf8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x64_bf8_fp8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x64_bf8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x64_bf8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x64_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_bf8_fp8 wmma_f16_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x64_bf8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_fp8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x64_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x64_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x64_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x64_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x64_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase::wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase(wmma_f16_16x16x64_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x64_fp8_bf8Adaptor::wmma_f16_16x16x64_fp8_bf8Adaptor(wmma_f16_16x16x64_fp8_bf8 op) : wmma_f16_16x16x64_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x64_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.fp8_bf8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.fp8_bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.fp8_bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x64_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x64_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x64_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x64_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x64_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x64_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x64_fp8_bf8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x64_fp8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x64_fp8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x64_fp8_bf8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x64_fp8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x64_fp8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x64_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_bf8 wmma_f16_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x64_fp8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_bf8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x64_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x64_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x64_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x64_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f16_16x16x64_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase::wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase(wmma_f16_16x16x64_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f16_16x16x64_fp8_fp8Adaptor::wmma_f16_16x16x64_fp8_fp8Adaptor(wmma_f16_16x16x64_fp8_fp8 op) : wmma_f16_16x16x64_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f16_16x16x64_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.fp8_fp8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.fp8_fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f16.16x16x64.fp8_fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f16_16x16x64_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f16_16x16x64_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f16_16x16x64_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f16_16x16x64_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f16_16x16x64_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x64_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f16_16x16x64_fp8_fp8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f16_16x16x64_fp8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f16_16x16x64_fp8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f16_16x16x64_fp8_fp8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f16_16x16x64_fp8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x64_fp8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f16_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f16_16x16x64_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f16_16x16x64_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f16_16x16x64_fp8_fp8 wmma_f16_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f16_16x16x64_fp8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_fp8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f16_16x16x64_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f16_16x16x64_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f16_16x16x64_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f16_16x16x64_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f16_16x16x64_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x128_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase::wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase(wmma_f32_16x16x128_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x128_bf8_bf8Adaptor::wmma_f32_16x16x128_bf8_bf8Adaptor(wmma_f32_16x16x128_bf8_bf8 op) : wmma_f32_16x16x128_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x128_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.bf8_bf8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.bf8_bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.bf8_bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x128_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x128_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x128_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x128_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x128_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x128_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x128_bf8_bf8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x128_bf8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x128_bf8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x128_bf8_bf8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x128_bf8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x128_bf8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x128_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_bf8 wmma_f32_16x16x128_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x128_bf8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_bf8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x128_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x128_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x128_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x128_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x128_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase::wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase(wmma_f32_16x16x128_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x128_bf8_fp8Adaptor::wmma_f32_16x16x128_bf8_fp8Adaptor(wmma_f32_16x16x128_bf8_fp8 op) : wmma_f32_16x16x128_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x128_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.bf8_fp8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.bf8_fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.bf8_fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x128_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x128_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x128_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x128_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x128_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x128_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x128_bf8_fp8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x128_bf8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x128_bf8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x128_bf8_fp8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x128_bf8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x128_bf8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x128_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_bf8_fp8 wmma_f32_16x16x128_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x128_bf8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_fp8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x128_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x128_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x128_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x128_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x128_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase::wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase(wmma_f32_16x16x128_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x128_fp8_bf8Adaptor::wmma_f32_16x16x128_fp8_bf8Adaptor(wmma_f32_16x16x128_fp8_bf8 op) : wmma_f32_16x16x128_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x128_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.fp8_bf8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.fp8_bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.fp8_bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x128_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x128_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x128_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x128_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x128_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x128_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x128_fp8_bf8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x128_fp8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x128_fp8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x128_fp8_bf8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x128_fp8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x128_fp8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x128_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_bf8 wmma_f32_16x16x128_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x128_fp8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_bf8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x128_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x128_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x128_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x128_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x128_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase::wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase(wmma_f32_16x16x128_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x128_fp8_fp8Adaptor::wmma_f32_16x16x128_fp8_fp8Adaptor(wmma_f32_16x16x128_fp8_fp8 op) : wmma_f32_16x16x128_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x128_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.fp8_fp8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.fp8_fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x128.fp8_fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x128_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x128_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x128_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x128_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x128_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x128_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x128_fp8_fp8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x128_fp8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x128_fp8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x128_fp8_fp8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x128_fp8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x128_fp8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x128_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x128_fp8_fp8 wmma_f32_16x16x128_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x128_fp8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_fp8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x128_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x128_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x128_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x128_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x128_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x16_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x16_bf16GenericAdaptorBase::wmma_f32_16x16x16_bf16GenericAdaptorBase(wmma_f32_16x16x16_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail wmma_f32_16x16x16_bf16Adaptor::wmma_f32_16x16x16_bf16Adaptor(wmma_f32_16x16x16_bf16 op) : wmma_f32_16x16x16_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x16_bf16Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x16_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x16_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional wmma_f32_16x16x16_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void wmma_f32_16x16x16_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void wmma_f32_16x16x16_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult wmma_f32_16x16x16_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void wmma_f32_16x16x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } wmma_f32_16x16x16_bf16 wmma_f32_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf16 wmma_f32_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf16 wmma_f32_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf16 wmma_f32_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf16 wmma_f32_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf16 wmma_f32_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x16_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf16 wmma_f32_16x16x16_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf16 wmma_f32_16x16x16_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult wmma_f32_16x16x16_bf16::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x16_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x16_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x16_bf16) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x16_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x16_bf8_bf8GenericAdaptorBase::wmma_f32_16x16x16_bf8_bf8GenericAdaptorBase(wmma_f32_16x16x16_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail wmma_f32_16x16x16_bf8_bf8Adaptor::wmma_f32_16x16x16_bf8_bf8Adaptor(wmma_f32_16x16x16_bf8_bf8 op) : wmma_f32_16x16x16_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x16_bf8_bf8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x16_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x16_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional wmma_f32_16x16x16_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void wmma_f32_16x16x16_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void wmma_f32_16x16x16_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult wmma_f32_16x16x16_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void wmma_f32_16x16x16_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } wmma_f32_16x16x16_bf8_bf8 wmma_f32_16x16x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf8_bf8 wmma_f32_16x16x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf8_bf8 wmma_f32_16x16x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf8_bf8 wmma_f32_16x16x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf8_bf8 wmma_f32_16x16x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf8_bf8 wmma_f32_16x16x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x16_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf8_bf8 wmma_f32_16x16x16_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf8_bf8 wmma_f32_16x16x16_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult wmma_f32_16x16x16_bf8_bf8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x16_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x16_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x16_bf8_bf8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x16_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x16_bf8_fp8GenericAdaptorBase::wmma_f32_16x16x16_bf8_fp8GenericAdaptorBase(wmma_f32_16x16x16_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail wmma_f32_16x16x16_bf8_fp8Adaptor::wmma_f32_16x16x16_bf8_fp8Adaptor(wmma_f32_16x16x16_bf8_fp8 op) : wmma_f32_16x16x16_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x16_bf8_fp8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x16_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x16_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional wmma_f32_16x16x16_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void wmma_f32_16x16x16_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void wmma_f32_16x16x16_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult wmma_f32_16x16x16_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void wmma_f32_16x16x16_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } wmma_f32_16x16x16_bf8_fp8 wmma_f32_16x16x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf8_fp8 wmma_f32_16x16x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf8_fp8 wmma_f32_16x16x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf8_fp8 wmma_f32_16x16x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf8_fp8 wmma_f32_16x16x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf8_fp8 wmma_f32_16x16x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x16_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_bf8_fp8 wmma_f32_16x16x16_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_bf8_fp8 wmma_f32_16x16x16_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult wmma_f32_16x16x16_bf8_fp8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x16_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x16_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x16_bf8_fp8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x16_f16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x16_f16GenericAdaptorBase::wmma_f32_16x16x16_f16GenericAdaptorBase(wmma_f32_16x16x16_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail wmma_f32_16x16x16_f16Adaptor::wmma_f32_16x16x16_f16Adaptor(wmma_f32_16x16x16_f16 op) : wmma_f32_16x16x16_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x16_f16Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x16_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x16_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional wmma_f32_16x16x16_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void wmma_f32_16x16x16_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void wmma_f32_16x16x16_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult wmma_f32_16x16x16_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void wmma_f32_16x16x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } wmma_f32_16x16x16_f16 wmma_f32_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_f16 wmma_f32_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_f16 wmma_f32_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_f16 wmma_f32_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_f16 wmma_f32_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_f16 wmma_f32_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x16_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_f16 wmma_f32_16x16x16_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_f16 wmma_f32_16x16x16_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult wmma_f32_16x16x16_f16::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x16_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x16_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x16_f16) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x16_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x16_fp8_bf8GenericAdaptorBase::wmma_f32_16x16x16_fp8_bf8GenericAdaptorBase(wmma_f32_16x16x16_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail wmma_f32_16x16x16_fp8_bf8Adaptor::wmma_f32_16x16x16_fp8_bf8Adaptor(wmma_f32_16x16x16_fp8_bf8 op) : wmma_f32_16x16x16_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x16_fp8_bf8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x16_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x16_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional wmma_f32_16x16x16_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void wmma_f32_16x16x16_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void wmma_f32_16x16x16_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult wmma_f32_16x16x16_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void wmma_f32_16x16x16_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } wmma_f32_16x16x16_fp8_bf8 wmma_f32_16x16x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_fp8_bf8 wmma_f32_16x16x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_fp8_bf8 wmma_f32_16x16x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_fp8_bf8 wmma_f32_16x16x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_fp8_bf8 wmma_f32_16x16x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_fp8_bf8 wmma_f32_16x16x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x16_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_fp8_bf8 wmma_f32_16x16x16_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_fp8_bf8 wmma_f32_16x16x16_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult wmma_f32_16x16x16_fp8_bf8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x16_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x16_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x16_fp8_bf8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x16_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x16_fp8_fp8GenericAdaptorBase::wmma_f32_16x16x16_fp8_fp8GenericAdaptorBase(wmma_f32_16x16x16_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail wmma_f32_16x16x16_fp8_fp8Adaptor::wmma_f32_16x16x16_fp8_fp8Adaptor(wmma_f32_16x16x16_fp8_fp8 op) : wmma_f32_16x16x16_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x16_fp8_fp8Adaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x16_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x16_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional wmma_f32_16x16x16_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void wmma_f32_16x16x16_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void wmma_f32_16x16x16_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult wmma_f32_16x16x16_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void wmma_f32_16x16x16_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addTypes(res); } wmma_f32_16x16x16_fp8_fp8 wmma_f32_16x16x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_fp8_fp8 wmma_f32_16x16x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_fp8_fp8 wmma_f32_16x16x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_fp8_fp8 wmma_f32_16x16x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::Value c) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(c)); } void wmma_f32_16x16x16_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_fp8_fp8 wmma_f32_16x16x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_fp8_fp8 wmma_f32_16x16x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x16_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x16_fp8_fp8 wmma_f32_16x16x16_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x16_fp8_fp8 wmma_f32_16x16x16_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult wmma_f32_16x16x16_fp8_fp8::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x16_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x16_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x16_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x16_fp8_fp8) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x32_bf16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x32_bf16GenericAdaptorBase::wmma_f32_16x16x32_bf16GenericAdaptorBase(wmma_f32_16x16x32_bf16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x32_bf16GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x32_bf16GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x32_bf16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x32_bf16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x32_bf16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x32_bf16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x32_bf16Adaptor::wmma_f32_16x16x32_bf16Adaptor(wmma_f32_16x16x32_bf16 op) : wmma_f32_16x16x32_bf16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x32_bf16Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x32.bf16' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x32.bf16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x32.bf16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x32_bf16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x32_bf16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x32_bf16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x32_bf16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x32_bf16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x32_bf16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x32_bf16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x32_bf16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x32_bf16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x32_bf16::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x32_bf16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x32_bf16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x32_bf16::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x32_bf16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x32_bf16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x32_bf16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x32_bf16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_bf16 wmma_f32_16x16x32_bf16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x32_bf16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x32_bf16::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps47(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x32_bf16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x32_bf16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x32_bf16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x32_bf16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x32_bf16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x32_f16 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x32_f16GenericAdaptorBase::wmma_f32_16x16x32_f16GenericAdaptorBase(wmma_f32_16x16x32_f16 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x32_f16GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x32_f16GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x32_f16GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x32_f16GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x32_f16GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x32_f16GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x32_f16Adaptor::wmma_f32_16x16x32_f16Adaptor(wmma_f32_16x16x32_f16 op) : wmma_f32_16x16x32_f16GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x32_f16Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x32.f16' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x32.f16' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x32.f16' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x32_f16::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x32_f16::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x32_f16::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x32_f16::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x32_f16::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x32_f16::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x32_f16::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x32_f16::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x32_f16::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x32_f16::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x32_f16::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x32_f16::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x32_f16::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x32_f16::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x32_f16::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x32_f16::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x32_f16::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x32_f16 wmma_f32_16x16x32_f16::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x32_f16::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x32_f16::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps49(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x32_f16::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x32_f16::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x32_f16::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x32_f16) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x32_f16GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x4_f32 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x4_f32GenericAdaptorBase::wmma_f32_16x16x4_f32GenericAdaptorBase(wmma_f32_16x16x4_f32 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x4_f32GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x4_f32GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x4_f32GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x4_f32GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x4_f32GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x4_f32GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x4_f32Adaptor::wmma_f32_16x16x4_f32Adaptor(wmma_f32_16x16x4_f32 op) : wmma_f32_16x16x4_f32GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x4_f32Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x4.f32' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x4.f32' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x4.f32' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x4_f32::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x4_f32::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x4_f32::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x4_f32::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x4_f32::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x4_f32::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x4_f32::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x4_f32::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x4_f32::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x4_f32::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x4_f32::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x4_f32::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x4_f32::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x4_f32::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x4_f32::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x4_f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x4_f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x4_f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x4_f32::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x4_f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x4_f32::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x4_f32 wmma_f32_16x16x4_f32::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x4_f32::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x4_f32::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x4_f32::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x4_f32::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x4_f32::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x4_f32) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x4_f32GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x64_bf8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase::wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase(wmma_f32_16x16x64_bf8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x64_bf8_bf8Adaptor::wmma_f32_16x16x64_bf8_bf8Adaptor(wmma_f32_16x16x64_bf8_bf8 op) : wmma_f32_16x16x64_bf8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x64_bf8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.bf8_bf8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.bf8_bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.bf8_bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x64_bf8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x64_bf8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x64_bf8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x64_bf8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x64_bf8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x64_bf8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x64_bf8_bf8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x64_bf8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x64_bf8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x64_bf8_bf8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x64_bf8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x64_bf8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x64_bf8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_bf8 wmma_f32_16x16x64_bf8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x64_bf8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_bf8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x64_bf8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x64_bf8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x64_bf8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x64_bf8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x64_bf8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase::wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase(wmma_f32_16x16x64_bf8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x64_bf8_fp8Adaptor::wmma_f32_16x16x64_bf8_fp8Adaptor(wmma_f32_16x16x64_bf8_fp8 op) : wmma_f32_16x16x64_bf8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x64_bf8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.bf8_fp8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.bf8_fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.bf8_fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x64_bf8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x64_bf8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x64_bf8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x64_bf8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x64_bf8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x64_bf8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x64_bf8_fp8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x64_bf8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x64_bf8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x64_bf8_fp8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x64_bf8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x64_bf8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x64_bf8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_bf8_fp8 wmma_f32_16x16x64_bf8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x64_bf8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_fp8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_bf8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x64_bf8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x64_bf8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x64_bf8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x64_bf8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x64_fp8_bf8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase::wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase(wmma_f32_16x16x64_fp8_bf8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x64_fp8_bf8Adaptor::wmma_f32_16x16x64_fp8_bf8Adaptor(wmma_f32_16x16x64_fp8_bf8 op) : wmma_f32_16x16x64_fp8_bf8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x64_fp8_bf8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.fp8_bf8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.fp8_bf8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.fp8_bf8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_bf8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x64_fp8_bf8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x64_fp8_bf8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x64_fp8_bf8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x64_fp8_bf8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x64_fp8_bf8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_bf8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_bf8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x64_fp8_bf8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x64_fp8_bf8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x64_fp8_bf8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x64_fp8_bf8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x64_fp8_bf8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x64_fp8_bf8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x64_fp8_bf8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x64_fp8_bf8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_bf8 wmma_f32_16x16x64_fp8_bf8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x64_fp8_bf8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_bf8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_bf8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x64_fp8_bf8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x64_fp8_bf8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x64_fp8_bf8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x64_fp8_bf8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_f32_16x16x64_fp8_fp8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase::wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase(wmma_f32_16x16x64_fp8_fp8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_f32_16x16x64_fp8_fp8Adaptor::wmma_f32_16x16x64_fp8_fp8Adaptor(wmma_f32_16x16x64_fp8_fp8 op) : wmma_f32_16x16x64_fp8_fp8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_f32_16x16x64_fp8_fp8Adaptor::verify(::mlir::Location loc) { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.fp8_fp8' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.fp8_fp8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.f32.16x16x64.fp8_fp8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_fp8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_f32_16x16x64_fp8_fp8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_f32_16x16x64_fp8_fp8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer())); } std::optional wmma_f32_16x16x64_fp8_fp8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; return std::nullopt; } void wmma_f32_16x16x64_fp8_fp8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_f32_16x16x64_fp8_fp8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_fp8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_fp8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x64_fp8_fp8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); } ::mlir::ROCDL::WMMACModifier wmma_f32_16x16x64_fp8_fp8::getModC() { auto attr = getModCAttr(); return attr.getValue(); } bool wmma_f32_16x16x64_fp8_fp8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_f32_16x16x64_fp8_fp8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_f32_16x16x64_fp8_fp8::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_f32_16x16x64_fp8_fp8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x64_fp8_fp8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (modC) { odsState.getOrAddProperties().modC = modC; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(reuseA), std::forward(reuseB)); } void wmma_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_f32_16x16x64_fp8_fp8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_f32_16x16x64_fp8_fp8 wmma_f32_16x16x64_fp8_fp8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_f32_16x16x64_fp8_fp8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_fp8::verifyInvariantsImpl() { auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_f32_16x16x64_fp8_fp8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_f32_16x16x64_fp8_fp8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_f32_16x16x64_fp8_fp8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_f32_16x16x64_fp8_fp8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_f32_16x16x64_fp8_fp8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_i32_16x16x16_iu4 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_i32_16x16x16_iu4GenericAdaptorBase::wmma_i32_16x16x16_iu4GenericAdaptorBase(wmma_i32_16x16x16_iu4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr wmma_i32_16x16x16_iu4GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool wmma_i32_16x16x16_iu4GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x16_iu4GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool wmma_i32_16x16x16_iu4GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x16_iu4GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool wmma_i32_16x16x16_iu4GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_i32_16x16x16_iu4Adaptor::wmma_i32_16x16x16_iu4Adaptor(wmma_i32_16x16x16_iu4 op) : wmma_i32_16x16x16_iu4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_i32_16x16x16_iu4Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x16.iu4' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x16.iu4' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x16.iu4' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x16_iu4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_i32_16x16x16_iu4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_i32_16x16x16_iu4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional wmma_i32_16x16x16_iu4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void wmma_i32_16x16x16_iu4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_i32_16x16x16_iu4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult wmma_i32_16x16x16_iu4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x16_iu4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_i32_16x16x16_iu4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool wmma_i32_16x16x16_iu4::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x16_iu4::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x16_iu4::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void wmma_i32_16x16x16_iu4::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x16_iu4::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x16_iu4::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x16_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x16_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x16_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x16_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x16_iu4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_i32_16x16x16_iu4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu4 wmma_i32_16x16x16_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_i32_16x16x16_iu4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_i32_16x16x16_iu4::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x16_iu4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_i32_16x16x16_iu4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_i32_16x16x16_iu4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_i32_16x16x16_iu4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_i32_16x16x16_iu4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_i32_16x16x16_iu8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_i32_16x16x16_iu8GenericAdaptorBase::wmma_i32_16x16x16_iu8GenericAdaptorBase(wmma_i32_16x16x16_iu8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr wmma_i32_16x16x16_iu8GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool wmma_i32_16x16x16_iu8GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x16_iu8GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool wmma_i32_16x16x16_iu8GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x16_iu8GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool wmma_i32_16x16x16_iu8GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_i32_16x16x16_iu8Adaptor::wmma_i32_16x16x16_iu8Adaptor(wmma_i32_16x16x16_iu8 op) : wmma_i32_16x16x16_iu8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_i32_16x16x16_iu8Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x16.iu8' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x16.iu8' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x16.iu8' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x16_iu8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_i32_16x16x16_iu8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_i32_16x16x16_iu8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional wmma_i32_16x16x16_iu8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void wmma_i32_16x16x16_iu8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_i32_16x16x16_iu8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult wmma_i32_16x16x16_iu8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x16_iu8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_i32_16x16x16_iu8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool wmma_i32_16x16x16_iu8::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x16_iu8::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x16_iu8::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void wmma_i32_16x16x16_iu8::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x16_iu8::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x16_iu8::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x16_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x16_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x16_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x16_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x16_iu8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_i32_16x16x16_iu8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x16_iu8 wmma_i32_16x16x16_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_i32_16x16x16_iu8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_i32_16x16x16_iu8::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x16_iu8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_i32_16x16x16_iu8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_i32_16x16x16_iu8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_i32_16x16x16_iu8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_i32_16x16x16_iu8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_i32_16x16x32_iu4 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_i32_16x16x32_iu4GenericAdaptorBase::wmma_i32_16x16x32_iu4GenericAdaptorBase(wmma_i32_16x16x32_iu4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr wmma_i32_16x16x32_iu4GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool wmma_i32_16x16x32_iu4GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x32_iu4GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool wmma_i32_16x16x32_iu4GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x32_iu4GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool wmma_i32_16x16x32_iu4GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_i32_16x16x32_iu4Adaptor::wmma_i32_16x16x32_iu4Adaptor(wmma_i32_16x16x32_iu4 op) : wmma_i32_16x16x32_iu4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_i32_16x16x32_iu4Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x32.iu4' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x32.iu4' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x32.iu4' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x32_iu4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_i32_16x16x32_iu4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_i32_16x16x32_iu4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional wmma_i32_16x16x32_iu4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void wmma_i32_16x16x32_iu4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_i32_16x16x32_iu4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult wmma_i32_16x16x32_iu4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x32_iu4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_i32_16x16x32_iu4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool wmma_i32_16x16x32_iu4::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x32_iu4::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x32_iu4::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void wmma_i32_16x16x32_iu4::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x32_iu4::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x32_iu4::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x32_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x32_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x32_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x32_iu4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(clamp)); } void wmma_i32_16x16x32_iu4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_i32_16x16x32_iu4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x32_iu4 wmma_i32_16x16x32_iu4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_i32_16x16x32_iu4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_i32_16x16x32_iu4::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x32_iu4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_i32_16x16x32_iu4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_i32_16x16x32_iu4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_i32_16x16x32_iu4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_i32_16x16x32_iu4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_i32_16x16x64_iu8 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_i32_16x16x64_iu8GenericAdaptorBase::wmma_i32_16x16x64_iu8GenericAdaptorBase(wmma_i32_16x16x64_iu8 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::IntegerAttr wmma_i32_16x16x64_iu8GenericAdaptorBase::getSignAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signA); return attr; } bool wmma_i32_16x16x64_iu8GenericAdaptorBase::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x64_iu8GenericAdaptorBase::getSignBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().signB); return attr; } bool wmma_i32_16x16x64_iu8GenericAdaptorBase::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x64_iu8GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_i32_16x16x64_iu8GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x64_iu8GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_i32_16x16x64_iu8GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_i32_16x16x64_iu8GenericAdaptorBase::getClampAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().clamp); return attr; } bool wmma_i32_16x16x64_iu8GenericAdaptorBase::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_i32_16x16x64_iu8Adaptor::wmma_i32_16x16x64_iu8Adaptor(wmma_i32_16x16x64_iu8 op) : wmma_i32_16x16x64_iu8GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_i32_16x16x64_iu8Adaptor::verify(::mlir::Location loc) { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (tblgen_signA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x64.iu8' op attribute 'signA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_signB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_signB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_signB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x64.iu8' op attribute 'signB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x64.iu8' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x64.iu8' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_clamp && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_clamp))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_clamp).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.i32.16x16x64.iu8' op attribute 'clamp' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x64_iu8::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.clamp; auto attr = dict.get("clamp"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `clamp` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signA; auto attr = dict.get("signA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.signB; auto attr = dict.get("signB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `signB` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_i32_16x16x64_iu8::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.clamp; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("clamp", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.signA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signA", propStorage)); } { const auto &propStorage = prop.signB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("signB", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_i32_16x16x64_iu8::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.clamp.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.signA.getAsOpaquePointer()), llvm::hash_value(prop.signB.getAsOpaquePointer())); } std::optional wmma_i32_16x16x64_iu8::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "clamp") return prop.clamp; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "signA") return prop.signA; if (name == "signB") return prop.signB; return std::nullopt; } void wmma_i32_16x16x64_iu8::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "clamp") { prop.clamp = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signA") { prop.signA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "signB") { prop.signB = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_i32_16x16x64_iu8::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.clamp) attrs.append("clamp", prop.clamp); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.signA) attrs.append("signA", prop.signA); if (prop.signB) attrs.append("signB", prop.signB); } ::llvm::LogicalResult wmma_i32_16x16x64_iu8::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getClampAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "clamp", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getSignBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "signB", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x64_iu8::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.clamp))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.signB))) return ::mlir::failure(); return ::mlir::success(); } void wmma_i32_16x16x64_iu8::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.clamp); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.signA); writer.writeOptionalAttribute(prop.signB); } bool wmma_i32_16x16x64_iu8::getSignA() { auto attr = getSignAAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x64_iu8::getSignB() { auto attr = getSignBAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x64_iu8::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x64_iu8::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } bool wmma_i32_16x16x64_iu8::getClamp() { auto attr = getClampAttr(); return attr.getValue().getZExtValue(); } void wmma_i32_16x16x64_iu8::setSignA(bool attrValue) { getProperties().signA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x64_iu8::setSignB(bool attrValue) { getProperties().signB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x64_iu8::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x64_iu8::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x64_iu8::setClamp(bool attrValue) { getProperties().clamp = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_i32_16x16x64_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } odsState.addTypes(res); } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); } void wmma_i32_16x16x64_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); if (signA) { odsState.getOrAddProperties().signA = signA; } if (signB) { odsState.getOrAddProperties().signB = signB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } if (clamp) { odsState.getOrAddProperties().clamp = clamp; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::IntegerAttr signA, ::mlir::Value a, ::mlir::IntegerAttr signB, ::mlir::Value b, ::mlir::Value c, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB, ::mlir::IntegerAttr clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); } void wmma_i32_16x16x64_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool reuseA, bool reuseB, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); odsState.addTypes(res); } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool reuseA, bool reuseB, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool reuseA, bool reuseB, bool clamp) { return create(builder, builder.getLoc(), std::forward(res), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); } void wmma_i32_16x16x64_iu8::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool reuseA, bool reuseB, bool clamp) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.getOrAddProperties().signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signA); odsState.getOrAddProperties().signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), signB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.getOrAddProperties().clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), clamp); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool reuseA, bool reuseB, bool clamp) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, bool signA, ::mlir::Value a, bool signB, ::mlir::Value b, ::mlir::Value c, bool reuseA, bool reuseB, bool clamp) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(signA), std::forward(a), std::forward(signB), std::forward(b), std::forward(c), std::forward(reuseA), std::forward(reuseB), std::forward(clamp)); } void wmma_i32_16x16x64_iu8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_i32_16x16x64_iu8::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_i32_16x16x64_iu8 wmma_i32_16x16x64_iu8::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_i32_16x16x64_iu8::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.signA) properties.signA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.signB) properties.signB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.clamp) properties.clamp = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_i32_16x16x64_iu8::verifyInvariantsImpl() { auto tblgen_clamp = getProperties().clamp; (void)tblgen_clamp; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_signA = getProperties().signA; (void)tblgen_signA; auto tblgen_signB = getProperties().signB; (void)tblgen_signB; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signA, "signA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_signB, "signB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_clamp, "clamp"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_i32_16x16x64_iu8::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_i32_16x16x64_iu8::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_i32_16x16x64_iu8::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getSignBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("signB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getClampAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("clamp"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_i32_16x16x64_iu8) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_i32_16x16x64_iu8GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_scale16_f32_16x16x128_f8f6f4 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase(wmma_scale16_f32_16x16x128_f8f6f4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::MatrixFormatAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::MatrixFormatAttr>(getProperties().fmtA); return attr; } ::mlir::ROCDL::MatrixFormat wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtA() { auto attr = getFmtAAttr(); return attr.getValue(); } ::mlir::ROCDL::MatrixFormatAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::MatrixFormatAttr>(getProperties().fmtB); return attr; } ::mlir::ROCDL::MatrixFormat wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtB() { auto attr = getFmtBAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMACModifierAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getScaleATypeAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleAttr>(getProperties().scaleAType); return attr; } ::mlir::ROCDL::WMMAMatrixScale wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getScaleAType() { auto attr = getScaleATypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormatAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtScaleAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(getProperties().fmtScaleA); return attr; } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtScaleA() { auto attr = getFmtScaleAAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getScaleBTypeAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleAttr>(getProperties().scaleBType); return attr; } ::mlir::ROCDL::WMMAMatrixScale wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getScaleBType() { auto attr = getScaleBTypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormatAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtScaleBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(getProperties().fmtScaleB); return attr; } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtScaleB() { auto attr = getFmtScaleBAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_scale16_f32_16x16x128_f8f6f4Adaptor::wmma_scale16_f32_16x16x128_f8f6f4Adaptor(wmma_scale16_f32_16x16x128_f8f6f4 op) : wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_scale16_f32_16x16x128_f8f6f4Adaptor::verify(::mlir::Location loc) { auto tblgen_fmtA = getProperties().fmtA; (void)tblgen_fmtA; auto tblgen_fmtB = getProperties().fmtB; (void)tblgen_fmtB; auto tblgen_fmtScaleA = getProperties().fmtScaleA; (void)tblgen_fmtScaleA; auto tblgen_fmtScaleB = getProperties().fmtScaleB; (void)tblgen_fmtScaleB; auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_scaleAType = getProperties().scaleAType; (void)tblgen_scaleAType; auto tblgen_scaleBType = getProperties().scaleBType; (void)tblgen_scaleBType; if (tblgen_fmtA && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(tblgen_fmtA)))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'fmtA' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"); if (tblgen_fmtB && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(tblgen_fmtB)))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'fmtB' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"); if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_scaleAType && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(tblgen_scaleAType)))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'scaleAType' failed to satisfy constraint: matrix scale row selector"); if (tblgen_fmtScaleA && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(tblgen_fmtScaleA)))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'fmtScaleA' failed to satisfy constraint: matrix scale exponent formats"); if (tblgen_scaleBType && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(tblgen_scaleBType)))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'scaleBType' failed to satisfy constraint: matrix scale row selector"); if (tblgen_fmtScaleB && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(tblgen_fmtScaleB)))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'fmtScaleB' failed to satisfy constraint: matrix scale exponent formats"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.scale16.f32.16x16x128.f8f6f4' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_scale16_f32_16x16x128_f8f6f4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.fmtA; auto attr = dict.get("fmtA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fmtB; auto attr = dict.get("fmtB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fmtScaleA; auto attr = dict.get("fmtScaleA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtScaleA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fmtScaleB; auto attr = dict.get("fmtScaleB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtScaleB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.scaleAType; auto attr = dict.get("scaleAType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleAType` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.scaleBType; auto attr = dict.get("scaleBType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleBType` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_scale16_f32_16x16x128_f8f6f4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.fmtA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtA", propStorage)); } { const auto &propStorage = prop.fmtB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtB", propStorage)); } { const auto &propStorage = prop.fmtScaleA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtScaleA", propStorage)); } { const auto &propStorage = prop.fmtScaleB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtScaleB", propStorage)); } { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.scaleAType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleAType", propStorage)); } { const auto &propStorage = prop.scaleBType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleBType", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_scale16_f32_16x16x128_f8f6f4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.fmtA.getAsOpaquePointer()), llvm::hash_value(prop.fmtB.getAsOpaquePointer()), llvm::hash_value(prop.fmtScaleA.getAsOpaquePointer()), llvm::hash_value(prop.fmtScaleB.getAsOpaquePointer()), llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.scaleAType.getAsOpaquePointer()), llvm::hash_value(prop.scaleBType.getAsOpaquePointer())); } std::optional wmma_scale16_f32_16x16x128_f8f6f4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "fmtA") return prop.fmtA; if (name == "fmtB") return prop.fmtB; if (name == "fmtScaleA") return prop.fmtScaleA; if (name == "fmtScaleB") return prop.fmtScaleB; if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "scaleAType") return prop.scaleAType; if (name == "scaleBType") return prop.scaleBType; return std::nullopt; } void wmma_scale16_f32_16x16x128_f8f6f4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "fmtA") { prop.fmtA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fmtB") { prop.fmtB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fmtScaleA") { prop.fmtScaleA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fmtScaleB") { prop.fmtScaleB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "scaleAType") { prop.scaleAType = ::llvm::dyn_cast_or_null>(value); return; } if (name == "scaleBType") { prop.scaleBType = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_scale16_f32_16x16x128_f8f6f4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.fmtA) attrs.append("fmtA", prop.fmtA); if (prop.fmtB) attrs.append("fmtB", prop.fmtB); if (prop.fmtScaleA) attrs.append("fmtScaleA", prop.fmtScaleA); if (prop.fmtScaleB) attrs.append("fmtScaleB", prop.fmtScaleB); if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.scaleAType) attrs.append("scaleAType", prop.scaleAType); if (prop.scaleBType) attrs.append("scaleBType", prop.scaleBType); } ::llvm::LogicalResult wmma_scale16_f32_16x16x128_f8f6f4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getFmtAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(attr, "fmtA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFmtBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(attr, "fmtB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFmtScaleAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(attr, "fmtScaleA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFmtScaleBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(attr, "fmtScaleB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getScaleATypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(attr, "scaleAType", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getScaleBTypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(attr, "scaleBType", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_scale16_f32_16x16x128_f8f6f4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.fmtA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.fmtB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.fmtScaleA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.fmtScaleB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.scaleAType))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.scaleBType))) return ::mlir::failure(); return ::mlir::success(); } void wmma_scale16_f32_16x16x128_f8f6f4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.fmtA); writer.writeOptionalAttribute(prop.fmtB); writer.writeOptionalAttribute(prop.fmtScaleA); writer.writeOptionalAttribute(prop.fmtScaleB); writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.scaleAType); writer.writeOptionalAttribute(prop.scaleBType); } ::mlir::ROCDL::MatrixFormat wmma_scale16_f32_16x16x128_f8f6f4::getFmtA() { auto attr = getFmtAAttr(); return attr.getValue(); } ::mlir::ROCDL::MatrixFormat wmma_scale16_f32_16x16x128_f8f6f4::getFmtB() { auto attr = getFmtBAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMACModifier wmma_scale16_f32_16x16x128_f8f6f4::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScale wmma_scale16_f32_16x16x128_f8f6f4::getScaleAType() { auto attr = getScaleATypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale16_f32_16x16x128_f8f6f4::getFmtScaleA() { auto attr = getFmtScaleAAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScale wmma_scale16_f32_16x16x128_f8f6f4::getScaleBType() { auto attr = getScaleBTypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale16_f32_16x16x128_f8f6f4::getFmtScaleB() { auto attr = getFmtScaleBAttr(); return attr.getValue(); } bool wmma_scale16_f32_16x16x128_f8f6f4::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_scale16_f32_16x16x128_f8f6f4::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_scale16_f32_16x16x128_f8f6f4::setFmtA(::mlir::ROCDL::MatrixFormat attrValue) { getProperties().fmtA = ::mlir::ROCDL::MatrixFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::setFmtB(::mlir::ROCDL::MatrixFormat attrValue) { getProperties().fmtB = ::mlir::ROCDL::MatrixFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::setScaleAType(::mlir::ROCDL::WMMAMatrixScale attrValue) { getProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::setFmtScaleA(::mlir::ROCDL::WMMAMatrixScaleFormat attrValue) { getProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::setScaleBType(::mlir::ROCDL::WMMAMatrixScale attrValue) { getProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::setFmtScaleB(::mlir::ROCDL::WMMAMatrixScaleFormat attrValue) { getProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_scale16_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); if (fmtA) { odsState.getOrAddProperties().fmtA = fmtA; } if (fmtB) { odsState.getOrAddProperties().fmtB = fmtB; } if (modC) { odsState.getOrAddProperties().modC = modC; } if (scaleAType) { odsState.getOrAddProperties().scaleAType = scaleAType; } if (fmtScaleA) { odsState.getOrAddProperties().fmtScaleA = fmtScaleA; } if (scaleBType) { odsState.getOrAddProperties().scaleBType = scaleBType; } if (fmtScaleB) { odsState.getOrAddProperties().fmtScaleB = fmtScaleB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale16_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); if (fmtA) { odsState.getOrAddProperties().fmtA = fmtA; } if (fmtB) { odsState.getOrAddProperties().fmtB = fmtB; } if (modC) { odsState.getOrAddProperties().modC = modC; } if (scaleAType) { odsState.getOrAddProperties().scaleAType = scaleAType; } if (fmtScaleA) { odsState.getOrAddProperties().fmtScaleA = fmtScaleA; } if (scaleBType) { odsState.getOrAddProperties().scaleBType = scaleBType; } if (fmtScaleB) { odsState.getOrAddProperties().fmtScaleB = fmtScaleB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale16_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().fmtA = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), fmtA); odsState.getOrAddProperties().fmtB = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), fmtB); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleAType); odsState.getOrAddProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleA); odsState.getOrAddProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleBType); odsState.getOrAddProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale16_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().fmtA = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), fmtA); odsState.getOrAddProperties().fmtB = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), fmtB); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleAType); odsState.getOrAddProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleA); odsState.getOrAddProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleBType); odsState.getOrAddProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale16_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_scale16_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_16x16x128_f8f6f4 wmma_scale16_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_scale16_f32_16x16x128_f8f6f4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.fmtA) properties.fmtA = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::MatrixFormat::fp8_e4m3); if (!properties.fmtB) properties.fmtB = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::MatrixFormat::fp8_e4m3); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.scaleAType) properties.scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0); if (!properties.fmtScaleA) properties.fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8); if (!properties.scaleBType) properties.scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0); if (!properties.fmtScaleB) properties.fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_scale16_f32_16x16x128_f8f6f4::verifyInvariantsImpl() { auto tblgen_fmtA = getProperties().fmtA; (void)tblgen_fmtA; auto tblgen_fmtB = getProperties().fmtB; (void)tblgen_fmtB; auto tblgen_fmtScaleA = getProperties().fmtScaleA; (void)tblgen_fmtScaleA; auto tblgen_fmtScaleB = getProperties().fmtScaleB; (void)tblgen_fmtScaleB; auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_scaleAType = getProperties().scaleAType; (void)tblgen_scaleAType; auto tblgen_scaleBType = getProperties().scaleBType; (void)tblgen_scaleBType; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(*this, tblgen_fmtA, "fmtA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(*this, tblgen_fmtB, "fmtB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(*this, tblgen_scaleAType, "scaleAType"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(*this, tblgen_fmtScaleA, "fmtScaleA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(*this, tblgen_scaleBType, "scaleBType"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(*this, tblgen_fmtScaleB, "fmtScaleB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_scale16_f32_16x16x128_f8f6f4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_scale16_f32_16x16x128_f8f6f4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleAOperands(&scaleARawOperand, 1); ::llvm::SMLoc scaleAOperandsLoc; (void)scaleAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleBOperands(&scaleBRawOperand, 1); ::llvm::SMLoc scaleBOperandsLoc; (void)scaleBOperandsLoc; ::mlir::ROCDL::MatrixFormatAttr fmtAAttr; ::mlir::ROCDL::MatrixFormatAttr fmtBAttr; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::mlir::ROCDL::WMMAMatrixScaleAttr scaleATypeAttr; ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleAAttr; ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBTypeAttr; ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleBAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleBRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtA")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtAAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtAAttr) result.getOrAddProperties().fmtA = fmtAAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtB")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtBAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtBAttr) result.getOrAddProperties().fmtB = fmtBAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("scaleAType")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleATypeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (scaleATypeAttr) result.getOrAddProperties().scaleAType = scaleATypeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtScaleA")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtScaleAAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtScaleAAttr) result.getOrAddProperties().fmtScaleA = fmtScaleAAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("scaleBType")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleBTypeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (scaleBTypeAttr) result.getOrAddProperties().scaleBType = scaleBTypeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtScaleB")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtScaleBAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtScaleBAttr) result.getOrAddProperties().fmtScaleB = fmtScaleBAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, scaleAOperands, scaleBOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_scale16_f32_16x16x128_f8f6f4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleB(); _odsPrinter << ","; _odsPrinter << ' ' << "fmtA"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtAAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtB"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtBAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "scaleAType"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getScaleATypeAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtScaleA"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtScaleAAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "scaleBType"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getScaleBTypeAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtScaleB"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtScaleBAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("fmtA"); elidedAttrs.push_back("fmtB"); elidedAttrs.push_back("modC"); elidedAttrs.push_back("scaleAType"); elidedAttrs.push_back("fmtScaleA"); elidedAttrs.push_back("scaleBType"); elidedAttrs.push_back("fmtScaleB"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtAAttr(); if(attr && (attr == ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::MatrixFormat::fp8_e4m3))) elidedAttrs.push_back("fmtA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtBAttr(); if(attr && (attr == ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::MatrixFormat::fp8_e4m3))) elidedAttrs.push_back("fmtB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getScaleATypeAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0))) elidedAttrs.push_back("scaleAType"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtScaleAAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8))) elidedAttrs.push_back("fmtScaleA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getScaleBTypeAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0))) elidedAttrs.push_back("scaleBType"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtScaleBAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8))) elidedAttrs.push_back("fmtScaleB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_scale16_f32_16x16x128_f8f6f4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_scale16_f32_16x16x128_f8f6f4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_scale16_f32_32x16x128_f4 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::wmma_scale16_f32_32x16x128_f4GenericAdaptorBase(wmma_scale16_f32_32x16x128_f4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleAttr wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getScaleATypeAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleAttr>(getProperties().scaleAType); return attr; } ::mlir::ROCDL::WMMAMatrixScale wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getScaleAType() { auto attr = getScaleATypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormatAttr wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getFmtScaleAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(getProperties().fmtScaleA); return attr; } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getFmtScaleA() { auto attr = getFmtScaleAAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleAttr wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getScaleBTypeAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleAttr>(getProperties().scaleBType); return attr; } ::mlir::ROCDL::WMMAMatrixScale wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getScaleBType() { auto attr = getScaleBTypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormatAttr wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getFmtScaleBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(getProperties().fmtScaleB); return attr; } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getFmtScaleB() { auto attr = getFmtScaleBAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_scale16_f32_32x16x128_f4Adaptor::wmma_scale16_f32_32x16x128_f4Adaptor(wmma_scale16_f32_32x16x128_f4 op) : wmma_scale16_f32_32x16x128_f4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_scale16_f32_32x16x128_f4Adaptor::verify(::mlir::Location loc) { auto tblgen_fmtScaleA = getProperties().fmtScaleA; (void)tblgen_fmtScaleA; auto tblgen_fmtScaleB = getProperties().fmtScaleB; (void)tblgen_fmtScaleB; auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_scaleAType = getProperties().scaleAType; (void)tblgen_scaleAType; auto tblgen_scaleBType = getProperties().scaleBType; (void)tblgen_scaleBType; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.scale16.f32.32x16x128.f4' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_scaleAType && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(tblgen_scaleAType)))) return emitError(loc, "'rocdl.wmma.scale16.f32.32x16x128.f4' op attribute 'scaleAType' failed to satisfy constraint: matrix scale row selector"); if (tblgen_fmtScaleA && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(tblgen_fmtScaleA)))) return emitError(loc, "'rocdl.wmma.scale16.f32.32x16x128.f4' op attribute 'fmtScaleA' failed to satisfy constraint: matrix scale exponent formats"); if (tblgen_scaleBType && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(tblgen_scaleBType)))) return emitError(loc, "'rocdl.wmma.scale16.f32.32x16x128.f4' op attribute 'scaleBType' failed to satisfy constraint: matrix scale row selector"); if (tblgen_fmtScaleB && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(tblgen_fmtScaleB)))) return emitError(loc, "'rocdl.wmma.scale16.f32.32x16x128.f4' op attribute 'fmtScaleB' failed to satisfy constraint: matrix scale exponent formats"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.scale16.f32.32x16x128.f4' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.scale16.f32.32x16x128.f4' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_scale16_f32_32x16x128_f4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.fmtScaleA; auto attr = dict.get("fmtScaleA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtScaleA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fmtScaleB; auto attr = dict.get("fmtScaleB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtScaleB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.scaleAType; auto attr = dict.get("scaleAType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleAType` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.scaleBType; auto attr = dict.get("scaleBType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleBType` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_scale16_f32_32x16x128_f4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.fmtScaleA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtScaleA", propStorage)); } { const auto &propStorage = prop.fmtScaleB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtScaleB", propStorage)); } { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.scaleAType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleAType", propStorage)); } { const auto &propStorage = prop.scaleBType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleBType", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_scale16_f32_32x16x128_f4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.fmtScaleA.getAsOpaquePointer()), llvm::hash_value(prop.fmtScaleB.getAsOpaquePointer()), llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.scaleAType.getAsOpaquePointer()), llvm::hash_value(prop.scaleBType.getAsOpaquePointer())); } std::optional wmma_scale16_f32_32x16x128_f4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "fmtScaleA") return prop.fmtScaleA; if (name == "fmtScaleB") return prop.fmtScaleB; if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "scaleAType") return prop.scaleAType; if (name == "scaleBType") return prop.scaleBType; return std::nullopt; } void wmma_scale16_f32_32x16x128_f4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "fmtScaleA") { prop.fmtScaleA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fmtScaleB") { prop.fmtScaleB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "scaleAType") { prop.scaleAType = ::llvm::dyn_cast_or_null>(value); return; } if (name == "scaleBType") { prop.scaleBType = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_scale16_f32_32x16x128_f4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.fmtScaleA) attrs.append("fmtScaleA", prop.fmtScaleA); if (prop.fmtScaleB) attrs.append("fmtScaleB", prop.fmtScaleB); if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.scaleAType) attrs.append("scaleAType", prop.scaleAType); if (prop.scaleBType) attrs.append("scaleBType", prop.scaleBType); } ::llvm::LogicalResult wmma_scale16_f32_32x16x128_f4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getFmtScaleAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(attr, "fmtScaleA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFmtScaleBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(attr, "fmtScaleB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getScaleATypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(attr, "scaleAType", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getScaleBTypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(attr, "scaleBType", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_scale16_f32_32x16x128_f4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.fmtScaleA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.fmtScaleB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.scaleAType))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.scaleBType))) return ::mlir::failure(); return ::mlir::success(); } void wmma_scale16_f32_32x16x128_f4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.fmtScaleA); writer.writeOptionalAttribute(prop.fmtScaleB); writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.scaleAType); writer.writeOptionalAttribute(prop.scaleBType); } ::mlir::ROCDL::WMMACModifier wmma_scale16_f32_32x16x128_f4::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScale wmma_scale16_f32_32x16x128_f4::getScaleAType() { auto attr = getScaleATypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale16_f32_32x16x128_f4::getFmtScaleA() { auto attr = getFmtScaleAAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScale wmma_scale16_f32_32x16x128_f4::getScaleBType() { auto attr = getScaleBTypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale16_f32_32x16x128_f4::getFmtScaleB() { auto attr = getFmtScaleBAttr(); return attr.getValue(); } bool wmma_scale16_f32_32x16x128_f4::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_scale16_f32_32x16x128_f4::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_scale16_f32_32x16x128_f4::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_32x16x128_f4::setScaleAType(::mlir::ROCDL::WMMAMatrixScale attrValue) { getProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_32x16x128_f4::setFmtScaleA(::mlir::ROCDL::WMMAMatrixScaleFormat attrValue) { getProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_32x16x128_f4::setScaleBType(::mlir::ROCDL::WMMAMatrixScale attrValue) { getProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_32x16x128_f4::setFmtScaleB(::mlir::ROCDL::WMMAMatrixScaleFormat attrValue) { getProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale16_f32_32x16x128_f4::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_scale16_f32_32x16x128_f4::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_scale16_f32_32x16x128_f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); if (modC) { odsState.getOrAddProperties().modC = modC; } if (scaleAType) { odsState.getOrAddProperties().scaleAType = scaleAType; } if (fmtScaleA) { odsState.getOrAddProperties().fmtScaleA = fmtScaleA; } if (scaleBType) { odsState.getOrAddProperties().scaleBType = scaleBType; } if (fmtScaleB) { odsState.getOrAddProperties().fmtScaleB = fmtScaleB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale16_f32_32x16x128_f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); if (modC) { odsState.getOrAddProperties().modC = modC; } if (scaleAType) { odsState.getOrAddProperties().scaleAType = scaleAType; } if (fmtScaleA) { odsState.getOrAddProperties().fmtScaleA = fmtScaleA; } if (scaleBType) { odsState.getOrAddProperties().scaleBType = scaleBType; } if (fmtScaleB) { odsState.getOrAddProperties().fmtScaleB = fmtScaleB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale16_f32_32x16x128_f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleAType); odsState.getOrAddProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleA); odsState.getOrAddProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleBType); odsState.getOrAddProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale16_f32_32x16x128_f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleAType); odsState.getOrAddProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleA); odsState.getOrAddProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleBType); odsState.getOrAddProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale16_f32_32x16x128_f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_scale16_f32_32x16x128_f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale16_f32_32x16x128_f4 wmma_scale16_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_scale16_f32_32x16x128_f4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.scaleAType) properties.scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0); if (!properties.fmtScaleA) properties.fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8); if (!properties.scaleBType) properties.scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0); if (!properties.fmtScaleB) properties.fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_scale16_f32_32x16x128_f4::verifyInvariantsImpl() { auto tblgen_fmtScaleA = getProperties().fmtScaleA; (void)tblgen_fmtScaleA; auto tblgen_fmtScaleB = getProperties().fmtScaleB; (void)tblgen_fmtScaleB; auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_scaleAType = getProperties().scaleAType; (void)tblgen_scaleAType; auto tblgen_scaleBType = getProperties().scaleBType; (void)tblgen_scaleBType; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(*this, tblgen_scaleAType, "scaleAType"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(*this, tblgen_fmtScaleA, "fmtScaleA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(*this, tblgen_scaleBType, "scaleBType"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(*this, tblgen_fmtScaleB, "fmtScaleB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps26(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_scale16_f32_32x16x128_f4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_scale16_f32_32x16x128_f4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleAOperands(&scaleARawOperand, 1); ::llvm::SMLoc scaleAOperandsLoc; (void)scaleAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleBOperands(&scaleBRawOperand, 1); ::llvm::SMLoc scaleBOperandsLoc; (void)scaleBOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::mlir::ROCDL::WMMAMatrixScaleAttr scaleATypeAttr; ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleAAttr; ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBTypeAttr; ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleBAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleBRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("scaleAType")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleATypeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (scaleATypeAttr) result.getOrAddProperties().scaleAType = scaleATypeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtScaleA")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtScaleAAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtScaleAAttr) result.getOrAddProperties().fmtScaleA = fmtScaleAAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("scaleBType")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleBTypeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (scaleBTypeAttr) result.getOrAddProperties().scaleBType = scaleBTypeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtScaleB")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtScaleBAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtScaleBAttr) result.getOrAddProperties().fmtScaleB = fmtScaleBAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, scaleAOperands, scaleBOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_scale16_f32_32x16x128_f4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleB(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "scaleAType"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getScaleATypeAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtScaleA"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtScaleAAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "scaleBType"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getScaleBTypeAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtScaleB"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtScaleBAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); elidedAttrs.push_back("scaleAType"); elidedAttrs.push_back("fmtScaleA"); elidedAttrs.push_back("scaleBType"); elidedAttrs.push_back("fmtScaleB"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getScaleATypeAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0))) elidedAttrs.push_back("scaleAType"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtScaleAAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8))) elidedAttrs.push_back("fmtScaleA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getScaleBTypeAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0))) elidedAttrs.push_back("scaleBType"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtScaleBAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8))) elidedAttrs.push_back("fmtScaleB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_scale16_f32_32x16x128_f4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_scale16_f32_32x16x128_f4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_scale_f32_16x16x128_f8f6f4 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase(wmma_scale_f32_16x16x128_f8f6f4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::MatrixFormatAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::MatrixFormatAttr>(getProperties().fmtA); return attr; } ::mlir::ROCDL::MatrixFormat wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtA() { auto attr = getFmtAAttr(); return attr.getValue(); } ::mlir::ROCDL::MatrixFormatAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::MatrixFormatAttr>(getProperties().fmtB); return attr; } ::mlir::ROCDL::MatrixFormat wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtB() { auto attr = getFmtBAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMACModifierAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getScaleATypeAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleAttr>(getProperties().scaleAType); return attr; } ::mlir::ROCDL::WMMAMatrixScale wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getScaleAType() { auto attr = getScaleATypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormatAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtScaleAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(getProperties().fmtScaleA); return attr; } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtScaleA() { auto attr = getFmtScaleAAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getScaleBTypeAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleAttr>(getProperties().scaleBType); return attr; } ::mlir::ROCDL::WMMAMatrixScale wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getScaleBType() { auto attr = getScaleBTypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormatAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtScaleBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(getProperties().fmtScaleB); return attr; } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getFmtScaleB() { auto attr = getFmtScaleBAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_scale_f32_16x16x128_f8f6f4Adaptor::wmma_scale_f32_16x16x128_f8f6f4Adaptor(wmma_scale_f32_16x16x128_f8f6f4 op) : wmma_scale_f32_16x16x128_f8f6f4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_scale_f32_16x16x128_f8f6f4Adaptor::verify(::mlir::Location loc) { auto tblgen_fmtA = getProperties().fmtA; (void)tblgen_fmtA; auto tblgen_fmtB = getProperties().fmtB; (void)tblgen_fmtB; auto tblgen_fmtScaleA = getProperties().fmtScaleA; (void)tblgen_fmtScaleA; auto tblgen_fmtScaleB = getProperties().fmtScaleB; (void)tblgen_fmtScaleB; auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_scaleAType = getProperties().scaleAType; (void)tblgen_scaleAType; auto tblgen_scaleBType = getProperties().scaleBType; (void)tblgen_scaleBType; if (tblgen_fmtA && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(tblgen_fmtA)))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'fmtA' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"); if (tblgen_fmtB && !((::llvm::isa<::mlir::ROCDL::MatrixFormatAttr>(tblgen_fmtB)))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'fmtB' failed to satisfy constraint: matrix operand formats selected by scaled MFMA/WMMA format fields"); if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_scaleAType && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(tblgen_scaleAType)))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'scaleAType' failed to satisfy constraint: matrix scale row selector"); if (tblgen_fmtScaleA && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(tblgen_fmtScaleA)))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'fmtScaleA' failed to satisfy constraint: matrix scale exponent formats"); if (tblgen_scaleBType && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(tblgen_scaleBType)))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'scaleBType' failed to satisfy constraint: matrix scale row selector"); if (tblgen_fmtScaleB && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(tblgen_fmtScaleB)))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'fmtScaleB' failed to satisfy constraint: matrix scale exponent formats"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.scale.f32.16x16x128.f8f6f4' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_scale_f32_16x16x128_f8f6f4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.fmtA; auto attr = dict.get("fmtA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fmtB; auto attr = dict.get("fmtB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fmtScaleA; auto attr = dict.get("fmtScaleA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtScaleA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fmtScaleB; auto attr = dict.get("fmtScaleB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtScaleB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.scaleAType; auto attr = dict.get("scaleAType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleAType` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.scaleBType; auto attr = dict.get("scaleBType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleBType` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_scale_f32_16x16x128_f8f6f4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.fmtA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtA", propStorage)); } { const auto &propStorage = prop.fmtB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtB", propStorage)); } { const auto &propStorage = prop.fmtScaleA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtScaleA", propStorage)); } { const auto &propStorage = prop.fmtScaleB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtScaleB", propStorage)); } { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.scaleAType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleAType", propStorage)); } { const auto &propStorage = prop.scaleBType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleBType", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_scale_f32_16x16x128_f8f6f4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.fmtA.getAsOpaquePointer()), llvm::hash_value(prop.fmtB.getAsOpaquePointer()), llvm::hash_value(prop.fmtScaleA.getAsOpaquePointer()), llvm::hash_value(prop.fmtScaleB.getAsOpaquePointer()), llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.scaleAType.getAsOpaquePointer()), llvm::hash_value(prop.scaleBType.getAsOpaquePointer())); } std::optional wmma_scale_f32_16x16x128_f8f6f4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "fmtA") return prop.fmtA; if (name == "fmtB") return prop.fmtB; if (name == "fmtScaleA") return prop.fmtScaleA; if (name == "fmtScaleB") return prop.fmtScaleB; if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "scaleAType") return prop.scaleAType; if (name == "scaleBType") return prop.scaleBType; return std::nullopt; } void wmma_scale_f32_16x16x128_f8f6f4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "fmtA") { prop.fmtA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fmtB") { prop.fmtB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fmtScaleA") { prop.fmtScaleA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fmtScaleB") { prop.fmtScaleB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "scaleAType") { prop.scaleAType = ::llvm::dyn_cast_or_null>(value); return; } if (name == "scaleBType") { prop.scaleBType = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_scale_f32_16x16x128_f8f6f4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.fmtA) attrs.append("fmtA", prop.fmtA); if (prop.fmtB) attrs.append("fmtB", prop.fmtB); if (prop.fmtScaleA) attrs.append("fmtScaleA", prop.fmtScaleA); if (prop.fmtScaleB) attrs.append("fmtScaleB", prop.fmtScaleB); if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.scaleAType) attrs.append("scaleAType", prop.scaleAType); if (prop.scaleBType) attrs.append("scaleBType", prop.scaleBType); } ::llvm::LogicalResult wmma_scale_f32_16x16x128_f8f6f4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getFmtAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(attr, "fmtA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFmtBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(attr, "fmtB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFmtScaleAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(attr, "fmtScaleA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFmtScaleBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(attr, "fmtScaleB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getScaleATypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(attr, "scaleAType", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getScaleBTypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(attr, "scaleBType", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_scale_f32_16x16x128_f8f6f4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.fmtA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.fmtB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.fmtScaleA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.fmtScaleB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.scaleAType))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.scaleBType))) return ::mlir::failure(); return ::mlir::success(); } void wmma_scale_f32_16x16x128_f8f6f4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.fmtA); writer.writeOptionalAttribute(prop.fmtB); writer.writeOptionalAttribute(prop.fmtScaleA); writer.writeOptionalAttribute(prop.fmtScaleB); writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.scaleAType); writer.writeOptionalAttribute(prop.scaleBType); } ::mlir::ROCDL::MatrixFormat wmma_scale_f32_16x16x128_f8f6f4::getFmtA() { auto attr = getFmtAAttr(); return attr.getValue(); } ::mlir::ROCDL::MatrixFormat wmma_scale_f32_16x16x128_f8f6f4::getFmtB() { auto attr = getFmtBAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMACModifier wmma_scale_f32_16x16x128_f8f6f4::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScale wmma_scale_f32_16x16x128_f8f6f4::getScaleAType() { auto attr = getScaleATypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale_f32_16x16x128_f8f6f4::getFmtScaleA() { auto attr = getFmtScaleAAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScale wmma_scale_f32_16x16x128_f8f6f4::getScaleBType() { auto attr = getScaleBTypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale_f32_16x16x128_f8f6f4::getFmtScaleB() { auto attr = getFmtScaleBAttr(); return attr.getValue(); } bool wmma_scale_f32_16x16x128_f8f6f4::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_scale_f32_16x16x128_f8f6f4::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_scale_f32_16x16x128_f8f6f4::setFmtA(::mlir::ROCDL::MatrixFormat attrValue) { getProperties().fmtA = ::mlir::ROCDL::MatrixFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::setFmtB(::mlir::ROCDL::MatrixFormat attrValue) { getProperties().fmtB = ::mlir::ROCDL::MatrixFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::setScaleAType(::mlir::ROCDL::WMMAMatrixScale attrValue) { getProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::setFmtScaleA(::mlir::ROCDL::WMMAMatrixScaleFormat attrValue) { getProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::setScaleBType(::mlir::ROCDL::WMMAMatrixScale attrValue) { getProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::setFmtScaleB(::mlir::ROCDL::WMMAMatrixScaleFormat attrValue) { getProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); if (fmtA) { odsState.getOrAddProperties().fmtA = fmtA; } if (fmtB) { odsState.getOrAddProperties().fmtB = fmtB; } if (modC) { odsState.getOrAddProperties().modC = modC; } if (scaleAType) { odsState.getOrAddProperties().scaleAType = scaleAType; } if (fmtScaleA) { odsState.getOrAddProperties().fmtScaleA = fmtScaleA; } if (scaleBType) { odsState.getOrAddProperties().scaleBType = scaleBType; } if (fmtScaleB) { odsState.getOrAddProperties().fmtScaleB = fmtScaleB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); if (fmtA) { odsState.getOrAddProperties().fmtA = fmtA; } if (fmtB) { odsState.getOrAddProperties().fmtB = fmtB; } if (modC) { odsState.getOrAddProperties().modC = modC; } if (scaleAType) { odsState.getOrAddProperties().scaleAType = scaleAType; } if (fmtScaleA) { odsState.getOrAddProperties().fmtScaleA = fmtScaleA; } if (scaleBType) { odsState.getOrAddProperties().scaleBType = scaleBType; } if (fmtScaleB) { odsState.getOrAddProperties().fmtScaleB = fmtScaleB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormatAttr fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormatAttr fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().fmtA = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), fmtA); odsState.getOrAddProperties().fmtB = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), fmtB); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleAType); odsState.getOrAddProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleA); odsState.getOrAddProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleBType); odsState.getOrAddProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().fmtA = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), fmtA); odsState.getOrAddProperties().fmtB = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), fmtB); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleAType); odsState.getOrAddProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleA); odsState.getOrAddProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleBType); odsState.getOrAddProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ROCDL::MatrixFormat fmtA, ::mlir::Value a, ::mlir::ROCDL::MatrixFormat fmtB, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(fmtA), std::forward(a), std::forward(fmtB), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_scale_f32_16x16x128_f8f6f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_16x16x128_f8f6f4 wmma_scale_f32_16x16x128_f8f6f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_scale_f32_16x16x128_f8f6f4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.fmtA) properties.fmtA = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::MatrixFormat::fp8_e4m3); if (!properties.fmtB) properties.fmtB = ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::MatrixFormat::fp8_e4m3); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.scaleAType) properties.scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0); if (!properties.fmtScaleA) properties.fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8); if (!properties.scaleBType) properties.scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0); if (!properties.fmtScaleB) properties.fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_scale_f32_16x16x128_f8f6f4::verifyInvariantsImpl() { auto tblgen_fmtA = getProperties().fmtA; (void)tblgen_fmtA; auto tblgen_fmtB = getProperties().fmtB; (void)tblgen_fmtB; auto tblgen_fmtScaleA = getProperties().fmtScaleA; (void)tblgen_fmtScaleA; auto tblgen_fmtScaleB = getProperties().fmtScaleB; (void)tblgen_fmtScaleB; auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_scaleAType = getProperties().scaleAType; (void)tblgen_scaleAType; auto tblgen_scaleBType = getProperties().scaleBType; (void)tblgen_scaleBType; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(*this, tblgen_fmtA, "fmtA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps15(*this, tblgen_fmtB, "fmtB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(*this, tblgen_scaleAType, "scaleAType"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(*this, tblgen_fmtScaleA, "fmtScaleA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(*this, tblgen_scaleBType, "scaleBType"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(*this, tblgen_fmtScaleB, "fmtScaleB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_scale_f32_16x16x128_f8f6f4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_scale_f32_16x16x128_f8f6f4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleAOperands(&scaleARawOperand, 1); ::llvm::SMLoc scaleAOperandsLoc; (void)scaleAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleBOperands(&scaleBRawOperand, 1); ::llvm::SMLoc scaleBOperandsLoc; (void)scaleBOperandsLoc; ::mlir::ROCDL::MatrixFormatAttr fmtAAttr; ::mlir::ROCDL::MatrixFormatAttr fmtBAttr; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::mlir::ROCDL::WMMAMatrixScaleAttr scaleATypeAttr; ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleAAttr; ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBTypeAttr; ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleBAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleBRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtA")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtAAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtAAttr) result.getOrAddProperties().fmtA = fmtAAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtB")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtBAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtBAttr) result.getOrAddProperties().fmtB = fmtBAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("scaleAType")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleATypeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (scaleATypeAttr) result.getOrAddProperties().scaleAType = scaleATypeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtScaleA")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtScaleAAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtScaleAAttr) result.getOrAddProperties().fmtScaleA = fmtScaleAAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("scaleBType")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleBTypeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (scaleBTypeAttr) result.getOrAddProperties().scaleBType = scaleBTypeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtScaleB")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtScaleBAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtScaleBAttr) result.getOrAddProperties().fmtScaleB = fmtScaleBAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, scaleAOperands, scaleBOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_scale_f32_16x16x128_f8f6f4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleB(); _odsPrinter << ","; _odsPrinter << ' ' << "fmtA"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtAAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtB"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtBAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "scaleAType"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getScaleATypeAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtScaleA"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtScaleAAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "scaleBType"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getScaleBTypeAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtScaleB"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtScaleBAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("fmtA"); elidedAttrs.push_back("fmtB"); elidedAttrs.push_back("modC"); elidedAttrs.push_back("scaleAType"); elidedAttrs.push_back("fmtScaleA"); elidedAttrs.push_back("scaleBType"); elidedAttrs.push_back("fmtScaleB"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtAAttr(); if(attr && (attr == ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::MatrixFormat::fp8_e4m3))) elidedAttrs.push_back("fmtA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtBAttr(); if(attr && (attr == ::mlir::ROCDL::MatrixFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::MatrixFormat::fp8_e4m3))) elidedAttrs.push_back("fmtB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getScaleATypeAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0))) elidedAttrs.push_back("scaleAType"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtScaleAAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8))) elidedAttrs.push_back("fmtScaleA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getScaleBTypeAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0))) elidedAttrs.push_back("scaleBType"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtScaleBAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8))) elidedAttrs.push_back("fmtScaleB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_scale_f32_16x16x128_f8f6f4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_scale_f32_16x16x128_f8f6f4GenericAdaptorBase::Properties) namespace mlir::ROCDL { //===----------------------------------------------------------------------===// // ::mlir::ROCDL::wmma_scale_f32_32x16x128_f4 definitions //===----------------------------------------------------------------------===// namespace detail { wmma_scale_f32_32x16x128_f4GenericAdaptorBase::wmma_scale_f32_32x16x128_f4GenericAdaptorBase(wmma_scale_f32_32x16x128_f4 op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::ROCDL::WMMACModifierAttr wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getModCAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMACModifierAttr>(getProperties().modC); return attr; } ::mlir::ROCDL::WMMACModifier wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleAttr wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getScaleATypeAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleAttr>(getProperties().scaleAType); return attr; } ::mlir::ROCDL::WMMAMatrixScale wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getScaleAType() { auto attr = getScaleATypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormatAttr wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getFmtScaleAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(getProperties().fmtScaleA); return attr; } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getFmtScaleA() { auto attr = getFmtScaleAAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleAttr wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getScaleBTypeAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleAttr>(getProperties().scaleBType); return attr; } ::mlir::ROCDL::WMMAMatrixScale wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getScaleBType() { auto attr = getScaleBTypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormatAttr wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getFmtScaleBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(getProperties().fmtScaleB); return attr; } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getFmtScaleB() { auto attr = getFmtScaleBAttr(); return attr.getValue(); } ::mlir::IntegerAttr wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getReuseAAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseA); return attr; } bool wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } ::mlir::IntegerAttr wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getReuseBAttr() { auto attr = ::llvm::dyn_cast_or_null<::mlir::IntegerAttr>(getProperties().reuseB); return attr; } bool wmma_scale_f32_32x16x128_f4GenericAdaptorBase::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } } // namespace detail wmma_scale_f32_32x16x128_f4Adaptor::wmma_scale_f32_32x16x128_f4Adaptor(wmma_scale_f32_32x16x128_f4 op) : wmma_scale_f32_32x16x128_f4GenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult wmma_scale_f32_32x16x128_f4Adaptor::verify(::mlir::Location loc) { auto tblgen_fmtScaleA = getProperties().fmtScaleA; (void)tblgen_fmtScaleA; auto tblgen_fmtScaleB = getProperties().fmtScaleB; (void)tblgen_fmtScaleB; auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_scaleAType = getProperties().scaleAType; (void)tblgen_scaleAType; auto tblgen_scaleBType = getProperties().scaleBType; (void)tblgen_scaleBType; if (tblgen_modC && !((::llvm::isa<::mlir::ROCDL::WMMACModifierAttr>(tblgen_modC)))) return emitError(loc, "'rocdl.wmma.scale.f32.32x16x128.f4' op attribute 'modC' failed to satisfy constraint: WMMA C operand modifiers"); if (tblgen_scaleAType && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(tblgen_scaleAType)))) return emitError(loc, "'rocdl.wmma.scale.f32.32x16x128.f4' op attribute 'scaleAType' failed to satisfy constraint: matrix scale row selector"); if (tblgen_fmtScaleA && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(tblgen_fmtScaleA)))) return emitError(loc, "'rocdl.wmma.scale.f32.32x16x128.f4' op attribute 'fmtScaleA' failed to satisfy constraint: matrix scale exponent formats"); if (tblgen_scaleBType && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleAttr>(tblgen_scaleBType)))) return emitError(loc, "'rocdl.wmma.scale.f32.32x16x128.f4' op attribute 'scaleBType' failed to satisfy constraint: matrix scale row selector"); if (tblgen_fmtScaleB && !((::llvm::isa<::mlir::ROCDL::WMMAMatrixScaleFormatAttr>(tblgen_fmtScaleB)))) return emitError(loc, "'rocdl.wmma.scale.f32.32x16x128.f4' op attribute 'fmtScaleB' failed to satisfy constraint: matrix scale exponent formats"); if (tblgen_reuseA && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseA))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseA).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.scale.f32.32x16x128.f4' op attribute 'reuseA' failed to satisfy constraint: 1-bit signless integer attribute"); if (tblgen_reuseB && !(((::llvm::isa<::mlir::IntegerAttr>(tblgen_reuseB))) && ((::llvm::cast<::mlir::IntegerAttr>(tblgen_reuseB).getType().isSignlessInteger(1))))) return emitError(loc, "'rocdl.wmma.scale.f32.32x16x128.f4' op attribute 'reuseB' failed to satisfy constraint: 1-bit signless integer attribute"); return ::mlir::success(); } ::llvm::LogicalResult wmma_scale_f32_32x16x128_f4::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.fmtScaleA; auto attr = dict.get("fmtScaleA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtScaleA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.fmtScaleB; auto attr = dict.get("fmtScaleB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `fmtScaleB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.modC; auto attr = dict.get("modC"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `modC` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseA; auto attr = dict.get("reuseA"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseA` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.reuseB; auto attr = dict.get("reuseB"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `reuseB` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.scaleAType; auto attr = dict.get("scaleAType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleAType` in property conversion: " << attr; return ::mlir::failure(); } } } { auto &propStorage = prop.scaleBType; auto attr = dict.get("scaleBType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `scaleBType` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute wmma_scale_f32_32x16x128_f4::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.fmtScaleA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtScaleA", propStorage)); } { const auto &propStorage = prop.fmtScaleB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("fmtScaleB", propStorage)); } { const auto &propStorage = prop.modC; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("modC", propStorage)); } { const auto &propStorage = prop.reuseA; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseA", propStorage)); } { const auto &propStorage = prop.reuseB; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("reuseB", propStorage)); } { const auto &propStorage = prop.scaleAType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleAType", propStorage)); } { const auto &propStorage = prop.scaleBType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("scaleBType", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code wmma_scale_f32_32x16x128_f4::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.fmtScaleA.getAsOpaquePointer()), llvm::hash_value(prop.fmtScaleB.getAsOpaquePointer()), llvm::hash_value(prop.modC.getAsOpaquePointer()), llvm::hash_value(prop.reuseA.getAsOpaquePointer()), llvm::hash_value(prop.reuseB.getAsOpaquePointer()), llvm::hash_value(prop.scaleAType.getAsOpaquePointer()), llvm::hash_value(prop.scaleBType.getAsOpaquePointer())); } std::optional wmma_scale_f32_32x16x128_f4::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "fmtScaleA") return prop.fmtScaleA; if (name == "fmtScaleB") return prop.fmtScaleB; if (name == "modC") return prop.modC; if (name == "reuseA") return prop.reuseA; if (name == "reuseB") return prop.reuseB; if (name == "scaleAType") return prop.scaleAType; if (name == "scaleBType") return prop.scaleBType; return std::nullopt; } void wmma_scale_f32_32x16x128_f4::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "fmtScaleA") { prop.fmtScaleA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "fmtScaleB") { prop.fmtScaleB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "modC") { prop.modC = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseA") { prop.reuseA = ::llvm::dyn_cast_or_null>(value); return; } if (name == "reuseB") { prop.reuseB = ::llvm::dyn_cast_or_null>(value); return; } if (name == "scaleAType") { prop.scaleAType = ::llvm::dyn_cast_or_null>(value); return; } if (name == "scaleBType") { prop.scaleBType = ::llvm::dyn_cast_or_null>(value); return; } } void wmma_scale_f32_32x16x128_f4::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.fmtScaleA) attrs.append("fmtScaleA", prop.fmtScaleA); if (prop.fmtScaleB) attrs.append("fmtScaleB", prop.fmtScaleB); if (prop.modC) attrs.append("modC", prop.modC); if (prop.reuseA) attrs.append("reuseA", prop.reuseA); if (prop.reuseB) attrs.append("reuseB", prop.reuseB); if (prop.scaleAType) attrs.append("scaleAType", prop.scaleAType); if (prop.scaleBType) attrs.append("scaleBType", prop.scaleBType); } ::llvm::LogicalResult wmma_scale_f32_32x16x128_f4::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getFmtScaleAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(attr, "fmtScaleA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getFmtScaleBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(attr, "fmtScaleB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getModCAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(attr, "modC", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseAAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseA", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getReuseBAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(attr, "reuseB", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getScaleATypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(attr, "scaleAType", emitError))) return ::mlir::failure(); } { ::mlir::Attribute attr = attrs.get(getScaleBTypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(attr, "scaleBType", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult wmma_scale_f32_32x16x128_f4::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.fmtScaleA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.fmtScaleB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.modC))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseA))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.reuseB))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.scaleAType))) return ::mlir::failure(); if (::mlir::failed(reader.readOptionalAttribute(prop.scaleBType))) return ::mlir::failure(); return ::mlir::success(); } void wmma_scale_f32_32x16x128_f4::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.fmtScaleA); writer.writeOptionalAttribute(prop.fmtScaleB); writer.writeOptionalAttribute(prop.modC); writer.writeOptionalAttribute(prop.reuseA); writer.writeOptionalAttribute(prop.reuseB); writer.writeOptionalAttribute(prop.scaleAType); writer.writeOptionalAttribute(prop.scaleBType); } ::mlir::ROCDL::WMMACModifier wmma_scale_f32_32x16x128_f4::getModC() { auto attr = getModCAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScale wmma_scale_f32_32x16x128_f4::getScaleAType() { auto attr = getScaleATypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale_f32_32x16x128_f4::getFmtScaleA() { auto attr = getFmtScaleAAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScale wmma_scale_f32_32x16x128_f4::getScaleBType() { auto attr = getScaleBTypeAttr(); return attr.getValue(); } ::mlir::ROCDL::WMMAMatrixScaleFormat wmma_scale_f32_32x16x128_f4::getFmtScaleB() { auto attr = getFmtScaleBAttr(); return attr.getValue(); } bool wmma_scale_f32_32x16x128_f4::getReuseA() { auto attr = getReuseAAttr(); return attr.getValue().getZExtValue(); } bool wmma_scale_f32_32x16x128_f4::getReuseB() { auto attr = getReuseBAttr(); return attr.getValue().getZExtValue(); } void wmma_scale_f32_32x16x128_f4::setModC(::mlir::ROCDL::WMMACModifier attrValue) { getProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_32x16x128_f4::setScaleAType(::mlir::ROCDL::WMMAMatrixScale attrValue) { getProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_32x16x128_f4::setFmtScaleA(::mlir::ROCDL::WMMAMatrixScaleFormat attrValue) { getProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_32x16x128_f4::setScaleBType(::mlir::ROCDL::WMMAMatrixScale attrValue) { getProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_32x16x128_f4::setFmtScaleB(::mlir::ROCDL::WMMAMatrixScaleFormat attrValue) { getProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(::mlir::Builder((*this)->getContext()).getContext(), attrValue); } void wmma_scale_f32_32x16x128_f4::setReuseA(bool attrValue) { getProperties().reuseA = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_scale_f32_32x16x128_f4::setReuseB(bool attrValue) { getProperties().reuseB = ::mlir::Builder((*this)->getContext()).getIntegerAttr(::mlir::Builder((*this)->getContext()).getIntegerType(1), attrValue); } void wmma_scale_f32_32x16x128_f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); if (modC) { odsState.getOrAddProperties().modC = modC; } if (scaleAType) { odsState.getOrAddProperties().scaleAType = scaleAType; } if (fmtScaleA) { odsState.getOrAddProperties().fmtScaleA = fmtScaleA; } if (scaleBType) { odsState.getOrAddProperties().scaleBType = scaleBType; } if (fmtScaleB) { odsState.getOrAddProperties().fmtScaleB = fmtScaleB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } odsState.addTypes(res); } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale_f32_32x16x128_f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); if (modC) { odsState.getOrAddProperties().modC = modC; } if (scaleAType) { odsState.getOrAddProperties().scaleAType = scaleAType; } if (fmtScaleA) { odsState.getOrAddProperties().fmtScaleA = fmtScaleA; } if (scaleBType) { odsState.getOrAddProperties().scaleBType = scaleBType; } if (fmtScaleB) { odsState.getOrAddProperties().fmtScaleB = fmtScaleB; } if (reuseA) { odsState.getOrAddProperties().reuseA = reuseA; } if (reuseB) { odsState.getOrAddProperties().reuseB = reuseB; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifierAttr modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleB, ::mlir::Value scaleB, ::mlir::IntegerAttr reuseA, ::mlir::IntegerAttr reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale_f32_32x16x128_f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleAType); odsState.getOrAddProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleA); odsState.getOrAddProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleBType); odsState.getOrAddProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); odsState.addTypes(res); } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type res, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(res), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale_f32_32x16x128_f4::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { odsState.addOperands(a); odsState.addOperands(b); odsState.addOperands(c); odsState.addOperands(scaleA); odsState.addOperands(scaleB); odsState.getOrAddProperties().modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), modC); odsState.getOrAddProperties().scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleAType); odsState.getOrAddProperties().fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleA); odsState.getOrAddProperties().scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), scaleBType); odsState.getOrAddProperties().fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), fmtScaleB); odsState.getOrAddProperties().reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseA); odsState.getOrAddProperties().reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), reuseB); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value a, ::mlir::Value b, ::mlir::ROCDL::WMMACModifier modC, ::mlir::Value c, ::mlir::ROCDL::WMMAMatrixScale scaleAType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleA, ::mlir::Value scaleA, ::mlir::ROCDL::WMMAMatrixScale scaleBType, ::mlir::ROCDL::WMMAMatrixScaleFormat fmtScaleB, ::mlir::Value scaleB, bool reuseA, bool reuseB) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(a), std::forward(b), std::forward(modC), std::forward(c), std::forward(scaleAType), std::forward(fmtScaleA), std::forward(scaleA), std::forward(scaleBType), std::forward(fmtScaleB), std::forward(scaleB), std::forward(reuseA), std::forward(reuseB)); } void wmma_scale_f32_32x16x128_f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void wmma_scale_f32_32x16x128_f4::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 5u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } wmma_scale_f32_32x16x128_f4 wmma_scale_f32_32x16x128_f4::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void wmma_scale_f32_32x16x128_f4::populateDefaultProperties(::mlir::OperationName opName, Properties &properties) { ::mlir::Builder odsBuilder(opName.getContext()); if (!properties.modC) properties.modC = ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none); if (!properties.scaleAType) properties.scaleAType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0); if (!properties.fmtScaleA) properties.fmtScaleA = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8); if (!properties.scaleBType) properties.scaleBType = ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0); if (!properties.fmtScaleB) properties.fmtScaleB = ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8); if (!properties.reuseA) properties.reuseA = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); if (!properties.reuseB) properties.reuseB = odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0); } ::llvm::LogicalResult wmma_scale_f32_32x16x128_f4::verifyInvariantsImpl() { auto tblgen_fmtScaleA = getProperties().fmtScaleA; (void)tblgen_fmtScaleA; auto tblgen_fmtScaleB = getProperties().fmtScaleB; (void)tblgen_fmtScaleB; auto tblgen_modC = getProperties().modC; (void)tblgen_modC; auto tblgen_reuseA = getProperties().reuseA; (void)tblgen_reuseA; auto tblgen_reuseB = getProperties().reuseB; (void)tblgen_reuseB; auto tblgen_scaleAType = getProperties().scaleAType; (void)tblgen_scaleAType; auto tblgen_scaleBType = getProperties().scaleBType; (void)tblgen_scaleBType; if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps16(*this, tblgen_modC, "modC"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(*this, tblgen_scaleAType, "scaleAType"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(*this, tblgen_fmtScaleA, "fmtScaleA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps17(*this, tblgen_scaleBType, "scaleBType"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps18(*this, tblgen_fmtScaleB, "fmtScaleB"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseA, "reuseA"))) return ::mlir::failure(); if (::mlir::failed(__mlir_ods_local_attr_constraint_ROCDLOps7(*this, tblgen_reuseB, "reuseB"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps48(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup3 = getODSOperands(3); for (auto v : valueGroup3) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup4 = getODSOperands(4); for (auto v : valueGroup4) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_ROCDLOps44(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult wmma_scale_f32_32x16x128_f4::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult wmma_scale_f32_32x16x128_f4::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand aRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> aOperands(&aRawOperand, 1); ::llvm::SMLoc aOperandsLoc; (void)aOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand bRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> bOperands(&bRawOperand, 1); ::llvm::SMLoc bOperandsLoc; (void)bOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand cRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> cOperands(&cRawOperand, 1); ::llvm::SMLoc cOperandsLoc; (void)cOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleARawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleAOperands(&scaleARawOperand, 1); ::llvm::SMLoc scaleAOperandsLoc; (void)scaleAOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand scaleBRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> scaleBOperands(&scaleBRawOperand, 1); ::llvm::SMLoc scaleBOperandsLoc; (void)scaleBOperandsLoc; ::mlir::ROCDL::WMMACModifierAttr modCAttr; ::mlir::ROCDL::WMMAMatrixScaleAttr scaleATypeAttr; ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleAAttr; ::mlir::ROCDL::WMMAMatrixScaleAttr scaleBTypeAttr; ::mlir::ROCDL::WMMAMatrixScaleFormatAttr fmtScaleBAttr; ::llvm::ArrayRef<::mlir::Type> allOperandTypes; ::llvm::ArrayRef<::mlir::Type> resTypes; aOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(aRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); bOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(bRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); cOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(cRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleAOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleARawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); scaleBOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(scaleBRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("modC")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(modCAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (modCAttr) result.getOrAddProperties().modC = modCAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("scaleAType")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleATypeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (scaleATypeAttr) result.getOrAddProperties().scaleAType = scaleATypeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtScaleA")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtScaleAAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtScaleAAttr) result.getOrAddProperties().fmtScaleA = fmtScaleAAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("scaleBType")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(scaleBTypeAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (scaleBTypeAttr) result.getOrAddProperties().scaleBType = scaleBTypeAttr; if (parser.parseComma()) return ::mlir::failure(); if (parser.parseKeyword("fmtScaleB")) return ::mlir::failure(); if (parser.parseEqual()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(fmtScaleBAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (fmtScaleBAttr) result.getOrAddProperties().fmtScaleB = fmtScaleBAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); ::mlir::FunctionType allOperand__res_functionType; if (parser.parseType(allOperand__res_functionType)) return ::mlir::failure(); allOperandTypes = allOperand__res_functionType.getInputs(); resTypes = allOperand__res_functionType.getResults(); result.addTypes(resTypes); if (parser.resolveOperands(::llvm::concat(aOperands, bOperands, cOperands, scaleAOperands, scaleBOperands), allOperandTypes, parser.getNameLoc(), result.operands)) return ::mlir::failure(); return ::mlir::success(); } void wmma_scale_f32_32x16x128_f4::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getB(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getC(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleA(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getScaleB(); _odsPrinter << ","; _odsPrinter << ' ' << "modC"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getModCAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "scaleAType"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getScaleATypeAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtScaleA"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtScaleAAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "scaleBType"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getScaleBTypeAttr()); _odsPrinter << ","; _odsPrinter << ' ' << "fmtScaleB"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getFmtScaleBAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("modC"); elidedAttrs.push_back("scaleAType"); elidedAttrs.push_back("fmtScaleA"); elidedAttrs.push_back("scaleBType"); elidedAttrs.push_back("fmtScaleB"); { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getModCAttr(); if(attr && (attr == ::mlir::ROCDL::WMMACModifierAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMACModifier::none))) elidedAttrs.push_back("modC"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getScaleATypeAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0))) elidedAttrs.push_back("scaleAType"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtScaleAAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8))) elidedAttrs.push_back("fmtScaleA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getScaleBTypeAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScale::row0))) elidedAttrs.push_back("scaleBType"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getFmtScaleBAttr(); if(attr && (attr == ::mlir::ROCDL::WMMAMatrixScaleFormatAttr::get(odsBuilder.getContext(), ::mlir::ROCDL::WMMAMatrixScaleFormat::e8))) elidedAttrs.push_back("fmtScaleB"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseAAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseA"); } { ::mlir::Builder odsBuilder(getContext()); ::mlir::Attribute attr = getReuseBAttr(); if(attr && (attr == odsBuilder.getIntegerAttr(odsBuilder.getIntegerType(1), 0))) elidedAttrs.push_back("reuseB"); } _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter.printFunctionalType(getOperation()->getOperandTypes(), ::llvm::ArrayRef<::mlir::Type>(getRes().getType())); } } // namespace mlir::ROCDL MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::wmma_scale_f32_32x16x128_f4) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ROCDL::detail::wmma_scale_f32_32x16x128_f4GenericAdaptorBase::Properties) #endif // GET_OP_CLASSES