29 Value val,
FuncDefOp computeFunc, OpBuilder &builder, DenseMap<Value, Value> &memo
31 if (
auto it = memo.find(val); it != memo.end()) {
35 if (
auto barg = llvm::dyn_cast<BlockArgument>(val)) {
36 unsigned index = barg.getArgNumber();
37 Value mapped = computeFunc.getArgument(index - 1);
38 return memo[val] = mapped;
44 readOp.getLoc(), readOp.getType(), self, readOp.getMemberNameAttr().getAttr()
46 return memo[val] = rebuilt;
52 return memo[val] = builder.create<
AddFeltOp>(
add.getLoc(),
add.getType(), lhs, rhs);
58 return memo[val] = builder.create<
SubFeltOp>(
sub.getLoc(),
sub.getType(), lhs, rhs);
64 return memo[val] = builder.create<
MulFeltOp>(
mul.getLoc(),
mul.getType(), lhs, rhs);
69 return memo[val] = builder.create<
NegFeltOp>(
neg.getLoc(),
neg.getType(), operand);
75 return memo[val] = builder.create<
DivFeltOp>(
div.getLoc(),
div.getType(), lhs, rhs);
79 return memo[val] = builder.create<
FeltConstantOp>(c.getLoc(), c.getValueAttr());
82 llvm::errs() <<
"Unhandled op in rebuildExprInCompute: " << val <<
'\n';
83 llvm_unreachable(
"Unsupported op kind");
102 assert(afterOp &&
"afterOp must be a valid Operation*");
104 for (
auto &
use : llvm::make_early_inc_range(oldVal.getUses())) {
105 Operation *user =
use.getOwner();
110 if ((user->getBlock() == afterOp->getBlock()) &&
111 (user == afterOp || user->isBeforeInBlock(afterOp))) {