36 GetPortOp getAsOutput;
39 llvm::DenseMap< Value,
40 llvm::DenseMap<StringAttr, PortAccesses>>
41 instancePortAccessMap;
44 llvm::SmallVector<GetPortOp> redundantOps;
46 for (
auto getPortOp : containerOp.getOps<GetPortOp>()) {
47 PortAccesses &portAccesses =
48 instancePortAccessMap[getPortOp.getInstance()]
49 [getPortOp.getPortSymbolAttr().getAttr()];
51 if (getPortOp.getDirection() == Direction::Input) {
52 if (portAccesses.getAsInput) {
55 getPortOp.replaceAllUsesWith(portAccesses.getAsInput.getResult());
56 redundantOps.push_back(getPortOp);
58 portAccesses.getAsInput = getPortOp;
61 if (portAccesses.getAsOutput) {
64 getPortOp.replaceAllUsesWith(portAccesses.getAsOutput.getResult());
65 redundantOps.push_back(getPortOp);
67 portAccesses.getAsOutput = getPortOp;
73 for (
auto redundantOp : redundantOps)
80 llvm::DenseMap<Value, PortReadOp> portFirstReadMap;
81 llvm::SmallVector<PortReadOp> redundantOps;
83 for (
auto portReadOp : containerOp.getOps<PortReadOp>()) {
87 if (
auto existingRead = portFirstReadMap.lookup(portBeingRead)) {
90 portReadOp.replaceAllUsesWith(existingRead.getResult());
91 redundantOps.push_back(portReadOp);
93 portFirstReadMap[portBeingRead] = portReadOp;
98 for (
auto redundantOp : redundantOps)