lib/choir/src/eval/rewrite.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2 const ir = @import("../core/root.zig");
3 const rewrite = ir.rewrite;
4
5 pub const RewriteBuilder = struct {
6 rewriter: rewrite.PatternRewriter,
7 root: *ir.Operation,
8
9 pub fn init(
10 allocator: std.mem.Allocator,
11 ctx: *ir.Context,
12 root: *ir.Operation,
13 ) RewriteBuilder {
14 return .{
15 .rewriter = rewrite.PatternRewriter.init(allocator, ctx),
16 .root = root,
17 };
18 }
19
20 pub fn deinit(self: *RewriteBuilder) void {
21 self.rewriter.deinit();
22 }
23
24 pub fn finalize(self: *RewriteBuilder) void {
25 self.rewriter.finalize(self.root);
26 }
27
28 pub fn setInsertionPointBefore(self: *RewriteBuilder, op: *ir.Operation) void {
29 self.rewriter.setInsertionPointBefore(op);
30 }
31
32 pub fn setInsertionPointAfter(self: *RewriteBuilder, op: *ir.Operation) void {
33 self.rewriter.setInsertionPointAfter(op);
34 }
35
36 pub fn hasInsertionPoint(self: *const RewriteBuilder) bool {
37 return self.rewriter.hasInsertionPoint();
38 }
39
40 pub fn create(self: *RewriteBuilder, state: ir.Operation.State) !*ir.Operation {
41 return self.rewriter.create(state);
42 }
43
44 pub fn replaceOp(self: *RewriteBuilder, op: *ir.Operation, new_values: []const *ir.Value) !void {
45 try self.rewriter.replaceOp(op, new_values);
46 }
47
48 pub fn replaceOpWithValue(self: *RewriteBuilder, op: *ir.Operation, new_value: *ir.Value) !void {
49 try self.rewriter.replaceOpWithValue(op, new_value);
50 }
51
52 pub fn eraseOp(self: *RewriteBuilder, op: *ir.Operation) !void {
53 try self.rewriter.eraseOp(op);
54 }
55
56 pub fn setAttr(self: *RewriteBuilder, op: *ir.Operation, key: []const u8, value: ir.Attribute) !void {
57 try self.rewriter.setAttr(op, key, value);
58 }
59 };