diff --git a/bindings/make.jl b/bindings/make.jl index ad08542b..92c38174 100644 --- a/bindings/make.jl +++ b/bindings/make.jl @@ -3,417 +3,284 @@ import BinaryBuilderBase: PkgSpec, Prefix, temp_prefix, setup_dependencies, cleanup_dependencies, destdir using Clang.Generators +# returns a mapping of dialect name to expected output file name and list of td files to generate from, for a given MLIR version function mlir_dialects(version::VersionNumber) - # construct set of dialects to generate bindings for - # 1. dialect name - # 2. bindings file name - # 3. tablegen files - - dialects = if v"14" <= version < v"15" - [ - ("acc", "OpenACC.jl", ["OpenACC/OpenACCOps.td"]), - ("affine", "Affine.jl", ["Affine/IR/AffineOps.td"]), - ("amx", "AMX.jl", ["AMX/AMX.td"]), - ("arith", "Arithmetic.jl", ["Arithmetic/IR/ArithmeticOps.td"]), # folder renamed to 'Arith' in v16 - ("arm_neon", "ArmNeon.jl", ["ArmNeon/ArmNeon.td"]), - ("arm_sve", "ArmSVE.jl", ["ArmSVE/ArmSVE.td"]), - ("async", "Async.jl", ["Async/IR/AsyncOps.td"]), - ("bufferization", "Bufferization.jl", ["Bufferization/IR/BufferizationOps.td"]), - ("builtin", "Builtin.jl", ["../IR/BuiltinOps.td"]), - ("complex", "Complex.jl", ["Complex/IR/ComplexOps.td"]), - # ("dlti", "DLTI.jl", ["DLTI/DLTI.td"]), # TODO crashes - ("emitc", "EmitC.jl", ["EmitC/IR/EmitC.td"]), - ("gpu", "GPU.jl", ["GPU/GPUOps.td"]), # moved to IR subfolder in v15 - ( - "linalg", - "Linalg.jl", - ["Linalg/IR/LinalgOps.td", "Linalg/IR/LinalgStructuredOps.td"], - ), - ( - "llvm", - "LLVMIR.jl", - ["LLVMIR/LLVMOps.td", "LLVMIR/NVVMOps.td", "LLVMIR/ROCDLOps.td"], - ), - ("math", "Math.jl", ["Math/IR/MathOps.td"]), - ("memref", "MemRef.jl", ["MemRef/IR/MemRefOps.td"]), - ("omp", "OpenMP.jl", ["OpenMP/OpenMPOps.td"]), - ("pdl_interp", "PDLInterp.jl", ["PDLInterp/IR/PDLInterpOps.td"]), - ("pdl", "PDL.jl", ["PDL/IR/PDLOps.td"]), - ("quant", "Quant.jl", ["Quant/QuantOps.td"]), - ("scf", "SCF.jl", ["SCF/SCFOps.td"]), # moved to IR subfolder in v15 - ("shape", "Shape.jl", ["Shape/IR/ShapeOps.td"]), - ("sparse_tensor", "SparseTensor.jl", ["SparseTensor/IR/SparseTensorOps.td"]), - ("spv", "SPIRV.jl", ["SPIRV/IR/SPIRVOps.td"]), # dialect name renamed to 'spirv' in v16 - ("std", "StandardOps.jl", ["StandardOps/IR/Ops.td"]), - ("tensor", "Tensor.jl", ["Tensor/IR/TensorOps.td"]), - ("tosa", "Tosa.jl", ["Tosa/IR/TosaOps.td"]), - ("vector", "Vector.jl", ["Vector/IR/VectorOps.td"]), - ("x86vector", "X86Vector.jl", ["X86Vector/X86Vector.td"]), - ] - elseif v"15" <= version < v"16" - [ - ("acc", "OpenACC.jl", ["OpenACC/OpenACCOps.td"]), - ("affine", "Affine.jl", ["Affine/IR/AffineOps.td"]), - ("amdgpu", "AMDGPU.jl", ["AMDGPU/AMDGPU.td"]), - ("amx", "AMX.jl", ["AMX/AMX.td"]), - ("arith", "Arithmetic.jl", ["Arithmetic/IR/ArithmeticOps.td"]), # folder renamed to 'Arith' in v16 - ("arm_neon", "ArmNeon.jl", ["ArmNeon/ArmNeon.td"]), - ("arm_sve", "ArmSVE.jl", ["ArmSVE/ArmSVE.td"]), - ("async", "Async.jl", ["Async/IR/AsyncOps.td"]), - ("bufferization", "Bufferization.jl", ["Bufferization/IR/BufferizationOps.td"]), - ("builtin", "Builtin.jl", ["../IR/BuiltinOps.td"]), - ("cf", "ControlFlow.jl", ["ControlFlow/IR/ControlFlowOps.td"]), - ("complex", "Complex.jl", ["Complex/IR/ComplexOps.td"]), - # ("dlti", "DLTI.jl"[, "DLTI/DLTI.td"]), # TODO crashes - ("emitc", "EmitC.jl", ["EmitC/IR/EmitC.td"]), - ("func", "Func.jl", ["Func/IR/FuncOps.td"]), - ("gpu", "GPU.jl", ["GPU/IR/GPUOps.td"]), - ( - "linalg", - "Linalg.jl", - ["Linalg/IR/LinalgOps.td", "Linalg/IR/LinalgStructuredOps.td"], - ), - ( - "llvm", - "LLVMIR.jl", - [ - "LLVMIR/LLVMOps.td", - "LLVMIR/LLVMIntrinsicOps.td", - "LLVMIR/NVVMOps.td", - "LLVMIR/ROCDLOps.td", - ], - ), - ("math", "Math.jl", ["Math/IR/MathOps.td"]), - ("memref", "MemRef.jl", ["MemRef/IR/MemRefOps.td"]), - ("ml_program", "MLProgram.jl", ["MLProgram/IR/MLProgramOps.td"]), - ("nvgpu", "NVGPU.jl", ["NVGPU/IR/NVGPU.td"]), - ("omp", "OpenMP.jl", ["OpenMP/OpenMPOps.td"]), - ("pdl_interp", "PDLInterp.jl", ["PDLInterp/IR/PDLInterpOps.td"]), - ("pdl", "PDL.jl", ["PDL/IR/PDLOps.td"]), - ("quant", "Quant.jl", ["Quant/QuantOps.td"]), - ("scf", "SCF.jl", ["SCF/IR/SCFOps.td"]), - ("shape", "Shape.jl", ["Shape/IR/ShapeOps.td"]), - ("sparse_tensor", "SparseTensor.jl", ["SparseTensor/IR/SparseTensorOps.td"]), - ("spv", "SPIRV.jl", ["SPIRV/IR/SPIRVOps.td"]), # dialect name renamed to 'spirv' in v16 - ("tensor", "Tensor.jl", ["Tensor/IR/TensorOps.td"]), - ("tosa", "Tosa.jl", ["Tosa/IR/TosaOps.td"]), - ( - "transform", - "Transform.jl", - [ - "Bufferization/TransformOps/BufferizationTransformOps.td", - "Linalg/TransformOps/LinalgTransformOps.td", - "SCF/TransformOps/SCFTransformOps.td", - "Transform/IR/TransformOps.td", - ], - ), # more ops files in v16 - ("vector", "Vector.jl", ["Vector/IR/VectorOps.td"]), - ("x86vector", "X86Vector.jl", ["X86Vector/X86Vector.td"]), - ] + @assert v"14" <= version "Unsupported MLIR version: $version. Supported versions are 14-22." + + # mapping of dialects to output file name and td files, in alphabetical order + dialects = Dict{String,Any}() + + dialects["acc"] = (; output_file="OpenACC.jl", td_files=["OpenACC/OpenACCOps.td"]) + dialects["affine"] = (; output_file="Affine.jl", td_files=["Affine/IR/AffineOps.td"]) + + # dialect added in v15 and files moved to IR subfolder in v17 + if v"15" <= version < v"17" + dialects["amdgpu"] = (; output_file="AMDGPU.jl", td_files=["AMDGPU/AMDGPU.td"]) + elseif v"17" <= version + dialects["amdgpu"] = (; output_file="AMDGPU.jl", td_files=["AMDGPU/IR/AMDGPU.td"]) + end + + dialects["amx"] = (; output_file="AMX.jl", td_files=["AMX/AMX.td"]) + + # folder renamed from 'Arithmetic' to 'Arith' in v16 (dialect name remains 'arith') + if version < v"16" + dialects["arith"] = (; + output_file="Arith.jl", td_files=["Arithmetic/IR/ArithmeticOps.td"] + ) + else + dialects["arith"] = (; output_file="Arith.jl", td_files=["Arith/IR/ArithOps.td"]) + end + + dialects["arm_neon"] = (; output_file="ArmNeon.jl", td_files=["ArmNeon/ArmNeon.td"]) + + # files moved to IR subfolder in v18 + if version < v"18" + dialects["arm_sve"] = (; output_file="ArmSVE.jl", td_files=["ArmSVE/ArmSVE.td"]) + elseif v"18" <= version + dialects["arm_sve"] = (; output_file="ArmSVE.jl", td_files=["ArmSVE/IR/ArmSVE.td"]) + end + + # dialect added in v17 and extended in v18 + if v"17" <= version < v"18" + dialects["arm_sme"] = (; output_file="ArmSME.jl", td_files=["ArmSME/IR/ArmSME.td"]) + elseif v"18" <= version + dialects["arm_sme"] = (; + output_file="ArmSME.jl", + td_files=["ArmSME/IR/ArmSMEOps.td", "ArmSME/IR/ArmSMEIntrinsicOps.td"], + ) + end + + dialects["async"] = (; output_file="Async.jl", td_files=["Async/IR/AsyncOps.td"]) + dialects["bufferization"] = (; + output_file="Bufferization.jl", td_files=["Bufferization/IR/BufferizationOps.td"] + ) + dialects["builtin"] = (; output_file="Builtin.jl", td_files=["../IR/BuiltinOps.td"]) + dialects["complex"] = (; + output_file="Complex.jl", td_files=["Complex/IR/ComplexOps.td"] + ) + + if v"15" <= version + dialects["cf"] = (; + output_file="ControlFlow.jl", td_files=["ControlFlow/IR/ControlFlowOps.td"] + ) + end + + # dialects["dlti"] = (; output_file = "DLTI.jl", td_files = ["DLTI/DLTI.td"]) # TODO crashes + dialects["emitc"] = (; output_file="EmitC.jl", td_files=["EmitC/IR/EmitC.td"]) + + # dialect added in v15 + if v"15" <= version + dialects["func"] = (; output_file="Func.jl", td_files=["Func/IR/FuncOps.td"]) + end + + # moved to IR subfolder in v15 + if version < v"15" + dialects["gpu"] = (; output_file="GPU.jl", td_files=["GPU/GPUOps.td"]) + else + dialects["gpu"] = (; output_file="GPU.jl", td_files=["GPU/IR/GPUOps.td"]) + end + + # dialect added in v17 + if v"17" <= version + dialects["index"] = (; output_file="Index.jl", td_files=["Index/IR/IndexOps.td"]) + end + + # dialect added in v17 + if v"17" <= version + dialects["irdl"] = (; output_file="IRDL.jl", td_files=["IRDL/IR/IRDLOps.td"]) + end + + dialects["linalg"] = (; + output_file="Linalg.jl", + td_files=["Linalg/IR/LinalgOps.td", "Linalg/IR/LinalgStructuredOps.td"], + ) + + dialects["llvm"] = (; + output_file="LLVMIR.jl", + td_files=["LLVMIR/LLVMOps.td", "LLVMIR/NVVMOps.td", "LLVMIR/ROCDLOps.td"], + ) + if v"16" <= version + push!(dialects["llvm"].td_files, "LLVMIR/LLVMIntrinsicOps.td") + end + if v"19" <= version + push!(dialects["llvm"].td_files, "LLVMIR/VCIXOps.td") + end + if v"20" <= version + push!(dialects["llvm"].td_files, "LLVMIR/XeVMOps.td") + end + + dialects["math"] = (; output_file="Math.jl", td_files=["Math/IR/MathOps.td"]) + dialects["memref"] = (; output_file="MemRef.jl", td_files=["MemRef/IR/MemRefOps.td"]) + + # dialect added in v18, renamed to `shard` in v22 + if v"18" <= version < v"22" + dialects["mesh"] = (; output_file="Mesh.jl", td_files=["Mesh/IR/MeshOps.td"]) + end + + # dialect added in v15 + if v"15" <= version + dialects["ml_program"] = (; + output_file="MLProgram.jl", td_files=["MLProgram/IR/MLProgramOps.td"] + ) + end + + # dialect added in v19 + if v"19" <= version + dialects["mpi"] = (; output_file="MPI.jl", td_files=["MPI/IR/MPIOps.td"]) + end + + # dialect added in v15 + if v"15" <= version + dialects["nvgpu"] = (; output_file="NVGPU.jl", td_files=["NVGPU/IR/NVGPU.td"]) + end + + dialects["omp"] = (; output_file="OpenMP.jl", td_files=["OpenMP/OpenMPOps.td"]) + dialects["pdl_interp"] = (; + output_file="PDLInterp.jl", td_files=["PDLInterp/IR/PDLInterpOps.td"] + ) + dialects["pdl"] = (; output_file="PDL.jl", td_files=["PDL/IR/PDLOps.td"]) + + # dialect added in v19 + if v"19" <= version + dialects["polynomial"] = (; + output_file="Polynomial.jl", td_files=["Polynomial/IR/Polynomial.td"] + ) + end + + # dialect added in v19 + # if v"19" <= version + # dialects["ptr"] = (; output_file = "Ptr.jl", td_files = ["Ptr/IR/PtrOps.td"]) + # end + + dialects["quant"] = (; output_file="Quant.jl", td_files=["Quant/QuantOps.td"]) + + # moved to IR subfolder in v15 + if version < v"15" + dialects["scf"] = (; output_file="SCF.jl", td_files=["SCF/SCFOps.td"]) + else + dialects["scf"] = (; output_file="SCF.jl", td_files=["SCF/IR/SCFOps.td"]) + end + + dialects["shape"] = (; output_file="Shape.jl", td_files=["Shape/IR/ShapeOps.td"]) + + # previously named "mesh" before v22 + if v"22" <= version + dialects["shard"] = (; output_file="Shard.jl", td_files=["Shard/IR/ShardOps.td"]) + end + + # dialect added in v20 + if v"20" <= version + dialects["smt"] = (; + output_file="SMT.jl", + td_files=[ + "SMT/IR/SMTOps.td", + "SMT/IR/SMTIntOps.td", + "SMT/IR/SMTArrayOps.td", + "SMT/IR/SMTBitVectorOps.td", + ], + ) + end + + dialects["sparse_tensor"] = (; + output_file="SparseTensor.jl", td_files=["SparseTensor/IR/SparseTensorOps.td"] + ) + + # dialect name renamed to 'spirv' in v16 + if version < v"16" + dialects["spv"] = (; output_file="SPIRV.jl", td_files=["SPIRV/IR/SPIRVOps.td"]) + else + dialects["spirv"] = (; output_file="SPIRV.jl", td_files=["SPIRV/SPIRV.td"]) + end + + # deleted in v15 + if version < v"15" + dialects["std"] = (; + output_file="StandardOps.jl", td_files=["StandardOps/IR/Ops.td"] + ) + end + + dialects["tensor"] = (; output_file="Tensor.jl", td_files=["Tensor/IR/TensorOps.td"]) + dialects["tosa"] = (; output_file="Tosa.jl", td_files=["Tosa/IR/TosaOps.td"]) + + # dialect added in v15 and files added on multiple versions + if v"15" <= version < v"16" + dialects["transform"] = (; + output_file="Transform.jl", + td_files=[ + "Bufferization/TransformOps/BufferizationTransformOps.td", + "Linalg/TransformOps/LinalgTransformOps.td", + "SCF/TransformOps/SCFTransformOps.td", + "Transform/IR/TransformOps.td", + ], + ) elseif v"16" <= version < v"17" - [ - ("acc", "OpenACC.jl", ["OpenACC/OpenACCOps.td"]), - ("affine", "Affine.jl", ["Affine/IR/AffineOps.td"]), - ("amdgpu", "AMDGPU.jl", ["AMDGPU/AMDGPU.td"]), - ("amx", "AMX.jl", ["AMX/AMX.td"]), - ("arith", "Arith.jl", ["Arith/IR/ArithOps.td"]), - ("arm_neon", "ArmNeon.jl", ["ArmNeon/ArmNeon.td"]), - ("arm_sve", "ArmSVE.jl", ["ArmSVE/ArmSVE.td"]), - ("async", "Async.jl", ["Async/IR/AsyncOps.td"]), - ("bufferization", "Bufferization.jl", ["Bufferization/IR/BufferizationOps.td"]), - ("builtin", "Builtin.jl", ["../IR/BuiltinOps.td"]), - ("cf", "ControlFlow.jl", ["ControlFlow/IR/ControlFlowOps.td"]), - ("complex", "Complex.jl", ["Complex/IR/ComplexOps.td"]), - # ("dlti", "DLTI.jl"[, "DLTI/DLTI.td"]), # TODO crashes - ("emitc", "EmitC.jl", ["EmitC/IR/EmitC.td"]), - ("func", "Func.jl", ["Func/IR/FuncOps.td"]), - ("gpu", "GPU.jl", ["GPU/IR/GPUOps.td"]), - ("index", "Index.jl", ["Index/IR/IndexOps.td"]), - ( - "linalg", - "Linalg.jl", - ["Linalg/IR/LinalgOps.td", "Linalg/IR/LinalgStructuredOps.td"], - ), - ( - "llvm", - "LLVMIR.jl", - [ - "LLVMIR/LLVMOps.td", - "LLVMIR/LLVMIntrinsicOps.td", - "LLVMIR/NVVMOps.td", - "LLVMIR/ROCDLOps.td", - ], - ), - ("math", "Math.jl", ["Math/IR/MathOps.td"]), - ("memref", "MemRef.jl", ["MemRef/IR/MemRefOps.td"]), - ("ml_program", "MLProgram.jl", ["MLProgram/IR/MLProgramOps.td"]), - ("nvgpu", "NVGPU.jl", ["NVGPU/IR/NVGPU.td"]), - ("omp", "OpenMP.jl", ["OpenMP/OpenMPOps.td"]), - ("pdl_interp", "PDLInterp.jl", ["PDLInterp/IR/PDLInterpOps.td"]), - ("pdl", "PDL.jl", ["PDL/IR/PDLOps.td"]), - ("quant", "Quant.jl", ["Quant/QuantOps.td"]), - ("scf", "SCF.jl", ["SCF/IR/SCFOps.td"]), - ("shape", "Shape.jl", ["Shape/IR/ShapeOps.td"]), - ("sparse_tensor", "SparseTensor.jl", ["SparseTensor/IR/SparseTensorOps.td"]), - ("spirv", "SPIRV.jl", ["SPIRV/IR/SPIRVOps.td"]), - ("tensor", "Tensor.jl", ["Tensor/IR/TensorOps.td"]), - ("tosa", "Tosa.jl", ["Tosa/IR/TosaOps.td"]), - ( - "transform", - "Transform.jl", - [ - "Affine/TransformOps/AffineTransformOps.td", - "Bufferization/TransformOps/BufferizationTransformOps.td", - "GPU/TransformOps/GPUTransformOps.td", - "Linalg/TransformOps/LinalgTransformOps.td", - "MemRef/TransformOps/MemRefTransformOps.td", - "SCF/TransformOps/SCFTransformOps.td", - "Transform/IR/TransformOps.td", - "Vector/TransformOps/VectorTransformOps.td", - ], - ), # more ops files in v17 - ("vector", "Vector.jl", ["Vector/IR/VectorOps.td"]), - ("x86vector", "X86Vector.jl", ["X86Vector/X86Vector.td"]), - ] + dialects["transform"] = (; + output_file="Transform.jl", + td_files=[ + "Affine/TransformOps/AffineTransformOps.td", + "Bufferization/TransformOps/BufferizationTransformOps.td", + "GPU/TransformOps/GPUTransformOps.td", + "Linalg/TransformOps/LinalgTransformOps.td", + "MemRef/TransformOps/MemRefTransformOps.td", + "SCF/TransformOps/SCFTransformOps.td", + "Transform/IR/TransformOps.td", + "Vector/TransformOps/VectorTransformOps.td", + ], + ) elseif v"17" <= version < v"18" - [ - ("acc", "OpenACC.jl", ["OpenACC/OpenACCOps.td"]), - ("affine", "Affine.jl", ["Affine/IR/AffineOps.td"]), - ("amdgpu", "AMDGPU.jl", ["AMDGPU/IR/AMDGPU.td"]), - ("amx", "AMX.jl", ["AMX/AMX.td"]), - ("arith", "Arith.jl", ["Arith/IR/ArithOps.td"]), - ("arm_neon", "ArmNeon.jl", ["ArmNeon/ArmNeon.td"]), - ("arm_sme", "ArmSME.jl", ["ArmSME/IR/ArmSME.td"]), - ("arm_sve", "ArmSVE.jl", ["ArmSVE/ArmSVE.td"]), - ("async", "Async.jl", ["Async/IR/AsyncOps.td"]), - ("bufferization", "Bufferization.jl", ["Bufferization/IR/BufferizationOps.td"]), - ("builtin", "Builtin.jl", ["../IR/BuiltinOps.td"]), - ("cf", "ControlFlow.jl", ["ControlFlow/IR/ControlFlowOps.td"]), - ("complex", "Complex.jl", ["Complex/IR/ComplexOps.td"]), - # ("dlti", "DLTI.jl", ["DLTI/DLTI.td"]), # TODO crashes - ("emitc", "EmitC.jl", ["EmitC/IR/EmitC.td"]), - ("func", "Func.jl", ["Func/IR/FuncOps.td"]), - ("gpu", "GPU.jl", ["GPU/IR/GPUOps.td"]), - ("index", "Index.jl", ["Index/IR/IndexOps.td"]), - ("irdl", "IRDL.jl", ["IRDL/IR/IRDLOps.td"]), - ( - "linalg", - "Linalg.jl", - ["Linalg/IR/LinalgOps.td", "Linalg/IR/LinalgStructuredOps.td"], - ), - ( - "llvm", - "LLVMIR.jl", - [ - "LLVMIR/LLVMOps.td", - "LLVMIR/LLVMIntrinsicOps.td", - "LLVMIR/NVVMOps.td", - "LLVMIR/ROCDLOps.td", - ], - ), - ("math", "Math.jl", ["Math/IR/MathOps.td"]), - ("memref", "MemRef.jl", ["MemRef/IR/MemRefOps.td"]), - ("ml_program", "MLProgram.jl", ["MLProgram/IR/MLProgramOps.td"]), - ("nvgpu", "NVGPU.jl", ["NVGPU/IR/NVGPU.td"]), - ("omp", "OpenMP.jl", ["OpenMP/OpenMPOps.td"]), - ("pdl_interp", "PDLInterp.jl", ["PDLInterp/IR/PDLInterpOps.td"]), - ("pdl", "PDL.jl", ["PDL/IR/PDLOps.td"]), - ("quant", "Quant.jl", ["Quant/QuantOps.td"]), - ("scf", "SCF.jl", ["SCF/IR/SCFOps.td"]), - ("shape", "Shape.jl", ["Shape/IR/ShapeOps.td"]), - ("sparse_tensor", "SparseTensor.jl", ["SparseTensor/IR/SparseTensorOps.td"]), - ("spirv", "SPIRV.jl", ["SPIRV/IR/SPIRVOps.td"]), - ("tensor", "Tensor.jl", ["Tensor/IR/TensorOps.td"]), - ("tosa", "Tosa.jl", ["Tosa/IR/TosaOps.td"]), - ( - "transform", - "Transform.jl", - [ - "Affine/TransformOps/AffineTransformOps.td", - "Bufferization/TransformOps/BufferizationTransformOps.td", - "GPU/TransformOps/GPUTransformOps.td", - "Linalg/TransformOps/LinalgMatchOps.td", - "Linalg/TransformOps/LinalgTransformOps.td", - "MemRef/TransformOps/MemRefTransformOps.td", - "NVGPU/TransformOps/NVGPUTransformOps.td", - "SCF/TransformOps/SCFTransformOps.td", - "Tensor/TransformOps/TensorTransformOps.td", - "Transform/IR/TransformOps.td", - "Vector/TransformOps/VectorTransformOps.td", - ], - ), - ("ub", "UB.jl", ["UB/IR/UBOps.td"]), - ("vector", "Vector.jl", ["Vector/IR/VectorOps.td"]), - ("x86vector", "X86Vector.jl", ["X86Vector/X86Vector.td"]), - ] - elseif v"18" <= version < v"19" - [ - ("acc", "OpenACC.jl", ["OpenACC/OpenACCOps.td"]), - ("affine", "Affine.jl", ["Affine/IR/AffineOps.td"]), - ("amdgpu", "AMDGPU.jl", ["AMDGPU/IR/AMDGPU.td"]), - ("amx", "AMX.jl", ["AMX/AMX.td"]), - ("arith", "Arith.jl", ["Arith/IR/ArithOps.td"]), - ("arm_neon", "ArmNeon.jl", ["ArmNeon/ArmNeon.td"]), - ( - "arm_sme", - "ArmSME.jl", - ["ArmSME/IR/ArmSMEOps.td", "ArmSME/IR/ArmSMEIntrinsicOps.td"], - ), - ("arm_sve", "ArmSVE.jl", ["ArmSVE/IR/ArmSVE.td"]), - ("async", "Async.jl", ["Async/IR/AsyncOps.td"]), - ("bufferization", "Bufferization.jl", ["Bufferization/IR/BufferizationOps.td"]), - ("builtin", "Builtin.jl", ["../IR/BuiltinOps.td"]), - ("cf", "ControlFlow.jl", ["ControlFlow/IR/ControlFlowOps.td"]), - ("complex", "Complex.jl", ["Complex/IR/ComplexOps.td"]), - # ("dlti", "DLTI.jl", ["DLTI/DLTI.td"]), # TODO crashes - ("emitc", "EmitC.jl", ["EmitC/IR/EmitC.td"]), - ("func", "Func.jl", ["Func/IR/FuncOps.td"]), - ("gpu", "GPU.jl", ["GPU/IR/GPUOps.td"]), - ("index", "Index.jl", ["Index/IR/IndexOps.td"]), - ("irdl", "IRDL.jl", ["IRDL/IR/IRDLOps.td"]), - ( - "linalg", - "Linalg.jl", - ["Linalg/IR/LinalgOps.td", "Linalg/IR/LinalgStructuredOps.td"], - ), - ( - "llvm", - "LLVMIR.jl", - [ - "LLVMIR/LLVMOps.td", - "LLVMIR/LLVMIntrinsicOps.td", - "LLVMIR/NVVMOps.td", - "LLVMIR/ROCDLOps.td", - ], - ), - ("math", "Math.jl", ["Math/IR/MathOps.td"]), - ("memref", "MemRef.jl", ["MemRef/IR/MemRefOps.td"]), - ("mesh", "Mesh.jl", ["Mesh/IR/MeshOps.td"]), - ("ml_program", "MLProgram.jl", ["MLProgram/IR/MLProgramOps.td"]), - ("nvgpu", "NVGPU.jl", ["NVGPU/IR/NVGPU.td"]), - ("omp", "OpenMP.jl", ["OpenMP/OpenMPOps.td"]), - ("pdl_interp", "PDLInterp.jl", ["PDLInterp/IR/PDLInterpOps.td"]), - ("pdl", "PDL.jl", ["PDL/IR/PDLOps.td"]), - ("quant", "Quant.jl", ["Quant/QuantOps.td"]), - ("scf", "SCF.jl", ["SCF/IR/SCFOps.td"]), - ("shape", "Shape.jl", ["Shape/IR/ShapeOps.td"]), - ("sparse_tensor", "SparseTensor.jl", ["SparseTensor/IR/SparseTensorOps.td"]), - ("spirv", "SPIRV.jl", ["SPIRV/IR/SPIRVOps.td"]), - ("tensor", "Tensor.jl", ["Tensor/IR/TensorOps.td"]), - ("tosa", "Tosa.jl", ["Tosa/IR/TosaOps.td"]), - ( - "transform", - "Transform.jl", - [ - "Affine/TransformOps/AffineTransformOps.td", - "Bufferization/TransformOps/BufferizationTransformOps.td", - "Func/TransformOps/FuncTransformOps.td", - "GPU/TransformOps/GPUTransformOps.td", - "Linalg/TransformOps/LinalgMatchOps.td", - "Linalg/TransformOps/LinalgTransformOps.td", - "MemRef/TransformOps/MemRefTransformOps.td", - "NVGPU/TransformOps/NVGPUTransformOps.td", - "SCF/TransformOps/SCFTransformOps.td", - "SparseTensor/TransformOps/SparseTensorTransformOps.td", - "Tensor/TransformOps/TensorTransformOps.td", - "Transform/IR/TransformOps.td", - "Transform/DebugExtension/DebugExtensionOps.td", - "Transform/LoopExtension/LoopExtensionOps.td", - "Transform/PDLExtension/PDLExtensionOps.td", - "Vector/TransformOps/VectorTransformOps.td", - ], - ), - ("ub", "UB.jl", ["UB/IR/UBOps.td"]), - ("vector", "Vector.jl", ["Vector/IR/VectorOps.td"]), - ("x86vector", "X86Vector.jl", ["X86Vector/X86Vector.td"]), - ] - elseif v"19" <= version < v"20" - [ - ("acc", "OpenACC.jl", ["OpenACC/OpenACCOps.td"]), - ("affine", "Affine.jl", ["Affine/IR/AffineOps.td"]), - ("amdgpu", "AMDGPU.jl", ["AMDGPU/IR/AMDGPU.td"]), - ("amx", "AMX.jl", ["AMX/AMX.td"]), - ("arith", "Arith.jl", ["Arith/IR/ArithOps.td"]), - ("arm_neon", "ArmNeon.jl", ["ArmNeon/ArmNeon.td"]), - ( - "arm_sme", - "ArmSME.jl", - ["ArmSME/IR/ArmSMEOps.td", "ArmSME/IR/ArmSMEIntrinsicOps.td"], - ), - ("arm_sve", "ArmSVE.jl", ["ArmSVE/IR/ArmSVE.td"]), - ("async", "Async.jl", ["Async/IR/AsyncOps.td"]), - ("bufferization", "Bufferization.jl", ["Bufferization/IR/BufferizationOps.td"]), - ("builtin", "Builtin.jl", ["../IR/BuiltinOps.td"]), - ("cf", "ControlFlow.jl", ["ControlFlow/IR/ControlFlowOps.td"]), - ("complex", "Complex.jl", ["Complex/IR/ComplexOps.td"]), - # ("dlti", "DLTI.jl", ["DLTI/DLTI.td"]), # TODO crashes - ("emitc", "EmitC.jl", ["EmitC/IR/EmitC.td"]), - ("func", "Func.jl", ["Func/IR/FuncOps.td"]), - ("gpu", "GPU.jl", ["GPU/IR/GPUOps.td"]), - ("index", "Index.jl", ["Index/IR/IndexOps.td"]), - ("irdl", "IRDL.jl", ["IRDL/IR/IRDLOps.td"]), - ( - "linalg", - "Linalg.jl", - ["Linalg/IR/LinalgOps.td", "Linalg/IR/LinalgStructuredOps.td"], - ), - ( - "llvm", - "LLVMIR.jl", - [ - "LLVMIR/LLVMOps.td", - "LLVMIR/LLVMIntrinsicOps.td", - "LLVMIR/NVVMOps.td", - "LLVMIR/ROCDLOps.td", - ], - ), - ("math", "Math.jl", ["Math/IR/MathOps.td"]), - ("memref", "MemRef.jl", ["MemRef/IR/MemRefOps.td"]), - ("mesh", "Mesh.jl", ["Mesh/IR/MeshOps.td"]), - ("ml_program", "MLProgram.jl", ["MLProgram/IR/MLProgramOps.td"]), - ("mpi", "MPI.jl", ["MPI/IR/MPIOps.td"]), - ("nvgpu", "NVGPU.jl", ["NVGPU/IR/NVGPU.td"]), - ("omp", "OpenMP.jl", ["OpenMP/OpenMPOps.td"]), - ("pdl_interp", "PDLInterp.jl", ["PDLInterp/IR/PDLInterpOps.td"]), - ("pdl", "PDL.jl", ["PDL/IR/PDLOps.td"]), - ("polynomial", "Polynomial.jl", ["Polynomial/IR/Polynomial.td"]), - # ("ptr", "Ptr.jl", ["Ptr/IR/PtrOps.td"]), - ("quant", "Quant.jl", ["Quant/QuantOps.td"]), - ("scf", "SCF.jl", ["SCF/IR/SCFOps.td"]), - ("shape", "Shape.jl", ["Shape/IR/ShapeOps.td"]), - ("sparse_tensor", "SparseTensor.jl", ["SparseTensor/IR/SparseTensorOps.td"]), - ("spirv", "SPIRV.jl", ["SPIRV/IR/SPIRVOps.td"]), - ("tensor", "Tensor.jl", ["Tensor/IR/TensorOps.td"]), - ("tosa", "Tosa.jl", ["Tosa/IR/TosaOps.td"]), - ( - "transform", - "Transform.jl", - [ - "Affine/TransformOps/AffineTransformOps.td", - "Bufferization/TransformOps/BufferizationTransformOps.td", - "Func/TransformOps/FuncTransformOps.td", - "GPU/TransformOps/GPUTransformOps.td", - "Linalg/TransformOps/LinalgMatchOps.td", - "Linalg/TransformOps/LinalgTransformOps.td", - "MemRef/TransformOps/MemRefTransformOps.td", - "NVGPU/TransformOps/NVGPUTransformOps.td", - "SCF/TransformOps/SCFTransformOps.td", - "SparseTensor/TransformOps/SparseTensorTransformOps.td", - "Tensor/TransformOps/TensorTransformOps.td", - "Transform/IR/TransformOps.td", - "Transform/DebugExtension/DebugExtensionOps.td", - "Transform/LoopExtension/LoopExtensionOps.td", - "Transform/PDLExtension/PDLExtensionOps.td", - "Vector/TransformOps/VectorTransformOps.td", - ], - ), - ("ub", "UB.jl", ["UB/IR/UBOps.td"]), - ("vector", "Vector.jl", ["Vector/IR/VectorOps.td"]), - ("x86vector", "X86Vector.jl", ["X86Vector/X86Vector.td"]), - ("xegpu", "XeGPU.jl", ["XeGPU/IR/XeGPUOps.td"]), - ] - else - error("Unsupported MLIR version: $version") + dialects["transform"] = (; + output_file="Transform.jl", + td_files=[ + "Affine/TransformOps/AffineTransformOps.td", + "Bufferization/TransformOps/BufferizationTransformOps.td", + "GPU/TransformOps/GPUTransformOps.td", + "Linalg/TransformOps/LinalgMatchOps.td", + "Linalg/TransformOps/LinalgTransformOps.td", + "MemRef/TransformOps/MemRefTransformOps.td", + "NVGPU/TransformOps/NVGPUTransformOps.td", + "SCF/TransformOps/SCFTransformOps.td", + "Tensor/TransformOps/TensorTransformOps.td", + "Transform/IR/TransformOps.td", + "Vector/TransformOps/VectorTransformOps.td", + ], + ) + elseif v"18" <= version + dialects["transform"] = (; + output_file="Transform.jl", + td_files=[ + "Affine/TransformOps/AffineTransformOps.td", + "Bufferization/TransformOps/BufferizationTransformOps.td", + "Func/TransformOps/FuncTransformOps.td", + "GPU/TransformOps/GPUTransformOps.td", + "Linalg/TransformOps/LinalgMatchOps.td", + "Linalg/TransformOps/LinalgTransformOps.td", + "MemRef/TransformOps/MemRefTransformOps.td", + "NVGPU/TransformOps/NVGPUTransformOps.td", + "SCF/TransformOps/SCFTransformOps.td", + "SparseTensor/TransformOps/SparseTensorTransformOps.td", + "Tensor/TransformOps/TensorTransformOps.td", + "Transform/IR/TransformOps.td", + "Transform/DebugExtension/DebugExtensionOps.td", + "Transform/LoopExtension/LoopExtensionOps.td", + "Transform/PDLExtension/PDLExtensionOps.td", + "Vector/TransformOps/VectorTransformOps.td", + ], + ) + end + + # dialect added in v17 + if v"17" <= version + dialects["ub"] = (; output_file="UB.jl", td_files=["UB/IR/UBOps.td"]) + end + + dialects["vector"] = (; output_file="Vector.jl", td_files=["Vector/IR/VectorOps.td"]) + dialects["x86vector"] = (; + output_file="X86Vector.jl", td_files=["X86Vector/X86Vector.td"] + ) + + # dialect added in v19 + if version < v"19" + dialects["xegpu"] = (; output_file="XeGPU.jl", td_files=["XeGPU/IR/XeGPUOps.td"]) end return dialects @@ -422,12 +289,14 @@ end function rewrite!(dag::ExprDAG) end julia_llvm = [ - (v"1.9", v"14.0.5+3"), - (v"1.10", v"15.0.7+10"), - (v"1.11", v"16.0.6+2"), - (v"1.12", v"17.0.6+3"), - (v"1.12", v"18.1.7+2"), - (v"1.12", v"19.1.1+0"), + (v"1.9", v"14.0.6+4"), + (v"1.10", v"15.0.7+9"), + (v"1.11", v"16.0.6+5"), + (v"1.12", v"17.0.6+5"), + (v"1.12", v"18.1.7+4"), + (v"1.12", v"19.1.7+1"), + (v"1.12", v"20.1.8+0"), + (v"1.12", v"21.1.8+0"), ] options = load_options(joinpath(@__DIR__, "wrap.toml")) @@ -490,7 +359,7 @@ for (julia_version, llvm_version) in julia_llvm # generate MLIR dialect bindings mkpath(joinpath(@__DIR__, "..", "src", "Dialects", string(llvm_version.major))) - for (dialect_name, binding, tds) in mlir_dialects(llvm_version) + for (dialect_name, (binding, tds)) in mlir_dialects(llvm_version) tempfiles = map(tds) do td tempfile, _ = mktemp() tdpath = joinpath(include_dir, "mlir", "Dialect", td)