Skip to content
This repository has been archived by the owner on Aug 20, 2024. It is now read-only.
This repository has been archived by the owner on Aug 20, 2024. It is now read-only.

DeadCodeElimination transform is not working properly. #2562

Open
@poddar92

Description

Checklist

  • [ y] Did you specify the current behavior?
  • [y ] Did you specify the expected behavior?
  • [ y] Did you provide a code example showing the problem?
  • [ y] Did you describe your environment?
  • [ N/A] Did you specify relevant external information?

What is the current behavior?

Currently; it is removing some nodes from a module; but those nodes are still being used fro other purposes. It is either not cleaning up the whole node chain or it is removing undesired nodes (which are not dead)

example module dumps (firrtl circuit) before and after running DCE
circuitOld.log
circuitNew.log
DCEDebug.log

before circuit module: circuitOld file
After DCE run module definition (firrtl circuit): circuitNew file
The DCEDebug log for the module is also attached.

A little about the module: We have added a transform to insert RAS for all registers. the deleted nodes in question are for that new logic. (you can look for example of node parityreg_clock_4; check_clock_4 which ultimately connects to ras_error.

I could not work on a simple testcase to reproduce this issue. Hopefully this information helps.

What is the expected behavior?

One of the deleted nodes (highlighted above) is coming from primary input to the module (io_enq_bits_data[255:0]) which is not optimized by DCE. This node should not have been deleted as the final output (ras_error) is also not optimized by DCE.

Steps to Reproduce

I could not get to work on the smaller testcase for this failure. I can provide stack trace if that would help.

Exception in thread "main" firrtl.FirrtlInternalException: Internal Error! Please file an issue at https://github.com/ucb-bar/firrtl/issues
	at firrtl.Utils$.error(Utils.scala:471)
	at firrtl.Utils$.throwInternalError(Utils.scala:175)
	at firrtl.stage.phases.CatchExceptions.transform(CatchExceptions.scala:31)
	at firrtl.stage.phases.CatchExceptions.transform(CatchExceptions.scala:10)
	at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:38)
	at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:15)
	at firrtl.options.Translator.transform(Phase.scala:248)
	at firrtl.options.Translator.transform$(Phase.scala:248)
	at firrtl.options.phases.DeletedWrapper.transform(DeletedWrapper.scala:15)
	at firrtl.options.DependencyManager.$anonfun$transform$5(DependencyManager.scala:280)
	at firrtl.Utils$.time(Utils.scala:181)
	at firrtl.options.DependencyManager.$anonfun$transform$3(DependencyManager.scala:280)
	at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
	at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
	at scala.collection.immutable.List.foldLeft(List.scala:89)
	at firrtl.options.DependencyManager.transform(DependencyManager.scala:269)
	at firrtl.options.DependencyManager.transform$(DependencyManager.scala:255)
	at firrtl.options.PhaseManager.transform(DependencyManager.scala:443)
	at firrtl.stage.FirrtlStage.run(FirrtlStage.scala:38)
	at firrtl.options.Stage$$anon$1.transform(Stage.scala:43)
	at firrtl.options.Stage$$anon$1.transform(Stage.scala:43)
	at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:38)
	at firrtl.options.phases.DeletedWrapper.internalTransform(DeletedWrapper.scala:15)
	at firrtl.options.Translator.transform(Phase.scala:248)
	at firrtl.options.Translator.transform$(Phase.scala:248)
	at firrtl.options.phases.DeletedWrapper.transform(DeletedWrapper.scala:15)
	at firrtl.options.Stage.$anonfun$transform$5(Stage.scala:47)
	at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
	at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
	at scala.collection.immutable.List.foldLeft(List.scala:89)
	at firrtl.options.Stage.$anonfun$transform$3(Stage.scala:47)
	at logger.Logger$.$anonfun$makeScope$2(Logger.scala:137)
	at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
	at logger.Logger$.makeScope(Logger.scala:135)
	at firrtl.options.Stage.transform(Stage.scala:47)
	at firrtl.options.Stage.execute(Stage.scala:58)
	at firrtl.options.StageMain.main(Stage.scala:71)
	at firrtl.stage.FirrtlMain.main(FirrtlStage.scala)
