Skip to content

Commit 0bce9c9

Browse files
committed
add signaling
1 parent 4d697e6 commit 0bce9c9

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

lib/Conversion/SCFToCalyx/SCFToCalyx.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,7 @@ LogicalResult BuildOpGroups::buildOp(PatternRewriter &rewriter,
741741
rewriter, loc,
742742
{one, one, one, width, width, one, one, one, one,
743743
one, five, one});
744+
hw::ConstantOp c0 = createConstant(loc, rewriter, getComponent(), 1, 0);
744745
hw::ConstantOp c1 = createConstant(loc, rewriter, getComponent(), 1, 1);
745746
rewriter.setInsertionPointToStart(getComponent().getBodyBlock());
746747

@@ -778,8 +779,7 @@ LogicalResult BuildOpGroups::buildOp(PatternRewriter &rewriter,
778779
}
779780

780781
if (cmpf.getPredicate() == CmpFPredicate::AlwaysFalse) {
781-
Value constantZero = createConstant(loc, rewriter, getComponent(), 1, 0);
782-
cmpf.getResult().replaceAllUsesWith(constantZero);
782+
cmpf.getResult().replaceAllUsesWith(c0);
783783
return success();
784784
}
785785
}
@@ -800,6 +800,29 @@ LogicalResult BuildOpGroups::buildOp(PatternRewriter &rewriter,
800800
rewriter.create<calyx::AssignOp>(loc, calyxCmpFOp.getLeft(), cmpf.getLhs());
801801
rewriter.create<calyx::AssignOp>(loc, calyxCmpFOp.getRight(), cmpf.getRhs());
802802

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+
803826
// Prepare signals and create registers
804827
SmallVector<calyx::RegisterOp> inputRegs;
805828
for (const auto &input : info.inputPorts) {

0 commit comments

Comments
 (0)