Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Band aid until litOption is implemented for Aggregates. #1277

Merged
merged 1 commit into from
Dec 17, 2019

Conversation

ucbjrl
Copy link
Contributor

@ucbjrl ucbjrl commented Dec 17, 2019

This is just a band aid until an Aggregate isLit() method (for which work has begun) is implemented.

Related issue: #1256, ucb-bar/dsptools#184

Type of change: bug report

Impact: API modification

Development Phase: implementation

Release Notes
Prevent isLit() on Aggregates failing with a scala.NotImplementedError: an implementation is missing error.

This is just a band aid until an Aggregate `isLit()` method (for which work has begun) is implemented.
Copy link
Contributor

@chick chick left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"I am stuck on Band-Aid (brand) 'cause Band-Aid's stuck on me!"

@jackkoenig jackkoenig added this to the 3.2.X milestone Dec 17, 2019
@jackkoenig jackkoenig added the Please Merge Accepted PRs that are ready to be merged. Useful when waiting on CI. label Dec 17, 2019
@mergify mergify bot merged commit 98a6710 into master Dec 17, 2019
@ucbjrl ucbjrl deleted the litoptionbandaid branch December 17, 2019 20:42
mergify bot pushed a commit that referenced this pull request Dec 17, 2019
This is just a band aid until an Aggregate `isLit()` method (for which work has begun) is implemented.

(cherry picked from commit 98a6710)
@mergify mergify bot added the Backported This PR has been backported label Dec 17, 2019
@jackkoenig
Copy link
Contributor

I love robots

mergify bot added a commit that referenced this pull request Dec 17, 2019
This is just a band aid until an Aggregate `isLit()` method (for which work has begun) is implemented.

(cherry picked from commit 98a6710)
jackkoenig added a commit that referenced this pull request Feb 28, 2023
* Transform, not run in LegalizeAndReduction test

Switch from using FirrtlStage.transform to FirrtlStage.run in one
test. The latter is problematic as it doesn't include wrappers or
pre/post phases which are how things will work in the future for doing
file writing (via HowToSerialize ideas).

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Use execute in FIRRTL testing infra (not run)

Changes the FirrtlStage method in FIRRTL testing infrastructure from
"run" (which does not include Stage-global Phases) to "execute" (which
does).

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Add HowToSerialize Annotation mix-in

This adds an Annotation mix-in, HowToSerialize, that allows an
annotation to declare how it should be serialized to a file. The
mix-in is abstract in a baseFileName and a suffix (used to generate a
filename), a howToSerialize method (defining the string contents of
the file), and a howToResume method (that defines a replacement for
the file-serialized annotation that allows this to be resumed) [^1].

A default implementation for generating a filename (called filename)
is defined that will put the baseFileName+suffix file in the target
directory. This can be overridden by the annotation if desired.

[^1]: When an annotation is serialized to a file, it should be removed
from the emitted JSON-serialized annotations. The howToResume method
defines a way of adding replacement annotations to the JSON-serialized
annotations that tell a downstream tool how to find the serialized
file. E.g., if a FIRRTL circuit is written to a file, this could be
used to add a FirrtlFileAnnotation defining the location of the new
file.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Handle HowToSerialize in WriteOutputAnnotations

This extends firrtl.options.phase.WriteOutputAnnotations to serialize
HowToSerialize annotations to files.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Test HowToSerialize in WriteOutputAnnotationsSpec

This adds tests of the HowToSerialize mix-in inside the
WriteOutputAnnotationsSpec.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* [skip chisel tests] Migrate to HowToSerialize

This migrates EmittedAnnotations (and its children) to mixin the
HowToSerialize trait. This enables this annotations to be
automatically written to files via WriteOutputAnnotations

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Deprecated firrtl.stage.phases.WriteEmitted

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Use streams in HowToSerialize

This converts the HowToSerialize trait to use a Stream[Char] when
defining how an annotation should be serialized.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Switch from Stream[Char] to Stream[Byte]

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Change howToSerialize method to Iterable

Change the type of the HowToSerialize.howToSerialize method from a
stream to an iterable. Using the latter (the superset of both lazy
streams and non-lazy things like String) avoids problems with users
having to choose laziness when they already have an eager object.

In effect, this makes the API more general.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Add Scaladoc to HowToSerialize trait

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Change HowToSerialize to CustomFileEmission

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Add default implementation of replacements

Add a default implementation of CustomFileEmission.replacements.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Avoid unnecessary 2x monad in CustomFileEmission

Change the type of CustomFileEmission.replacements from
Option[AnnotationSeq] to AnnotationSeq. The latter has all the
properties of the former that I'm trying to express here: (1) can
emptiness and (2) monadicity (if the AnnotationSeq is converted to a
sequence first). The latter property is exploited in the
WriteOutputAnnotations phase to concisely flatMap over the annotations
and doing the double-monad is unnecessary.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Restrict CustomFileEmission filename API

Change the API of CustomFileEmission to use a final def for the actual
filename. The baseFileName is then made a method with an AnnotationSeq
parameter to allow the filename to change as a function of other
annotations, e.g., by an output circuit annotation.

By restricting this API, we have more control over the default
behavior of where things are written using the fixed behavior of the
filename method---files will always be written using the behavior that
StageOptions define. Previously, if users want customized behavior,
they would need to duplicate this StageOptions functionality (and
likely subtly deviate from the standard behavior and introduce
problems with their build).

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Add file conflict behavior for CustomFileEmission

Set behavior of file conflicts in CustomFileEmission to be the
following: No two annotations in the same annotation sequence can
serialize to the same file during the WriteOutputAnnotations phase.
However, if the output annotation file already exists, it will be
overwritten.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Return relative path from getBuildFileName

Change FirrtlOptions.getBuildFileName to simply serialize the
underlying Java File instead of converting this to its canonical path.
This should improve the relocatability of files produced by the
CustomFileEmission API.

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Normalize paths in StageOptions.getBuildFile

Normalize paths inside the getBuildFileName utility of StageOptions.
Add a check to prevent a null pointer dereference.

Co-authored-by: Jack Koenig <koenig@sifive.com>
Co-authored-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Refer to CustomFIleEmission in deprecation message

Co-authored-by: Jack Koenig <koenig@sifive.com>
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Simplify CustomFileEmission toBytes implementation

Co-authored-by: Jack Koenig <koenig@sifive.com>
Co-authored-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

* Use toBytes, not getBytes, in CustomFileEmission

Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>

Co-authored-by: Jack Koenig <koenig@sifive.com>
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Backported This PR has been backported Please Merge Accepted PRs that are ready to be merged. Useful when waiting on CI.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants