Open
Description
Consider this input:
firrtl.circuit "MatchTest" {
firrtl.module @MatchTest(in %i: !firrtl.enum<Some: uint<8>, None: uint<0>>) attributes {convention = #firrtl<convention scalarized>} {
%c0_ui8 = firrtl.constant 0 : !firrtl.const.uint<8>
%0 = firrtl.enumcreate Some(%c0_ui8) : (!firrtl.const.uint<8>) -> !firrtl.enum<Some: uint<8>, None: uint<0>>
%some = firrtl.node interesting_name %0 : !firrtl.enum<Some: uint<8>, None: uint<0>>
%c0_ui0 = firrtl.constant 0 : !firrtl.const.uint<0>
%1 = firrtl.enumcreate None(%c0_ui0) : (!firrtl.const.uint<0>) -> !firrtl.enum<Some: uint<8>, None: uint<0>>
%none = firrtl.node interesting_name %1 : !firrtl.enum<Some: uint<8>, None: uint<0>>
}
}
Fed through this pipeline:
circt-opt --no-implicit-module -p 'firrtl.circuit(firrtl.module(firrtl-lower-matches,firrtl-expand-whens,firrtl-drop-names,canonicalize))' match-test-name.mlir
Produces:
firrtl.circuit "MatchTest" {
firrtl.module @MatchTest(in %i: !firrtl.enum<Some: uint<8>, None: uint<0>>) attributes {convention = #firrtl<convention scalarized>} {
%c0_ui0 = firrtl.constant 0 : !firrtl.const.uint<0>
%c0_ui8 = firrtl.constant 0 : !firrtl.const.uint<8>
%0 = firrtl.enumcreate Some(%c0_ui8) attributes {name = "some"} : (!firrtl.const.uint<8>) -> !firrtl.enum<Some: uint<8>, None: uint<0>>
%1 = firrtl.enumcreate None(%c0_ui0) attributes {name = "none"} : (!firrtl.const.uint<0>) -> !firrtl.enum<Some: uint<8>, None: uint<0>>
}
}
(names from nodes to go their inputs, cc #7064, I think so that we give nicer names should these becomes name-able things, but regardless)
This IR can't be parsed, failure at attributes
:
<stdin>:5:41: error: expected ':'
%0 = firrtl.enumcreate Some(%c0_ui8) attributes {name = "some"} : (!firrtl.const.uint<8>) -> !firrtl.enum<Some: uint<8>, None: uint<0>>