11// ===----------------------------------------------------------------------===//
22//
3- // This file implements patterns to convert operations in the Func dialect to
3+ // This file implements patterns to convert operations in the Func dialect to
44// operations in the Tessera dialect.
55//
66// ===----------------------------------------------------------------------===//
2323using namespace mlir ;
2424using namespace mlir ::enzyme;
2525
26- namespace {
27- } // namespace
26+ namespace {} // namespace
2827
2928// ===----------------------------------------------------------------------===//
3029// Rewrite Patterns
@@ -37,12 +36,10 @@ class FuncOpRewrite final : public OpRewritePattern<func::FuncOp> {
3736public:
3837 using OpRewritePattern<func::FuncOp>::OpRewritePattern;
3938
40- LogicalResult
41- matchAndRewrite (func::FuncOp funcOp,
42- PatternRewriter &rewriter) const override {
39+ LogicalResult matchAndRewrite (func::FuncOp funcOp,
40+ PatternRewriter &rewriter) const override {
4341 FunctionType fnType = funcOp.getFunctionType ();
4442
45-
4643 // Create the `tessera.define` op
4744 auto tesseraDefineOp = rewriter.create <tessera::DefineOp>(
4845 funcOp.getLoc (), funcOp.getName (), fnType);
@@ -88,21 +85,21 @@ class CallOpRewrite final : public OpRewritePattern<func::CallOp> {
8885public:
8986 using OpRewritePattern<func::CallOp>::OpRewritePattern;
9087
91- LogicalResult
92- matchAndRewrite (func::CallOp callOp,
93- PatternRewriter &rewriter) const override {
88+ LogicalResult matchAndRewrite (func::CallOp callOp,
89+ PatternRewriter &rewriter) const override {
9490
9591 auto calleeAttr = callOp.getCalleeAttr ();
9692 Operation *moduleOp = callOp->getParentOfType <ModuleOp>();
9793 Operation *calleeOp = SymbolTable::lookupSymbolIn (moduleOp, calleeAttr);
98-
94+
9995 // Only convert if the callee is a Tessera DefineOp
10096 if (!isa<tessera::DefineOp>(calleeOp))
101- return rewriter.notifyMatchFailure (callOp, " Callee is not a Tessera DefineOp" );
102-
103- rewriter.replaceOpWithNewOp <tessera::CallOp>(callOp, callOp.getResultTypes (),
104- callOp.getOperands (),
105- callOp->getAttrs ());
97+ return rewriter.notifyMatchFailure (callOp,
98+ " Callee is not a Tessera DefineOp" );
99+
100+ rewriter.replaceOpWithNewOp <tessera::CallOp>(
101+ callOp, callOp.getResultTypes (), callOp.getOperands (),
102+ callOp->getAttrs ());
106103
107104 return success ();
108105 }
@@ -113,17 +110,17 @@ class ReturnOpRewrite final : public OpRewritePattern<func::ReturnOp> {
113110public:
114111 using OpRewritePattern<func::ReturnOp>::OpRewritePattern;
115112
116- LogicalResult
117- matchAndRewrite (func::ReturnOp returnOp,
118- PatternRewriter &rewriter) const override {
113+ LogicalResult matchAndRewrite (func::ReturnOp returnOp,
114+ PatternRewriter &rewriter) const override {
119115 Operation *parent = returnOp->getParentOp ();
120-
116+
121117 // Only convert if the function is a Tessera DefineOp
122118 if (!isa<tessera::DefineOp>(parent))
123- return rewriter.notifyMatchFailure (returnOp, " Parent is not a Tessera DefineOp" );
124-
119+ return rewriter.notifyMatchFailure (returnOp,
120+ " Parent is not a Tessera DefineOp" );
121+
125122 rewriter.replaceOpWithNewOp <tessera::ReturnOp>(returnOp,
126- returnOp.getOperands ());
123+ returnOp.getOperands ());
127124 return success ();
128125 }
129126};
@@ -136,7 +133,7 @@ class ReturnOpRewrite final : public OpRewritePattern<func::ReturnOp> {
136133namespace mlir ::enzyme::tessera {
137134
138135struct FuncToTesseraPass
139- : public PassWrapper<FuncToTesseraPass, OperationPass<ModuleOp>> {
136+ : public PassWrapper<FuncToTesseraPass, OperationPass<ModuleOp>> {
140137
141138 StringRef getArgument () const final { return " func-to-tessera" ; }
142139 StringRef getDescription () const final {
0 commit comments