@@ -42,8 +42,19 @@ class Cxx_Type<string name, string typeMnemonic, list<Trait> traits = []>
4242class Cxx_Op<string mnemonic, list<Trait> traits = []>
4343 : Op<Cxx_Dialect, mnemonic, traits> {}
4444
45+
46+ // types
47+
4548def Cxx_ExprType : Cxx_Type<"Expr", "expr">;
4649
50+ def Cxx_PointerType : Cxx_Type<"Pointer", "ptr"> {
51+ let parameters = (ins "Type":$elementType);
52+
53+ let assemblyFormat = "`<` $elementType `>`";
54+ }
55+
56+ // ops
57+
4758def Cxx_FuncOp : Cxx_Op<"func", [FunctionOpInterface, IsolatedFromAbove]> {
4859 let arguments = (ins SymbolNameAttr:$sym_name,
4960 TypeAttrOf<FunctionType>:$function_type,
@@ -67,7 +78,7 @@ def Cxx_FuncOp : Cxx_Op<"func", [FunctionOpInterface, IsolatedFromAbove]> {
6778}
6879
6980def Cxx_ReturnOp : Cxx_Op<"return", [Pure, HasParent<"FuncOp">, Terminator]> {
70- let arguments = (ins Variadic<Cxx_ExprType >:$input);
81+ let arguments = (ins Variadic<AnyType >:$input);
7182
7283 let builders = [OpBuilder<(ins), [{ build($_builder, $_state, {}); }]>];
7384
@@ -78,20 +89,7 @@ def Cxx_ReturnOp : Cxx_Op<"return", [Pure, HasParent<"FuncOp">, Terminator]> {
7889 let hasVerifier = 0;
7990}
8091
81- def Cxx_CallOp : Cxx_Op<"call"> {
82- let arguments = (ins Cxx_ExprType:$callee, Variadic<AnyType>:$arguments);
83- let results = (outs Cxx_ExprType:$result);
84- let assemblyFormat =
85- "$callee `(` $arguments `:` type($arguments) `)` attr-dict `:` "
86- "type($result)";
87- let builders =
88- [OpBuilder<
89- (ins "mlir::Value":$callee, "mlir::ValueRange":$arguments),
90- [{ build($_builder, $_state, $_builder.getType<ExprType>(), callee, arguments); }]>,
91- ];
92- }
93-
94- def TodoExprOp : Cxx_Op<"todo.expr"> {
92+ def Cxx_TodoExprOp : Cxx_Op<"todo.expr"> {
9593 let arguments = (ins StrAttr:$message);
9694 let results = (outs Cxx_ExprType:$result);
9795 let assemblyFormat = "$message attr-dict `:` type($result)";
@@ -102,59 +100,8 @@ def TodoExprOp : Cxx_Op<"todo.expr"> {
102100 ];
103101}
104102
105- def TodoStmtOp : Cxx_Op<"todo.stmt"> {
103+ def Cxx_TodoStmtOp : Cxx_Op<"todo.stmt"> {
106104 let arguments = (ins StrAttr:$message);
107105 let results = (outs);
108106 let assemblyFormat = "$message attr-dict";
109- }
110-
111- def ToBoolOp : Cxx_Op<"to.bool"> {
112- let arguments = (ins Cxx_ExprType:$value);
113- let results = (outs I1:$result);
114- let assemblyFormat = "`(` $value `)` attr-dict `:` type($result)";
115- }
116-
117- def ImplicitCastOp : Cxx_Op<"implicit.cast"> {
118- let arguments = (ins StrAttr:$cast, Cxx_ExprType:$value);
119- let results = (outs Cxx_ExprType:$result);
120- let assemblyFormat = "$cast `(` $value `)` attr-dict `:` type($result)";
121- let builders =
122- [OpBuilder<
123- (ins "llvm::StringRef":$cast, "mlir::Value":$value),
124- [{ build($_builder, $_state, $_builder.getType<ExprType>(), cast, value); }]>,
125- ];
126- }
127-
128- def IntLiteralOp : Cxx_Op<"int.literal"> {
129- let arguments = (ins I64Attr:$value);
130- let results = (outs Cxx_ExprType:$result);
131- let assemblyFormat = "$value attr-dict `:` type($result)";
132- let builders =
133- [OpBuilder<
134- (ins "int64_t":$value),
135- [{ build($_builder, $_state, $_builder.getType<ExprType>(), value); }]>,
136- ];
137- }
138-
139- def IdOp : Cxx_Op<"id"> {
140- let arguments = (ins StrAttr:$name);
141- let results = (outs Cxx_ExprType:$result);
142- let assemblyFormat = "$name attr-dict `:` type($result)";
143- let builders =
144- [OpBuilder<
145- (ins "llvm::StringRef":$name),
146- [{ build($_builder, $_state, $_builder.getType<ExprType>(), name); }]>,
147- ];
148- }
149-
150- def BinOp : Cxx_Op<"binary"> {
151- let arguments = (ins StrAttr:$op, Cxx_ExprType:$lhs, Cxx_ExprType:$rhs);
152- let results = (outs Cxx_ExprType:$result);
153- let assemblyFormat =
154- "`op` $op `(` $lhs `,` $rhs `)` attr-dict `:` type($result)";
155- let builders =
156- [OpBuilder<
157- (ins "llvm::StringRef":$op, "mlir::Value":$lhs, "mlir::Value":$rhs),
158- [{ build($_builder, $_state, $_builder.getType<ExprType>(), op, lhs, rhs); }]>,
159- ];
160- }
107+ }
0 commit comments