30 Value val,
FuncDefOp computeFunc, OpBuilder &builder, DenseMap<Value, Value> &memo
32 if (
auto it = memo.find(val); it != memo.end()) {
36 if (
auto barg = llvm::dyn_cast<BlockArgument>(val)) {
37 unsigned index = barg.getArgNumber();
38 Value mapped = computeFunc.getArgument(index - 1);
39 return memo[val] = mapped;
45 readOp.getLoc(), readOp.getType(), self, readOp.getMemberNameAttr().getAttr()
47 return memo[val] = rebuilt;
53 return memo[val] = builder.create<
AddFeltOp>(
add.getLoc(),
add.getType(), lhs, rhs);
59 return memo[val] = builder.create<
SubFeltOp>(
sub.getLoc(),
sub.getType(), lhs, rhs);
65 return memo[val] = builder.create<
MulFeltOp>(
mul.getLoc(),
mul.getType(), lhs, rhs);
70 return memo[val] = builder.create<
NegFeltOp>(
neg.getLoc(),
neg.getType(), operand);
76 return memo[val] = builder.create<
DivFeltOp>(
div.getLoc(),
div.getType(), lhs, rhs);
80 return memo[val] = builder.create<
FeltConstantOp>(c.getLoc(), c.getValueAttr());
83 llvm::errs() <<
"Unhandled op in rebuildExprInCompute: " << val <<
'\n';
84 llvm_unreachable(
"Unsupported op kind");
103 assert(afterOp &&
"afterOp must be a valid Operation*");
105 for (
auto &
use : llvm::make_early_inc_range(oldVal.getUses())) {
106 Operation *user =
use.getOwner();
111 if ((user->getBlock() == afterOp->getBlock()) &&
112 (user == afterOp || user->isBeforeInBlock(afterOp))) {