diff --git a/lib/Conversion/SCFToCalyx/SCFToCalyx.cpp b/lib/Conversion/SCFToCalyx/SCFToCalyx.cpp index 9e33fb19e7d1..93bd5101c46e 100644 --- a/lib/Conversion/SCFToCalyx/SCFToCalyx.cpp +++ b/lib/Conversion/SCFToCalyx/SCFToCalyx.cpp @@ -306,6 +306,7 @@ class BuildOpGroups : public calyx::FuncOpPartialLoweringPattern { : WalkResult::interrupt(); }); + getState().getComponentOp().dump(); return success(opBuiltSuccessfully); } @@ -809,9 +810,41 @@ LogicalResult BuildOpGroups::buildOp(PatternRewriter &rewriter, cmpFOp, out); } case CmpFPredicate::ULT: { - Value out = rewriter.create(loc, unordered, cmpFOp.getLt()); - return buildLibraryBinaryPipeOp(rewriter, cmpf, - cmpFOp, out); + SmallVector types{one, one, one}; + + calyx::ComponentOp componentOp = + getState().getComponentOp(); + SmallVector groupIdentifier = { + "compute", getState().getUniqueName("compare"), + "out"}; + auto groupOp = calyx::createGroup( + rewriter, componentOp, loc, llvm::join(groupIdentifier, "_")); + rewriter.setInsertionPointToEnd(groupOp.getBodyBlock()); + + auto calyxOp = + getState() + .getNewLibraryOpInstance(rewriter, loc, types); + rewriter.create(loc, calyxOp.getLeft(), unordered); + rewriter.create(loc, calyxOp.getRight(), cmpFOp.getLt()); + + auto directions = calyxOp.portDirections(); + SmallVector opInputPorts; + Value opOutputPort; + for (auto dir : enumerate(directions)) { + switch (dir.value()) { + case calyx::Direction::Input: { + opInputPorts.push_back(calyxOp.getResult(dir.index())); + break; + } + case calyx::Direction::Output: { + opOutputPort = calyxOp.getResult(dir.index()); + break; + } + } + } + + return buildLibraryBinaryPipeOp( + rewriter, cmpf, cmpFOp, opOutputPort); } case CmpFPredicate::ULE: { Value leValue =