@@ -741,6 +741,7 @@ LogicalResult BuildOpGroups::buildOp(PatternRewriter &rewriter,
741
741
rewriter, loc,
742
742
{one, one, one, width, width, one, one, one, one,
743
743
one, five, one});
744
+ hw::ConstantOp c0 = createConstant (loc, rewriter, getComponent (), 1 , 0 );
744
745
hw::ConstantOp c1 = createConstant (loc, rewriter, getComponent (), 1 , 1 );
745
746
rewriter.setInsertionPointToStart (getComponent ().getBodyBlock ());
746
747
@@ -778,8 +779,7 @@ LogicalResult BuildOpGroups::buildOp(PatternRewriter &rewriter,
778
779
}
779
780
780
781
if (cmpf.getPredicate () == CmpFPredicate::AlwaysFalse) {
781
- Value constantZero = createConstant (loc, rewriter, getComponent (), 1 , 0 );
782
- cmpf.getResult ().replaceAllUsesWith (constantZero);
782
+ cmpf.getResult ().replaceAllUsesWith (c0);
783
783
return success ();
784
784
}
785
785
}
@@ -800,6 +800,29 @@ LogicalResult BuildOpGroups::buildOp(PatternRewriter &rewriter,
800
800
rewriter.create <calyx::AssignOp>(loc, calyxCmpFOp.getLeft (), cmpf.getLhs ());
801
801
rewriter.create <calyx::AssignOp>(loc, calyxCmpFOp.getRight (), cmpf.getRhs ());
802
802
803
+ bool signalingFlag = false ;
804
+ switch (cmpf.getPredicate ()) {
805
+ case CmpFPredicate::UGT:
806
+ case CmpFPredicate::UGE:
807
+ case CmpFPredicate::ULT:
808
+ case CmpFPredicate::ULE:
809
+ case CmpFPredicate::OGT:
810
+ case CmpFPredicate::OGE:
811
+ case CmpFPredicate::OLT:
812
+ case CmpFPredicate::OLE:
813
+ signalingFlag = true ;
814
+ break ;
815
+ default :
816
+ break ;
817
+ }
818
+
819
+ // The IEEE Standard mandates that equality comparisons ordinarily are quiet,
820
+ // while inequality comparisons ordinarily are signaling.
821
+ if (signalingFlag)
822
+ rewriter.create <calyx::AssignOp>(loc, calyxCmpFOp.getSignaling (), c1);
823
+ else
824
+ rewriter.create <calyx::AssignOp>(loc, calyxCmpFOp.getSignaling (), c0);
825
+
803
826
// Prepare signals and create registers
804
827
SmallVector<calyx::RegisterOp> inputRegs;
805
828
for (const auto &input : info.inputPorts ) {
0 commit comments