diff --git a/include/circt/Dialect/Moore/MooreOps.td b/include/circt/Dialect/Moore/MooreOps.td index ba7f5dc6d475..27413163d204 100644 --- a/include/circt/Dialect/Moore/MooreOps.td +++ b/include/circt/Dialect/Moore/MooreOps.td @@ -462,7 +462,7 @@ def NamedConstantOp : MooreOp<"named_constant", [ }]; } -def StringConstantOp : MooreOp<"string_constant", [Pure, ConstantLike]> { +def StringConstantOp : MooreOp<"string_constant", [Pure]> { let summary = "Produce a constant string value"; let description = [{ Produces a constant value of string type. diff --git a/lib/Dialect/Moore/MooreOps.cpp b/lib/Dialect/Moore/MooreOps.cpp index 788751f7f381..0f32fcb220ed 100644 --- a/lib/Dialect/Moore/MooreOps.cpp +++ b/lib/Dialect/Moore/MooreOps.cpp @@ -322,6 +322,12 @@ SmallVector VariableOp::getPromotableSlots() { if (mlir::mayBeGraphRegion(*getOperation()->getParentRegion()) || getInitial()) return {}; + + // Ensure that `getDefaultValue` can conjure up a default value for the + // variable's type. + if (!isa(getType().getNestedType())) + return {}; + return {MemorySlot{getResult(), getType().getNestedType()}}; } diff --git a/test/Conversion/ImportVerilog/basic.sv b/test/Conversion/ImportVerilog/basic.sv index 1e79f3beabd4..d26b65f9772a 100644 --- a/test/Conversion/ImportVerilog/basic.sv +++ b/test/Conversion/ImportVerilog/basic.sv @@ -1,4 +1,5 @@ // RUN: circt-translate --import-verilog %s | FileCheck %s +// RUN: circt-verilog --ir-moore %s // REQUIRES: slang // Internal issue in Slang v3 about jump depending on uninitialised value.