From 61b79096bcff3250b86523b0de57ee5d1f3ac6b8 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Mon, 6 Jan 2025 20:26:29 +0900 Subject: [PATCH 01/22] Refactor --- macro/src/dialect.rs | 47 +++++++++++++++----------- macro/src/dialect/input.rs | 23 +++++++++++++ macro/src/dialect/input/input_field.rs | 14 ++++++++ 3 files changed, 65 insertions(+), 19 deletions(-) diff --git a/macro/src/dialect.rs b/macro/src/dialect.rs index a87054c74e..162b0a5357 100644 --- a/macro/src/dialect.rs +++ b/macro/src/dialect.rs @@ -16,27 +16,20 @@ use operation::Operation; use proc_macro::TokenStream; use proc_macro2::Span; use quote::quote; -use std::{env, fmt::Display, path::Path, str}; +use std::{ + env, + fmt::Display, + path::{Component, Path}, + str, +}; use tblgen::{record::Record, record_keeper::RecordKeeper, TableGenParser}; +const LLVM_INCLUDE_DIRECTORY: &str = env!("LLVM_INCLUDE_DIRECTORY"); + pub fn generate_dialect(input: DialectInput) -> Result> { let mut parser = TableGenParser::new(); if let Some(source) = input.table_gen() { - let base = Path::new(env!("LLVM_INCLUDE_DIRECTORY")); - - // Here source looks like `include "foo.td" include "bar.td"`. - for (index, path) in source.split_ascii_whitespace().enumerate() { - if index % 2 == 0 { - continue; // skip "include" - } - - let path = &path[1..(path.len() - 1)]; // remove "" - let path = Path::new(path).parent().unwrap(); - let path = base.join(path); - parser = parser.add_include_path(&path.to_string_lossy()); - } - parser = parser.add_source(source).map_err(create_syn_error)?; } @@ -44,13 +37,29 @@ pub fn generate_dialect(input: DialectInput) -> Result, + // TODO Remove this field. td_file: Option, + // TODO Remove this field. include_directories: Vec, + files: Vec, + directories: Vec, } impl DialectInput { @@ -27,6 +32,14 @@ impl DialectInput { pub fn include_directories(&self) -> impl Iterator { self.include_directories.iter().map(Deref::deref) } + + pub fn files(&self) -> impl Iterator { + self.files.iter().map(Deref::deref) + } + + pub fn directories(&self) -> impl Iterator { + self.directories.iter().map(Deref::deref) + } } impl Parse for DialectInput { @@ -35,6 +48,8 @@ impl Parse for DialectInput { let mut table_gen = None; let mut td_file = None; let mut includes = vec![]; + let mut files = vec![]; + let mut directories = vec![]; for item in Punctuated::::parse_terminated(input)? { match item { @@ -44,6 +59,12 @@ impl Parse for DialectInput { InputField::IncludeDirectories(field) => { includes = field.into_iter().map(|literal| literal.value()).collect() } + InputField::Files(field) => { + files = field.into_iter().map(|literal| literal.value()).collect() + } + InputField::Directories(field) => { + directories = field.into_iter().map(|literal| literal.value()).collect() + } } } @@ -52,6 +73,8 @@ impl Parse for DialectInput { table_gen, td_file, include_directories: includes, + files, + directories, }) } } diff --git a/macro/src/dialect/input/input_field.rs b/macro/src/dialect/input/input_field.rs index 61a161fca6..e6c8fad5e4 100644 --- a/macro/src/dialect/input/input_field.rs +++ b/macro/src/dialect/input/input_field.rs @@ -7,6 +7,8 @@ pub enum InputField { TableGen(LitStr), TdFile(LitStr), IncludeDirectories(Punctuated), + Files(Punctuated), + Directories(Punctuated), } impl Parse for InputField { @@ -27,6 +29,18 @@ impl Parse for InputField { Ok(Self::IncludeDirectories( Punctuated::::parse_terminated(&content)?, )) + } else if ident == format_ident!("files") { + let content; + bracketed!(content in input); + Ok(Self::Files( + Punctuated::::parse_terminated(&content)?, + )) + } else if ident == format_ident!("include_directories") { + let content; + bracketed!(content in input); + Ok(Self::Directories( + Punctuated::::parse_terminated(&content)?, + )) } else { Err(input.error(format!("invalid field {}", ident))) } From 206cf1967af38a70ff6e7b7dbd2b427a7dfb92ad Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Mon, 6 Jan 2025 20:29:55 +0900 Subject: [PATCH 02/22] Fix include macro uses --- melior/src/dialect/ods.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index 5591aeab89..b04d5505e4 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -32,9 +32,8 @@ melior_macro::dialect! { } melior_macro::dialect! { name: "arm_sme", - table_gen: r#"include "mlir/Dialect/ArmSME/IR/ArmSME.td" - include "mlir/Dialect/ArmSME/IR/ArmSMEOps.td" - include "mlir/Dialect/ArmSME/IR/ArmSMEIntrinsicOps.td""# + files: ["ArmSME.td", "ArmSMEOps.td", "ArmSMEIntrinsicOps.td"], + include_directories: ["mlir/Dialect/ArmSME/IR"], } melior_macro::dialect! { name: "async", @@ -86,7 +85,8 @@ melior_macro::dialect! { } melior_macro::dialect! { name: "irdl", - table_gen: r#"include "mlir/Dialect/IRDL/IR/IRDL.td" include "mlir/Dialect/IRDL/IR/IRDLOps.td""# + files: ["IRDL.td", "IRDLOps.td"], + include_directories: ["mlir/Dialect/IRDL/IR"], } melior_macro::dialect! { name: "llvm", From e6323a043d0334c8be5c08b55a6c4e56f5541461 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Mon, 6 Jan 2025 20:57:27 +0900 Subject: [PATCH 03/22] Fix --- Cargo.lock | 3 +-- macro/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d2204c7de1..ba7616e071 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -566,8 +566,7 @@ dependencies = [ [[package]] name = "tblgen-alt" version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ecbc9175dd38627cd01d546e7b41c9a115e5773f4c98f64e2185c81ec5f45ab" +source = "git+https://github.com/raviqqe/tblgen-rs-alt?branch=feature%2Finclude-file#0e0824a9f0fb10192d389599a772dfc60e4c5d26" dependencies = [ "bindgen 0.69.4", "cc", diff --git a/macro/Cargo.toml b/macro/Cargo.toml index 4a6da71c2d..9e5a4da79d 100644 --- a/macro/Cargo.toml +++ b/macro/Cargo.toml @@ -19,7 +19,7 @@ proc-macro2 = "1" quote = "1" regex = "1.11.1" syn = { version = "2", features = ["full"] } -tblgen = { version = "0.4.0", features = [ +tblgen = { git = "https://github.com/raviqqe/tblgen-rs-alt", branch = "feature/include-file", features = [ "llvm19-0", ], default-features = false, package = "tblgen-alt" } unindent = "0.2.3" From b7af8f13f79f0bdb562087805b169cb5cdf167d2 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Mon, 6 Jan 2025 23:04:10 +0900 Subject: [PATCH 04/22] Update temporary source --- Cargo.lock | 2 +- macro/src/dialect.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ba7616e071..e83cbb4a23 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -566,7 +566,7 @@ dependencies = [ [[package]] name = "tblgen-alt" version = "0.4.0" -source = "git+https://github.com/raviqqe/tblgen-rs-alt?branch=feature%2Finclude-file#0e0824a9f0fb10192d389599a772dfc60e4c5d26" +source = "git+https://github.com/raviqqe/tblgen-rs-alt?branch=feature%2Finclude-file#1e5d0f367b2142521f1f0537e782a207c14c042f" dependencies = [ "bindgen 0.69.4", "cc", diff --git a/macro/src/dialect.rs b/macro/src/dialect.rs index 162b0a5357..4b065ddbea 100644 --- a/macro/src/dialect.rs +++ b/macro/src/dialect.rs @@ -34,7 +34,7 @@ pub fn generate_dialect(input: DialectInput) -> Result Result Date: Mon, 6 Jan 2025 23:52:06 +0900 Subject: [PATCH 05/22] Update tblgen-alt --- Cargo.lock | 2 +- macro/src/dialect.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e83cbb4a23..e1f19e1634 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -566,7 +566,7 @@ dependencies = [ [[package]] name = "tblgen-alt" version = "0.4.0" -source = "git+https://github.com/raviqqe/tblgen-rs-alt?branch=feature%2Finclude-file#1e5d0f367b2142521f1f0537e782a207c14c042f" +source = "git+https://github.com/raviqqe/tblgen-rs-alt?branch=feature%2Finclude-file#fa5b3995ef0fe370c245be9e4013a50627ec4db8" dependencies = [ "bindgen 0.69.4", "cc", diff --git a/macro/src/dialect.rs b/macro/src/dialect.rs index 4b065ddbea..9af3b1ec89 100644 --- a/macro/src/dialect.rs +++ b/macro/src/dialect.rs @@ -38,7 +38,7 @@ pub fn generate_dialect(input: DialectInput) -> Result Result Date: Mon, 6 Jan 2025 23:56:56 +0900 Subject: [PATCH 06/22] Fix import order --- melior/src/dialect/ods.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index b04d5505e4..b2b10ebd5f 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -85,7 +85,7 @@ melior_macro::dialect! { } melior_macro::dialect! { name: "irdl", - files: ["IRDL.td", "IRDLOps.td"], + files: ["IRDLOps.td", "IRDL.td"], include_directories: ["mlir/Dialect/IRDL/IR"], } melior_macro::dialect! { From 53668df6e5ffe29ef420636cd1b283ca1a694194 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Tue, 7 Jan 2025 00:00:00 +0900 Subject: [PATCH 07/22] Refactor --- melior/src/dialect/ods.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index b2b10ebd5f..bffbb9654a 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -32,7 +32,7 @@ melior_macro::dialect! { } melior_macro::dialect! { name: "arm_sme", - files: ["ArmSME.td", "ArmSMEOps.td", "ArmSMEIntrinsicOps.td"], + files: ["ArmSMEOps.td", "ArmSMEIntrinsicOps.td"], include_directories: ["mlir/Dialect/ArmSME/IR"], } melior_macro::dialect! { @@ -85,7 +85,7 @@ melior_macro::dialect! { } melior_macro::dialect! { name: "irdl", - files: ["IRDLOps.td", "IRDL.td"], + files: ["IRDLOps.td"], include_directories: ["mlir/Dialect/IRDL/IR"], } melior_macro::dialect! { From b8a425f5f590ad7724d380eb2a64cdcf448235b0 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 18:21:21 +0900 Subject: [PATCH 08/22] Revert "Refactor" This reverts commit 53668df6e5ffe29ef420636cd1b283ca1a694194. --- melior/src/dialect/ods.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index bffbb9654a..b2b10ebd5f 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -32,7 +32,7 @@ melior_macro::dialect! { } melior_macro::dialect! { name: "arm_sme", - files: ["ArmSMEOps.td", "ArmSMEIntrinsicOps.td"], + files: ["ArmSME.td", "ArmSMEOps.td", "ArmSMEIntrinsicOps.td"], include_directories: ["mlir/Dialect/ArmSME/IR"], } melior_macro::dialect! { @@ -85,7 +85,7 @@ melior_macro::dialect! { } melior_macro::dialect! { name: "irdl", - files: ["IRDLOps.td"], + files: ["IRDLOps.td", "IRDL.td"], include_directories: ["mlir/Dialect/IRDL/IR"], } melior_macro::dialect! { From 3e49500bdaff8667d154a35058f812d1bfcd8a6a Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 18:22:52 +0900 Subject: [PATCH 09/22] Revert tblgen version changes --- macro/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macro/Cargo.toml b/macro/Cargo.toml index c9681ec458..024efeea82 100644 --- a/macro/Cargo.toml +++ b/macro/Cargo.toml @@ -19,7 +19,7 @@ proc-macro2 = "1" quote = "1" regex = "1.11.1" syn = { version = "2", features = ["full"] } -tblgen = { git = "https://github.com/raviqqe/tblgen-rs-alt", branch = "feature/include-file", features = [ +tblgen = { version = "0.5.0", features = [ "llvm19-0", ], default-features = false, package = "tblgen-alt" } unindent = "0.2.3" From a0a89a596136871affb5d48376b5870368a311d1 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 18:23:13 +0900 Subject: [PATCH 10/22] Update lock file --- Cargo.lock | 115 ++++++++--------------------------------------------- 1 file changed, 17 insertions(+), 98 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7e2823ec89..a5119c3028 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,43 +13,20 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.69.4" +version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ "bitflags", "cexpr", "clang-sys", "itertools", - "lazy_static", - "lazycell", "log", "prettyplease", "proc-macro2", "quote", "regex", - "rustc-hash 1.1.0", - "shlex", - "syn", - "which", -] - -[[package]] -name = "bindgen" -version = "0.71.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360897d4f2fdeea5d32f6dac9287952ae5babdc2aad42ad787c9470a4a6e3fee" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "itertools", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 2.1.0", + "rustc-hash", "shlex", "syn", ] @@ -78,9 +55,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.98" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +dependencies = [ + "shlex", +] [[package]] name = "cexpr" @@ -173,31 +153,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca" -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys", -] - [[package]] name = "glob" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys", -] - [[package]] name = "indoc" version = "2.0.5" @@ -231,12 +192,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" version = "0.2.155" @@ -259,12 +214,6 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "log" version = "0.4.21" @@ -317,7 +266,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b598f9c0fa7a453eeaa9fe419ae93759c94a66eb6f8a496d195ba596ae3c4d" dependencies = [ - "bindgen 0.71.0", + "bindgen", ] [[package]] @@ -418,31 +367,12 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys", -] - [[package]] name = "shlex" version = "1.3.0" @@ -478,10 +408,11 @@ dependencies = [ [[package]] name = "tblgen-alt" -version = "0.4.0" -source = "git+https://github.com/raviqqe/tblgen-rs-alt?branch=feature%2Finclude-file#fa5b3995ef0fe370c245be9e4013a50627ec4db8" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0227e56fe1a5fcbb4aff2bd4a443af41c571a141e060d3d75f40a038d87bcdb0" dependencies = [ - "bindgen 0.69.4", + "bindgen", "cc", "paste", "thiserror", @@ -489,18 +420,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", @@ -615,18 +546,6 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - [[package]] name = "windows-sys" version = "0.52.0" From edb24744d4892a3b782130da9d43c5b3bd2b696e Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 19:12:57 +0900 Subject: [PATCH 11/22] Fix bug --- macro/src/dialect.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/macro/src/dialect.rs b/macro/src/dialect.rs index 9af3b1ec89..42b92438be 100644 --- a/macro/src/dialect.rs +++ b/macro/src/dialect.rs @@ -56,8 +56,13 @@ pub fn generate_dialect(input: DialectInput) -> Result 0 { + parser = parser.add_source( + &input + .files() + .map(|path| format!(r#"include "{path}""#)) + .collect::(), + )?; } let keeper = parser.parse().map_err(Error::Parse)?; From c85d2024a4ed29528365454dabcc64c712eff770 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 19:13:16 +0900 Subject: [PATCH 12/22] Fix linting --- melior/src/ir/operation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/melior/src/ir/operation.rs b/melior/src/ir/operation.rs index 09a28159a9..0724ad91ac 100644 --- a/melior/src/ir/operation.rs +++ b/melior/src/ir/operation.rs @@ -763,7 +763,7 @@ mod tests { context.set_allow_unregistered_dialects(true); let location = Location::unknown(&context); - let mut block = Block::new(&[]); + let block = Block::new(&[]); let first_operation = block.append_operation( OperationBuilder::new("foo", location) From a8bbe597ae937c4c7f2e19e5a3daccee2128eca1 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 19:21:31 +0900 Subject: [PATCH 13/22] Fix --- macro/src/dialect.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/macro/src/dialect.rs b/macro/src/dialect.rs index 42b92438be..d366fc1b80 100644 --- a/macro/src/dialect.rs +++ b/macro/src/dialect.rs @@ -57,12 +57,9 @@ pub fn generate_dialect(input: DialectInput) -> Result 0 { - parser = parser.add_source( - &input - .files() - .map(|path| format!(r#"include "{path}""#)) - .collect::(), - )?; + parser = parser.add_source(&input.files().fold(String::new(), |source, path| { + source + r#"include""# + path + "\"" + }))?; } let keeper = parser.parse().map_err(Error::Parse)?; From 9c96cf9e18e6e2a4226f7fa7e68b129341ad5b88 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 19:22:52 +0900 Subject: [PATCH 14/22] Refactor --- macro/src/dialect.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macro/src/dialect.rs b/macro/src/dialect.rs index d366fc1b80..25d48c32bf 100644 --- a/macro/src/dialect.rs +++ b/macro/src/dialect.rs @@ -58,7 +58,7 @@ pub fn generate_dialect(input: DialectInput) -> Result 0 { parser = parser.add_source(&input.files().fold(String::new(), |source, path| { - source + r#"include""# + path + "\"" + source + "include \"" + path + "\"" }))?; } From 4628c351c2c27b7bbb6dada5b63d7c32ff583f34 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 19:33:54 +0900 Subject: [PATCH 15/22] Refactor affine dialect --- melior/src/dialect/ods.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index b2b10ebd5f..97ef14cf17 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -9,10 +9,10 @@ pub mod __private { melior_macro::dialect! { name: "affine", - table_gen: r#"include "mlir/Dialect/Affine/IR/AffineOps.td" - include "mlir/Dialect/Affine/TransformOps/AffineTransformOps.td" - include "mlir/Dialect/Affine/IR/AffineMemoryOpInterfaces.td""# + files: ["IR/AffineOps.td", "TransformOps/AffineTransformOps.td", "IR/AffineMemoryOpInterfaces.td"], + include_directories: ["mlir/Dialect/Affine"], } + melior_macro::dialect! { name: "amdgpu", table_gen: r#"include "mlir/Dialect/AMDGPU/IR/AMDGPU.td" From 9d6ed36ca88c0597ae86916bdcebda4f61e5f8c6 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 19:36:30 +0900 Subject: [PATCH 16/22] Refactor --- melior/src/dialect/ods.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index 97ef14cf17..a898b08ac9 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -140,25 +140,30 @@ melior_macro::dialect! { name: "sparse_tensor", table_gen: r#"include "mlir/Dialect/SparseTensor/IR/SparseTensorOps.td""# } + melior_macro::dialect! { name: "tensor", - table_gen: r#"include "mlir/Dialect/Tensor/IR/TensorOps.td""# + files: ["mlir/Dialect/Tensor/IR/TensorOps.td"], } + melior_macro::dialect! { name: "tosa", - table_gen: r#"include "mlir/Dialect/Tosa/IR/TosaOps.td""# + files: ["mlir/Dialect/Tosa/IR/TosaOps.td"], } + melior_macro::dialect! { name: "transform", - table_gen: r#"include "mlir/Dialect/Transform/IR/TransformOps.td""# + files: ["mlir/Dialect/Transform/IR/TransformOps.td"], } + melior_macro::dialect! { name: "vector", - table_gen: r#"include "mlir/Dialect/Vector/IR/VectorOps.td""# + files: ["mlir/Dialect/Vector/IR/VectorOps.td"], } + melior_macro::dialect! { name: "x86vector", - table_gen: r#"include "mlir/Dialect/X86Vector/X86Vector.td""# + files: ["mlir/Dialect/X86Vector/X86Vector.td"], } #[cfg(test)] From aaf204f2b2e0d83f12f943549e494b082c46e2de Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 19:39:53 +0900 Subject: [PATCH 17/22] Refactor --- macro/src/dialect.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/macro/src/dialect.rs b/macro/src/dialect.rs index 25d48c32bf..238fee3d6c 100644 --- a/macro/src/dialect.rs +++ b/macro/src/dialect.rs @@ -41,8 +41,6 @@ pub fn generate_dialect(input: DialectInput) -> Result Result 0 { From 2d847de2ae576673f4ebe3f02cb3619462899f93 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 19:48:27 +0900 Subject: [PATCH 18/22] Refactor --- melior/src/dialect/ods.rs | 47 ++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index a898b08ac9..0e82a33eba 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -18,37 +18,44 @@ melior_macro::dialect! { table_gen: r#"include "mlir/Dialect/AMDGPU/IR/AMDGPU.td" include "mlir/Dialect/AMDGPU/Transforms/Passes.td""# } + melior_macro::dialect! { name: "arith", table_gen: r#"include "mlir/Dialect/Arith/IR/ArithOps.td""# } + melior_macro::dialect! { name: "arm_neon", table_gen: r#"include "mlir/Dialect/ArmNeon/ArmNeon.td""# } + melior_macro::dialect! { name: "arm_sve", table_gen: r#"include "mlir/Dialect/ArmSVE/IR/ArmSVE.td""# } + melior_macro::dialect! { name: "arm_sme", files: ["ArmSME.td", "ArmSMEOps.td", "ArmSMEIntrinsicOps.td"], include_directories: ["mlir/Dialect/ArmSME/IR"], } + melior_macro::dialect! { name: "async", - table_gen: r#"include "mlir/Dialect/Async/IR/AsyncDialect.td" - include "mlir/Dialect/Async/IR/AsyncOps.td" - include "mlir/Dialect/Async/IR/AsyncTypes.td""# + files: ["AsyncDialect.td", "AsyncOps.td", "AsyncTypes.td"], + include_directories: ["mlir/Dialect/Async/IR"], } + melior_macro::dialect! { name: "amx", - table_gen: r#"include "mlir/Dialect/AMX/AMX.td""# + files: ["mlir/Dialect/AMX/AMX.td"], } + melior_macro::dialect! { name: "builtin", - table_gen: r#"include "mlir/IR/BuiltinOps.td""# + files: ["mlir/IR/BuiltinOps.td"], } + melior_macro::dialect! { name: "bufferization", table_gen: r#"include "mlir/Dialect/Bufferization/IR/BufferizationOps.td" @@ -100,45 +107,55 @@ melior_macro::dialect! { include "mlir/Dialect/LLVMIR/LLVMAttrDefs.td" include "mlir/Dialect/LLVMIR/BasicPtxBuilderInterface.td""# } + melior_macro::dialect! { name: "memref", - table_gen: r#"include "mlir/Dialect/MemRef/IR/MemRefOps.td""# + files: ["mlir/Dialect/MemRef/IR/MemRefOps.td"], } + melior_macro::dialect! { name: "scf", - table_gen: r#"include "mlir/Dialect/SCF/IR/SCFOps.td""# + files: ["mlir/Dialect/SCF/IR/SCFOps.td"], } + melior_macro::dialect! { name: "pdl", - table_gen: r#"include "mlir/Dialect/PDL/IR/PDLOps.td""# + files: ["mlir/Dialect/PDL/IR/PDLOps.td"], } + melior_macro::dialect! { name: "pdl_interp", - table_gen: r#"include "mlir/Dialect/PDLInterp/IR/PDLInterpOps.td""# + files: ["mlir/Dialect/PDLInterp/IR/PDLInterpOps.td"], } + melior_macro::dialect! { name: "math", - table_gen: r#"include "mlir/Dialect/Math/IR/MathOps.td""# + files: ["mlir/Dialect/Math/IR/MathOps.td"], } + melior_macro::dialect! { name: "gpu", - table_gen: r#"include "mlir/Dialect/GPU/IR/GPUOps.td""# + files: ["mlir/Dialect/GPU/IR/GPUOps.td"], } + melior_macro::dialect! { name: "linalg", - table_gen: r#"include "mlir/Dialect/Linalg/IR/LinalgOps.td""# + files: ["mlir/Dialect/Linalg/IR/LinalgOps.td"], } + melior_macro::dialect! { name: "quant", - table_gen: r#"include "mlir/Dialect/Quant/QuantOps.td""# + files: ["mlir/Dialect/Quant/QuantOps.td"], } + melior_macro::dialect! { name: "shape", - table_gen: r#"include "mlir/Dialect/Shape/IR/ShapeOps.td""# + files: ["mlir/Dialect/Shape/IR/ShapeOps.td"], } + melior_macro::dialect! { name: "sparse_tensor", - table_gen: r#"include "mlir/Dialect/SparseTensor/IR/SparseTensorOps.td""# + files: ["mlir/Dialect/SparseTensor/IR/SparseTensorOps.td"], } melior_macro::dialect! { From b8ceece3bf107013e656a5cd616cc2bcb056ad07 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 20:04:26 +0900 Subject: [PATCH 19/22] Fix --- melior/src/dialect/ods.rs | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index 0e82a33eba..a49312b4d3 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -70,42 +70,49 @@ melior_macro::dialect! { name: "complex", table_gen: r#"include "mlir/Dialect/Complex/IR/ComplexBase.td" include "mlir/Dialect/Complex/IR/ComplexOps.td""# } + melior_macro::dialect! { name: "cf", - table_gen: r#"include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.td""# + files: ["mlir/Dialect/ControlFlow/IR/ControlFlowOps.td"], } + melior_macro::dialect! { name: "dlti", - table_gen: r#"include "mlir/Dialect/DLTI/DLTI.td" - include "mlir/Dialect/DLTI/DLTIAttrs.td" - include "mlir/Dialect/DLTI/DLTIBase.td""# + files: ["DLTI.td", "DLTIAttrs.td", "DLTIBase.td"], + include_directories: ["mlir/Dialect/DLTI"] } + melior_macro::dialect! { name: "func", - table_gen: r#"include "mlir/Dialect/Func/IR/FuncOps.td" - include "mlir/Dialect/Func/TransformOps/FuncTransformOps.td" - include "mlir/Dialect/Func/Transforms/Passes.td""# + files: ["IR/FuncOps.td", "TransformOps/FuncTransformOps.td", "Transforms/Passes.td"], + include_directories: ["mlir/Dialect/Func"], } + melior_macro::dialect! { name: "index", - table_gen: r#"include "mlir/Dialect/Index/IR/IndexOps.td""# + files: ["mlir/Dialect/Index/IR/IndexOps.td"], } + melior_macro::dialect! { name: "irdl", files: ["IRDLOps.td", "IRDL.td"], include_directories: ["mlir/Dialect/IRDL/IR"], } + melior_macro::dialect! { name: "llvm", // spell-checker: disable-next-line - table_gen: r#"include "mlir/Dialect/LLVMIR/LLVMOps.td" - include "mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td" - include "mlir/Dialect/LLVMIR/LLVMDialect.td" - include "mlir/Dialect/LLVMIR/LLVMInterfaces.td" - include "mlir/Dialect/LLVMIR/LLVMTypes.td" - include "mlir/Dialect/LLVMIR/LLVMOpBase.td" - include "mlir/Dialect/LLVMIR/LLVMAttrDefs.td" - include "mlir/Dialect/LLVMIR/BasicPtxBuilderInterface.td""# + files: [ + "LLVMOps.td", + "LLVMIntrinsicOps.td", + "LLVMDialect.td", + "LLVMInterfaces.td", + "LLVMTypes.td", + "LLVMOpBase.td", + "LLVMAttrDefs.td", + "/BasicPtxBuilderInterface.td", + ], + include_directories: ["mlir/Dialect/LLVMIR"], } melior_macro::dialect! { From 62d907fbcb6d9d18cbbf259d7f300959ba06f880 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 20:08:26 +0900 Subject: [PATCH 20/22] Refactor --- melior/src/dialect/ods.rs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/melior/src/dialect/ods.rs b/melior/src/dialect/ods.rs index a49312b4d3..bf1d664762 100644 --- a/melior/src/dialect/ods.rs +++ b/melior/src/dialect/ods.rs @@ -15,23 +15,23 @@ melior_macro::dialect! { melior_macro::dialect! { name: "amdgpu", - table_gen: r#"include "mlir/Dialect/AMDGPU/IR/AMDGPU.td" - include "mlir/Dialect/AMDGPU/Transforms/Passes.td""# + files: ["IR/AMDGPU.td", "Transforms/Passes.td"], + include_directories: ["mlir/Dialect/AMDGPU"], } melior_macro::dialect! { name: "arith", - table_gen: r#"include "mlir/Dialect/Arith/IR/ArithOps.td""# + files: ["mlir/Dialect/Arith/IR/ArithOps.td"], } melior_macro::dialect! { name: "arm_neon", - table_gen: r#"include "mlir/Dialect/ArmNeon/ArmNeon.td""# + files: ["mlir/Dialect/ArmNeon/ArmNeon.td"], } melior_macro::dialect! { name: "arm_sve", - table_gen: r#"include "mlir/Dialect/ArmSVE/IR/ArmSVE.td""# + files: ["mlir/Dialect/ArmSVE/IR/ArmSVE.td"], } melior_macro::dialect! { @@ -58,17 +58,21 @@ melior_macro::dialect! { melior_macro::dialect! { name: "bufferization", - table_gen: r#"include "mlir/Dialect/Bufferization/IR/BufferizationOps.td" - include "mlir/Dialect/Bufferization/IR/AllocationOpInterface.td" - include "mlir/Dialect/Bufferization/IR/BufferizationEnums.td" - include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.td" - include "mlir/Dialect/Bufferization/TransformOps/BufferizationTransformOps.td" - include "mlir/Dialect/Bufferization/Transforms/Passes.td" - "# + files: [ + "IR/BufferizationOps.td", + "IR/AllocationOpInterface.td", + "IR/BufferizationEnums.td", + "IR/BufferizableOpInterface.td", + "TransformOps/BufferizationTransformOps.td", + "Transforms/Passes.td", + ], + include_directories: ["mlir/Dialect/Bufferization"], } + melior_macro::dialect! { name: "complex", - table_gen: r#"include "mlir/Dialect/Complex/IR/ComplexBase.td" include "mlir/Dialect/Complex/IR/ComplexOps.td""# + files: ["ComplexBase.td", "ComplexOps.td"], + include_directories: ["mlir/Dialect/Complex/IR"], } melior_macro::dialect! { From d31dba51607510b3f18d369b1ab1a1d8b665fefe Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Wed, 8 Jan 2025 20:10:42 +0900 Subject: [PATCH 21/22] Update tests --- macro/tests/operand.rs | 2 +- macro/tests/region.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/macro/tests/operand.rs b/macro/tests/operand.rs index 8379e97bb0..a83a2a21f7 100644 --- a/macro/tests/operand.rs +++ b/macro/tests/operand.rs @@ -5,7 +5,7 @@ use utility::*; melior_macro::dialect! { name: "operand_test", - td_file: "macro/tests/ods_include/operand.td", + files: ["macro/tests/ods_include/operand.td"], } #[test] diff --git a/macro/tests/region.rs b/macro/tests/region.rs index c6e021fa99..2d46d64e5f 100644 --- a/macro/tests/region.rs +++ b/macro/tests/region.rs @@ -5,7 +5,7 @@ use utility::*; melior_macro::dialect! { name: "region_test", - td_file: "macro/tests/ods_include/region.td", + files: ["macro/tests/ods_include/region.td"], } #[test] From 0e905d94fcc4a8cd34442330131a023f52057b06 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Fri, 17 Jan 2025 07:54:13 +0900 Subject: [PATCH 22/22] Change dependency to `tblgen` --- Cargo.lock | 20 ++++++++++---------- macro/Cargo.toml | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a5119c3028..de8bc8a0da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -55,9 +55,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.7" +version = "1.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +checksum = "c8293772165d9345bdaaa39b45b2109591e63fe5e6fbc23c6ff930a048aa310b" dependencies = [ "shlex", ] @@ -244,7 +244,7 @@ dependencies = [ "quote", "regex", "syn", - "tblgen-alt", + "tblgen", "unindent", ] @@ -407,10 +407,10 @@ dependencies = [ ] [[package]] -name = "tblgen-alt" -version = "0.5.0" +name = "tblgen" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0227e56fe1a5fcbb4aff2bd4a443af41c571a141e060d3d75f40a038d87bcdb0" +checksum = "c155c9310c9e11e6f642b4c8a30ae572ea0cad013d5c9e28bb264b52fa8163bb" dependencies = [ "bindgen", "cc", @@ -420,18 +420,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.9" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.9" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", diff --git a/macro/Cargo.toml b/macro/Cargo.toml index 024efeea82..c50d014658 100644 --- a/macro/Cargo.toml +++ b/macro/Cargo.toml @@ -19,9 +19,9 @@ proc-macro2 = "1" quote = "1" regex = "1.11.1" syn = { version = "2", features = ["full"] } -tblgen = { version = "0.5.0", features = [ +tblgen = { version = "0.5.2", features = [ "llvm19-0", -], default-features = false, package = "tblgen-alt" } +], default-features = false } unindent = "0.2.3" [dev-dependencies]