Allow firrtl hardware ops under sv.ifdef (#7309)

This commit is contained in:
Robert Young 2024-07-11 20:54:25 -04:00 committed by GitHub
parent 961bad58f4
commit cdfcd96664
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 7 additions and 4 deletions

View File

@ -38,7 +38,7 @@ class HardwareDeclOp<string mnemonic, list <Trait> traits = []> :
ReferableDeclOp<mnemonic, traits # [ ReferableDeclOp<mnemonic, traits # [
ParentOneOf<[ ParentOneOf<[
"firrtl::FModuleOp", "firrtl::LayerBlockOp", "firrtl::FModuleOp", "firrtl::LayerBlockOp",
"firrtl::WhenOp", "firrtl::MatchOp"]>]> {} "firrtl::WhenOp", "firrtl::MatchOp", "sv::IfDefOp"]>]> {}
def InstanceOp : HardwareDeclOp<"instance", [ def InstanceOp : HardwareDeclOp<"instance", [
DeclareOpInterfaceMethods<FInstanceLike>, DeclareOpInterfaceMethods<FInstanceLike>,

View File

@ -39,7 +39,8 @@ def FIRRTLDialect : Dialect {
let dependentDialects = [ let dependentDialects = [
"circt::hw::HWDialect", "circt::hw::HWDialect",
"circt::om::OMDialect" "circt::om::OMDialect",
"circt::sv::SVDialect"
]; ];
let extraClassDeclaration = [{ let extraClassDeclaration = [{

View File

@ -19,6 +19,7 @@
#include "circt/Dialect/HW/HWOpInterfaces.h" #include "circt/Dialect/HW/HWOpInterfaces.h"
#include "circt/Dialect/HW/HWTypes.h" #include "circt/Dialect/HW/HWTypes.h"
#include "circt/Dialect/HW/InnerSymbolTable.h" #include "circt/Dialect/HW/InnerSymbolTable.h"
#include "circt/Dialect/SV/SVOps.h"
#include "circt/Dialect/Seq/SeqAttributes.h" #include "circt/Dialect/Seq/SeqAttributes.h"
#include "circt/Support/FieldRef.h" #include "circt/Support/FieldRef.h"
#include "circt/Support/InstanceGraph.h" #include "circt/Support/InstanceGraph.h"

View File

@ -45,6 +45,7 @@ add_circt_dialect_library(CIRCTFIRRTL
CIRCTHW CIRCTHW
CIRCTOM CIRCTOM
CIRCTSeq CIRCTSeq
CIRCTSV
MLIRIR MLIRIR
MLIRPass MLIRPass
) )

View File

@ -279,7 +279,7 @@ firrtl.circuit "Foo" {
firrtl.circuit "Foo" { firrtl.circuit "Foo" {
firrtl.extmodule @Foo() firrtl.extmodule @Foo()
// expected-error @+1 {{'firrtl.instance' op expects parent op to be one of 'firrtl.module, firrtl.layerblock, firrtl.when, firrtl.match'}} // expected-error @+1 {{'firrtl.instance' op expects parent op to be one of 'firrtl.module, firrtl.layerblock, firrtl.when, firrtl.match, sv.ifdef'}}
firrtl.instance "" @Foo() firrtl.instance "" @Foo()
} }
@ -1829,7 +1829,7 @@ firrtl.circuit "ClassCannotHaveHardwarePorts" {
firrtl.circuit "ClassCannotHaveWires" { firrtl.circuit "ClassCannotHaveWires" {
firrtl.module @ClassCannotHaveWires() {} firrtl.module @ClassCannotHaveWires() {}
firrtl.class @ClassWithWire() { firrtl.class @ClassWithWire() {
// expected-error @below {{'firrtl.wire' op expects parent op to be one of 'firrtl.module, firrtl.layerblock, firrtl.when, firrtl.match'}} // expected-error @below {{'firrtl.wire' op expects parent op to be one of 'firrtl.module, firrtl.layerblock, firrtl.when, firrtl.match, sv.ifdef'}}
%w = firrtl.wire : !firrtl.uint<8> %w = firrtl.wire : !firrtl.uint<8>
} }
} }