Caused by: java.util.NoSuchElementException: key not found: check_clock_4
	at scala.collection.MapLike.default(MapLike.scala:235)
	at scala.collection.MapLike.default$(MapLike.scala:234)
	at scala.collection.AbstractMap.default(Map.scala:63)
	at scala.collection.mutable.HashMap.apply(HashMap.scala:69)
	at firrtl.passes.ResolveKinds$.resolve_expr(ResolveKinds.scala:24)
	at firrtl.passes.ResolveKinds$.$anonfun$resolve_expr$1(ResolveKinds.scala:25)
	at scala.collection.immutable.Stream.$anonfun$map$1(Stream.scala:418)
	at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1171)
	at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1161)
	at scala.collection.immutable.StreamIterator.$anonfun$next$1(Stream.scala:1061)
	at scala.collection.immutable.StreamIterator$LazyCell.v$lzycompute(Stream.scala:1050)
	at scala.collection.immutable.StreamIterator$LazyCell.v(Stream.scala:1050)
	at scala.collection.immutable.StreamIterator.hasNext(Stream.scala:1055)
	at firrtl.ir.Serializer$.s(Serializer.scala:300)
	at firrtl.ir.Serializer$.s(Serializer.scala:74)
	at firrtl.ir.Serializer$.s(Serializer.scala:96)
	at firrtl.ir.Serializer$.s(Serializer.scala:110)
	at firrtl.ir.Serializer$.s(Serializer.scala:246)
	at firrtl.ir.Serializer$.$anonfun$s$9(Serializer.scala:260)
	at firrtl.ir.Serializer$.$anonfun$s$9$adapted(Serializer.scala:260)
	at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
	at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
	at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
	at firrtl.ir.Serializer$.s(Serializer.scala:260)
	at firrtl.ir.Serializer$.serialize(Serializer.scala:36)
	at firrtl.ir.Serializer$.serialize(Serializer.scala:17)
	at firrtl.ir.UseSerializer.serialize(IR.scala:22)
	at firrtl.ir.UseSerializer.serialize$(IR.scala:22)
	at firrtl.ir.Circuit.serialize(IR.scala:1231)
	at firrtl.Transform$.$anonfun$remapAnnotations$3(Compiler.scala:221)
	at logger.Logger$.logIt$1(Logger.scala:203)
	at logger.Logger$.logger$Logger$$showMessage(Logger.scala:211)
	at logger.Logger.trace(Logger.scala:389)
	at firrtl.Transform$.remapAnnotations(Compiler.scala:221)
	at firrtl.stage.transforms.UpdateAnnotations.bToA(UpdateAnnotations.scala:18)
	at firrtl.stage.transforms.UpdateAnnotations.bToA(UpdateAnnotations.scala:8)
	at firrtl.options.Translator.transform(Phase.scala:248)
	at firrtl.options.Translator.transform$(Phase.scala:248)
	at firrtl.stage.transforms.UpdateAnnotations.transform(UpdateAnnotations.scala:8)
	at firrtl.options.DependencyManager.$anonfun$transform$5(DependencyManager.scala:280)
	at firrtl.Utils$.time(Utils.scala:181)
	at firrtl.options.DependencyManager.$anonfun$transform$3(DependencyManager.scala:280)
	at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126)
	at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122)
	at scala.collection.immutable.List.foldLeft(List.scala:89)
	at firrtl.options.DependencyManager.transform(DependencyManager.scala:269)
	at firrtl.options.DependencyManager.transform$(DependencyManager.scala:255)
	at firrtl.stage.TransformManager.transform(TransformManager.scala:14)
	at firrtl.stage.phases.Compiler.$anonfun$internalTransform$6(Compiler.scala:138)
	at firrtl.Utils$.time(Utils.scala:181)
	at firrtl.stage.phases.Compiler.f$1(Compiler.scala:138)
	at firrtl.stage.phases.Compiler.$anonfun$internalTransform$8(Compiler.scala:143)
	at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:238)
	at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
	at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
	at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
	at scala.collection.TraversableLike.map(TraversableLike.scala:238)
	at scala.collection.TraversableLike.map$(TraversableLike.scala:231)
	at scala.collection.AbstractTraversable.map(Traversable.scala:108)
	at firrtl.stage.phases.Compiler.internalTransform(Compiler.scala:143)
	at firrtl.stage.phases.Compiler.internalTransform(Compiler.scala:53)
	at firrtl.options.Translator.transform(Phase.scala:248)
	at firrtl.options.Translator.transform$(Phase.scala:248)
	at firrtl.stage.phases.Compiler.transform(Compiler.scala:53)
	at firrtl.stage.phases.CatchExceptions.transform(CatchExceptions.scala:23)
	... 35 more

Your environment

running rocket-chip (version 1.5) with below chisel version

  • Chisel Verions: 3.5.4
  • OS: Linux xyz 3.10.0-1160.62.1.el7.x86_64 #1_ SMP Wed Mar 23 09:04:02 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
  • Verilator version: 4.028.

External Information

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions