change default to --simplify-enums=replace-with-bundle-of-uints
All checks were successful
/ test (push) Successful in 4m42s

This commit is contained in:
Jacob Lifshay 2024-10-01 00:07:48 -07:00
parent 9d66fcc548
commit d089095667
Signed by: programmerjake
SSH key fingerprint: SHA256:B1iRVvUJkvd7upMIiMqn6OyxvD2SgJkAH3ZnUOj6z+c
2 changed files with 80 additions and 36 deletions

View file

@ -2616,7 +2616,7 @@ pub struct ExportOptionsPrivate(());
pub struct ExportOptions { pub struct ExportOptions {
#[clap(long = "no-simplify-memories", action = clap::ArgAction::SetFalse)] #[clap(long = "no-simplify-memories", action = clap::ArgAction::SetFalse)]
pub simplify_memories: bool, pub simplify_memories: bool,
#[clap(long, value_parser = OptionSimplifyEnumsKindValueParser, default_value = OptionSimplifyEnumsKindValueParser::NONE_NAME)] #[clap(long, value_parser = OptionSimplifyEnumsKindValueParser, default_value = "replace-with-bundle-of-uints")]
pub simplify_enums: std::option::Option<SimplifyEnumsKind>, pub simplify_enums: std::option::Option<SimplifyEnumsKind>,
#[doc(hidden)] #[doc(hidden)]
#[clap(skip = ExportOptionsPrivate(()))] #[clap(skip = ExportOptionsPrivate(()))]
@ -2688,7 +2688,7 @@ impl Default for ExportOptions {
fn default() -> Self { fn default() -> Self {
Self { Self {
simplify_memories: true, simplify_memories: true,
simplify_enums: None, simplify_enums: Some(SimplifyEnumsKind::ReplaceWithBundleOfUInts),
__private: ExportOptionsPrivate(()), __private: ExportOptionsPrivate(()),
} }
} }

View file

@ -1,11 +1,8 @@
// SPDX-License-Identifier: LGPL-3.0-or-later // SPDX-License-Identifier: LGPL-3.0-or-later
// See Notices.txt for copyright information // See Notices.txt for copyright information
use fayalite::{ use fayalite::{
annotations::CustomFirrtlAnnotation, annotations::CustomFirrtlAnnotation, assert_export_firrtl, firrtl::ExportOptions,
assert_export_firrtl, intern::Intern, module::transform::simplify_enums::SimplifyEnumsKind, prelude::*,
intern::Intern,
module::transform::simplify_enums::{simplify_enums, SimplifyEnumsKind},
prelude::*,
ty::StaticType, ty::StaticType,
}; };
use serde_json::json; use serde_json::json;
@ -86,6 +83,10 @@ fn test_mymodule() {
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: None,
..ExportOptions::default()
},
"/test/my_module.fir": r"FIRRTL version 3.2.0 "/test/my_module.fir": r"FIRRTL version 3.2.0
circuit my_module: circuit my_module:
type Ty0 = {`0`: UInt<32>, `1`: SInt<5>} type Ty0 = {`0`: UInt<32>, `1`: SInt<5>}
@ -481,6 +482,10 @@ fn test_enum_literals() {
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: None,
..ExportOptions::default()
},
"/test/check_enum_literals.fir": r"FIRRTL version 3.2.0 "/test/check_enum_literals.fir": r"FIRRTL version 3.2.0
circuit check_enum_literals: circuit check_enum_literals:
type Ty0 = {|HdlNone, HdlSome: UInt<8>|} type Ty0 = {|HdlNone, HdlSome: UInt<8>|}
@ -502,12 +507,13 @@ circuit check_enum_literals:
connect o2, {|A, B: UInt<8>, C: UInt<1>[3]|}(C, _array_literal_expr) @[module-XXXXXXXXXX.rs 10:1] connect o2, {|A, B: UInt<8>, C: UInt<1>[3]|}(C, _array_literal_expr) @[module-XXXXXXXXXX.rs 10:1]
", ",
}; };
let orig_m = m.canonical().intern();
let m = simplify_enums(orig_m, SimplifyEnumsKind::SimplifyToEnumsWithNoBody).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::SimplifyToEnumsWithNoBody),
..ExportOptions::default()
},
"/test/check_enum_literals.fir": r"FIRRTL version 3.2.0 "/test/check_enum_literals.fir": r"FIRRTL version 3.2.0
circuit check_enum_literals: circuit check_enum_literals:
type Ty0 = {|HdlNone, HdlSome|} type Ty0 = {|HdlNone, HdlSome|}
@ -549,11 +555,13 @@ circuit check_enum_literals:
connect o2, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 10:1] connect o2, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 10:1]
", ",
}; };
let m = simplify_enums(orig_m, SimplifyEnumsKind::ReplaceWithBundleOfUInts).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithBundleOfUInts),
..ExportOptions::default()
},
"/test/check_enum_literals.fir": r"FIRRTL version 3.2.0 "/test/check_enum_literals.fir": r"FIRRTL version 3.2.0
circuit check_enum_literals: circuit check_enum_literals:
type Ty0 = {tag: UInt<1>, body: UInt<8>} type Ty0 = {tag: UInt<1>, body: UInt<8>}
@ -593,11 +601,13 @@ circuit check_enum_literals:
connect o2, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 10:1] connect o2, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 10:1]
", ",
}; };
let m = simplify_enums(orig_m, SimplifyEnumsKind::ReplaceWithUInt).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithUInt),
..ExportOptions::default()
},
"/test/check_enum_literals.fir": r"FIRRTL version 3.2.0 "/test/check_enum_literals.fir": r"FIRRTL version 3.2.0
circuit check_enum_literals: circuit check_enum_literals:
type Ty0 = {tag: UInt<1>, body: UInt<8>} type Ty0 = {tag: UInt<1>, body: UInt<8>}
@ -708,6 +718,10 @@ fn test_struct_enum_match() {
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: None,
..ExportOptions::default()
},
"/test/check_struct_enum_match.fir": r"FIRRTL version 3.2.0 "/test/check_struct_enum_match.fir": r"FIRRTL version 3.2.0
circuit check_struct_enum_match: circuit check_struct_enum_match:
type Ty0 = {|HdlNone, HdlSome: UInt<8>|} type Ty0 = {|HdlNone, HdlSome: UInt<8>|}
@ -764,12 +778,13 @@ circuit check_struct_enum_match:
connect o[4], _match_arm_value_9[2] @[module-XXXXXXXXXX.rs 24:1] connect o[4], _match_arm_value_9[2] @[module-XXXXXXXXXX.rs 24:1]
", ",
}; };
let orig_m = m.canonical().intern();
let m = simplify_enums(orig_m, SimplifyEnumsKind::SimplifyToEnumsWithNoBody).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::SimplifyToEnumsWithNoBody),
..ExportOptions::default()
},
"/test/check_struct_enum_match.fir": r"FIRRTL version 3.2.0 "/test/check_struct_enum_match.fir": r"FIRRTL version 3.2.0
circuit check_struct_enum_match: circuit check_struct_enum_match:
type Ty0 = {|HdlNone, HdlSome|} type Ty0 = {|HdlNone, HdlSome|}
@ -844,11 +859,13 @@ circuit check_struct_enum_match:
connect o[4], _cast_bits_to_array_expr_1[2] @[module-XXXXXXXXXX.rs 24:1] connect o[4], _cast_bits_to_array_expr_1[2] @[module-XXXXXXXXXX.rs 24:1]
", ",
}; };
let m = simplify_enums(orig_m, SimplifyEnumsKind::ReplaceWithBundleOfUInts).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithBundleOfUInts),
..ExportOptions::default()
},
"/test/check_struct_enum_match.fir": r"FIRRTL version 3.2.0 "/test/check_struct_enum_match.fir": r"FIRRTL version 3.2.0
circuit check_struct_enum_match: circuit check_struct_enum_match:
type Ty0 = {tag: UInt<1>, body: UInt<8>} type Ty0 = {tag: UInt<1>, body: UInt<8>}
@ -915,11 +932,13 @@ circuit check_struct_enum_match:
connect o[4], _cast_bits_to_array_expr_1[2] @[module-XXXXXXXXXX.rs 24:1] connect o[4], _cast_bits_to_array_expr_1[2] @[module-XXXXXXXXXX.rs 24:1]
", ",
}; };
let m = simplify_enums(orig_m, SimplifyEnumsKind::ReplaceWithUInt).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithUInt),
..ExportOptions::default()
},
"/test/check_struct_enum_match.fir": r"FIRRTL version 3.2.0 "/test/check_struct_enum_match.fir": r"FIRRTL version 3.2.0
circuit check_struct_enum_match: circuit check_struct_enum_match:
module check_struct_enum_match: @[module-XXXXXXXXXX.rs 1:1] module check_struct_enum_match: @[module-XXXXXXXXXX.rs 1:1]
@ -2419,6 +2438,10 @@ fn test_memory_of_enum() {
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: None,
..ExportOptions::default()
},
"/test/check_memory_of_enum.fir": r#"FIRRTL version 3.2.0 "/test/check_memory_of_enum.fir": r#"FIRRTL version 3.2.0
circuit check_memory_of_enum: %[[ circuit check_memory_of_enum: %[[
{ {
@ -2524,12 +2547,13 @@ circuit check_memory_of_enum: %[[
0000111101 0000111101
", ",
}; };
let orig_m = m.canonical().intern();
let m = simplify_enums(orig_m, SimplifyEnumsKind::SimplifyToEnumsWithNoBody).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::SimplifyToEnumsWithNoBody),
..ExportOptions::default()
},
"/test/check_memory_of_enum.fir": r#"FIRRTL version 3.2.0 "/test/check_memory_of_enum.fir": r#"FIRRTL version 3.2.0
circuit check_memory_of_enum: %[[ circuit check_memory_of_enum: %[[
{ {
@ -2671,11 +2695,12 @@ circuit check_memory_of_enum: %[[
01 01
", ",
}; };
let m = simplify_enums(orig_m, SimplifyEnumsKind::ReplaceWithBundleOfUInts).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
..ExportOptions::default()
},
"/test/check_memory_of_enum.fir": r#"FIRRTL version 3.2.0 "/test/check_memory_of_enum.fir": r#"FIRRTL version 3.2.0
circuit check_memory_of_enum: %[[ circuit check_memory_of_enum: %[[
{ {
@ -2801,11 +2826,13 @@ circuit check_memory_of_enum: %[[
01 01
", ",
}; };
let m = simplify_enums(orig_m, SimplifyEnumsKind::ReplaceWithUInt).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithUInt),
..ExportOptions::default()
},
"/test/check_memory_of_enum.fir": r#"FIRRTL version 3.2.0 "/test/check_memory_of_enum.fir": r#"FIRRTL version 3.2.0
circuit check_memory_of_enum: %[[ circuit check_memory_of_enum: %[[
{ {
@ -2906,6 +2933,10 @@ fn test_memory_of_array_of_enum() {
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: None,
..ExportOptions::default()
},
"/test/check_memory_of_array_of_enum.fir": r"FIRRTL version 3.2.0 "/test/check_memory_of_array_of_enum.fir": r"FIRRTL version 3.2.0
circuit check_memory_of_array_of_enum: circuit check_memory_of_array_of_enum:
type Ty0 = {|A, B: UInt<8>, C: UInt<1>[3]|} type Ty0 = {|A, B: UInt<8>, C: UInt<1>[3]|}
@ -3227,6 +3258,10 @@ circuit check_uninit:
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: None,
..ExportOptions::default()
},
"/test/check_uninit_1.fir": r"FIRRTL version 3.2.0 "/test/check_uninit_1.fir": r"FIRRTL version 3.2.0
circuit check_uninit_1: circuit check_uninit_1:
type Ty0 = {} type Ty0 = {}
@ -3329,6 +3364,10 @@ fn test_enum_connect_any() {
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: None,
..ExportOptions::default()
},
"/test/check_enum_connect_any.fir": r"FIRRTL version 3.2.0 "/test/check_enum_connect_any.fir": r"FIRRTL version 3.2.0
circuit check_enum_connect_any: circuit check_enum_connect_any:
type Ty0 = {|HdlNone, HdlSome: SInt<1>|} type Ty0 = {|HdlNone, HdlSome: SInt<1>|}
@ -3357,12 +3396,13 @@ circuit check_enum_connect_any:
connect o2, i2 @[module-XXXXXXXXXX.rs 11:1] connect o2, i2 @[module-XXXXXXXXXX.rs 11:1]
", ",
}; };
let orig_m = m.canonical().intern();
let m = simplify_enums(orig_m, SimplifyEnumsKind::SimplifyToEnumsWithNoBody).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::SimplifyToEnumsWithNoBody),
..ExportOptions::default()
},
"/test/check_enum_connect_any.fir": r"FIRRTL version 3.2.0 "/test/check_enum_connect_any.fir": r"FIRRTL version 3.2.0
circuit check_enum_connect_any: circuit check_enum_connect_any:
type Ty0 = {|A, B, C|} type Ty0 = {|A, B, C|}
@ -3577,11 +3617,13 @@ circuit check_enum_connect_any:
connect o2, i2 @[module-XXXXXXXXXX.rs 11:1] connect o2, i2 @[module-XXXXXXXXXX.rs 11:1]
", ",
}; };
let m = simplify_enums(orig_m, SimplifyEnumsKind::ReplaceWithBundleOfUInts).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithBundleOfUInts),
..ExportOptions::default()
},
"/test/check_enum_connect_any.fir": r"FIRRTL version 3.2.0 "/test/check_enum_connect_any.fir": r"FIRRTL version 3.2.0
circuit check_enum_connect_any: circuit check_enum_connect_any:
type Ty0 = {tag: UInt<2>, body: UInt<2>} type Ty0 = {tag: UInt<2>, body: UInt<2>}
@ -3732,12 +3774,14 @@ circuit check_enum_connect_any:
connect o1, i1 @[module-XXXXXXXXXX.rs 10:1] connect o1, i1 @[module-XXXXXXXXXX.rs 10:1]
connect o2, i2 @[module-XXXXXXXXXX.rs 11:1] connect o2, i2 @[module-XXXXXXXXXX.rs 11:1]
", ",
} };
let m = simplify_enums(orig_m, SimplifyEnumsKind::ReplaceWithUInt).unwrap();
dbg!(m);
#[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161 #[rustfmt::skip] // work around https://github.com/rust-lang/rustfmt/issues/6161
assert_export_firrtl! { assert_export_firrtl! {
m => m =>
options: ExportOptions {
simplify_enums: Some(SimplifyEnumsKind::ReplaceWithUInt),
..ExportOptions::default()
},
"/test/check_enum_connect_any.fir": r"FIRRTL version 3.2.0 "/test/check_enum_connect_any.fir": r"FIRRTL version 3.2.0
circuit check_enum_connect_any: circuit check_enum_connect_any:
type Ty0 = {tag: UInt<2>, body: UInt<2>} type Ty0 = {tag: UInt<2>, body: UInt<2>}