Skip to content

Commit 166a802

Browse files
committed
formatter 1.0
1 parent b162dca commit 166a802

File tree

15 files changed

+436
-316
lines changed

15 files changed

+436
-316
lines changed

lib/dialect/include/rlc/dialect/Operations.hpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,29 @@ namespace mlir::rlc
220220
{
221221

222222
void pruneUnrechableBlocks(mlir::Region& op, mlir::IRRewriter& rewriter);
223-
}
223+
224+
inline void setInlineComment(mlir::Operation* op, llvm::StringRef comment)
225+
{
226+
op->setAttr("comment", mlir::StringAttr::get(op->getContext(), comment));
227+
}
228+
229+
inline void setInlineComment(mlir::Operation* op, mlir::rlc::Comment comment)
230+
{
231+
if (comment == nullptr or comment.getText().empty())
232+
return;
233+
op->setAttr("comment", comment.getTextAttr());
234+
comment.erase();
235+
}
236+
237+
inline llvm::StringRef getComment(mlir::Operation* op)
238+
{
239+
if (not op->hasAttr("comment"))
240+
{
241+
return "";
242+
}
243+
return mlir::cast<mlir::StringAttr>(op->getAttr("comment"));
244+
}
245+
} // namespace mlir::rlc
224246

225247
namespace rlc
226248
{

lib/dialect/src/EmitEnumEntitiesPass.cpp

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ limitations under the License.
1616
#include <set>
1717

1818
#include "mlir/IR/IRMapping.h"
19+
#include "rlc/dialect/IRBuilder.hpp"
1920
#include "rlc/dialect/Operations.hpp"
2021
#include "rlc/dialect/Passes.hpp"
2122

@@ -25,7 +26,7 @@ namespace mlir::rlc
2526
#include "rlc/dialect/Passes.inc"
2627

2728
static void emitFromIntFunction(
28-
IRRewriter& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
29+
mlir::rlc::IRBuilder& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
2930
{
3031
rewriter.setInsertionPoint(enumOp);
3132
auto argType =
@@ -62,7 +63,7 @@ namespace mlir::rlc
6263
}
6364

6465
static void emitAsIntFunction(
65-
IRRewriter& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
66+
mlir::rlc::IRBuilder& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
6667
{
6768
rewriter.setInsertionPoint(enumOp);
6869
auto argType =
@@ -99,7 +100,7 @@ namespace mlir::rlc
99100
}
100101

101102
static void emitMaxMemberFunction(
102-
IRRewriter& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
103+
mlir::rlc::IRBuilder& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
103104
{
104105
rewriter.setInsertionPoint(enumOp);
105106
auto argType =
@@ -133,7 +134,7 @@ namespace mlir::rlc
133134
}
134135

135136
static void emitIsEnumMemberFunction(
136-
IRRewriter& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
137+
mlir::rlc::IRBuilder& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
137138
{
138139
rewriter.setInsertionPoint(enumOp);
139140
auto argType =
@@ -166,7 +167,7 @@ namespace mlir::rlc
166167
}
167168

168169
static void emitAsStringLiteralFunction(
169-
IRRewriter& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
170+
mlir::rlc::IRBuilder& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
170171
{
171172
// Set initial insertion point
172173
rewriter.setInsertionPoint(enumOp);
@@ -260,7 +261,7 @@ namespace mlir::rlc
260261
}
261262

262263
static void emitImplicitEnumFunctions(
263-
IRRewriter& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
264+
mlir::rlc::IRBuilder& rewriter, mlir::rlc::EnumDeclarationOp enumOp)
264265
{
265266
emitIsEnumMemberFunction(rewriter, enumOp);
266267
emitMaxMemberFunction(rewriter, enumOp);
@@ -272,7 +273,7 @@ namespace mlir::rlc
272273
static void moveAllFunctionDeclsToNewClass(
273274
mlir::rlc::EnumDeclarationOp declaration,
274275
mlir::rlc::ClassDeclaration classOp,
275-
mlir::IRRewriter& rewriter)
276+
mlir::rlc::IRBuilder& rewriter)
276277
{
277278
auto classBody = rewriter.createBlock(&classOp.getBody());
278279
llvm::SmallVector<mlir::Operation*> toMoveOut;
@@ -313,7 +314,7 @@ namespace mlir::rlc
313314
static mlir::LogicalResult moveAllMethodExpressionToNewClassFunctions(
314315
mlir::rlc::EnumDeclarationOp declaration,
315316
mlir::rlc::ClassDeclaration classOp,
316-
mlir::IRRewriter& rewriter)
317+
mlir::rlc::IRBuilder& rewriter)
317318
{
318319
llvm::StringMap<mlir::rlc::FunctionOp> funs;
319320
if (declaration.getRegion()
@@ -444,7 +445,7 @@ namespace mlir::rlc
444445

445446
void runOnOperation() override
446447
{
447-
mlir::IRRewriter rewriter(getOperation().getContext());
448+
mlir::rlc::IRBuilder rewriter(getOperation().getContext());
448449
llvm::SmallVector<mlir::rlc::EnumDeclarationOp, 2> ops;
449450
for (auto declaration :
450451
getOperation().getOps<mlir::rlc::EnumDeclarationOp>())
@@ -473,7 +474,6 @@ namespace mlir::rlc
473474
auto op = rewriter.create<mlir::rlc::ClassDeclaration>(
474475
declaration.getLoc(),
475476
declaration.getNameAttr(),
476-
fieldsDecl,
477477
mlir::ArrayRef<mlir::Type>({}),
478478
*declaration.getTypeLocation());
479479

@@ -486,6 +486,12 @@ namespace mlir::rlc
486486
signalPassFailure();
487487
return;
488488
}
489+
rewriter.setInsertionPointToEnd(&op.getBody().front());
490+
rewriter.createClassFieldDeclaration(
491+
op.getLoc(),
492+
mlir::rlc::ClassFieldDeclarationAttr::get(
493+
declaration.getContext(), fields.back(), shugarType));
494+
rewriter.setInsertionPointAfter(op);
489495
enums[declaration.getName()] = declaration;
490496
}
491497

@@ -520,8 +526,13 @@ namespace mlir::rlc
520526

521527
auto type = mlir::rlc::ClassType::getIdentified(
522528
getOperation().getContext(), use.getEnumName(), {});
523-
rewriter.replaceOpWithNewOp<mlir::rlc::EnumUse>(
524-
use, type, rewriter.getI64IntegerAttr(i), use.getEnumValueAttr());
529+
auto newUse = rewriter.create<mlir::rlc::EnumUse>(
530+
use.getLoc(),
531+
type,
532+
rewriter.getI64IntegerAttr(i),
533+
use.getEnumValueAttr());
534+
use.replaceAllUsesWith(newUse.getResult());
535+
use.erase();
525536
break;
526537
}
527538
if (failed)

lib/dialect/src/InstantiateTemplatesPass.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ limitations under the License.
1515
*/
1616
#include "llvm/ADT/TypeSwitch.h"
1717
#include "mlir/IR/BuiltinDialect.h"
18+
#include "mlir/IR/IRMapping.h"
1819
#include "rlc/dialect/Operations.hpp"
1920
#include "rlc/dialect/Passes.hpp"
2021
#include "rlc/dialect/conversion/TypeConverter.h"
@@ -71,13 +72,14 @@ namespace mlir::rlc
7172
assert(isTemplateType(originalDecl.getType()).succeeded());
7273
mlir::IRRewriter rewriter(op.getContext());
7374
rewriter.setInsertionPoint(originalDecl);
74-
rewriter.create<mlir::rlc::ClassDeclaration>(
75+
auto decl = rewriter.create<mlir::rlc::ClassDeclaration>(
7576
originalDecl.getLoc(),
7677
type,
7778
originalDecl.getNameAttr(),
78-
originalDecl.getMembers(),
7979
rewriter.getArrayAttr({}),
8080
nullptr);
81+
mlir::IRMapping mapping;
82+
originalDecl.getBody().cloneInto(&decl.getBody(), mapping);
8183
}
8284

8385
static void declareInstantiatedStructs(

lib/dialect/src/Operations.cpp

Lines changed: 47 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,7 @@ static mlir::rlc::ActionFunction deduceActionType(mlir::rlc::ActionFunction fun)
250250
generatedFunctions,
251251
fun.getUnmangledName(),
252252
fun.getInfo());
253-
if (fun->hasAttr("emit_classes"))
254-
newAction->setAttr("emit_classes", rewriter.getUnitAttr());
253+
newAction->setDiscardableAttrs(fun->getDiscardableAttrDictionary());
255254
newAction.getBody().takeBody(fun.getBody());
256255
newAction.getPrecondition().takeBody(fun.getPrecondition());
257256
fun.getResult().replaceAllUsesWith(newAction.getResult());
@@ -556,8 +555,6 @@ static mlir::Type declareActionStatementType(
556555
name += snakeCaseToCamelCase(statement.getName());
557556

558557
llvm::SmallVector<mlir::rlc::ClassFieldAttr, 4> fields;
559-
llvm::SmallVector<mlir::rlc::ClassFieldDeclarationAttr, 4> fieldsAttrs;
560-
561558
for (auto [name, result] :
562559
llvm::zip(statement.getDeclaredNames(), statement.getResults()))
563560
{
@@ -568,19 +565,21 @@ static mlir::Type declareActionStatementType(
568565
type = casted.getUnderlying();
569566
auto field = mlir::rlc::ClassFieldAttr::get(name, type);
570567
fields.push_back(field);
571-
fieldsAttrs.push_back(mlir::rlc::ClassFieldDeclarationAttr::get(field));
572568
}
573569

574570
auto type = mlir::rlc::ClassType::getNewIdentified(
575571
function.getContext(), name, fields, {});
576572

577573
auto built = builder.getRewriter().create<mlir::rlc::ClassDeclaration>(
578-
statement.getLoc(),
579-
type,
580-
name,
581-
fieldsAttrs,
582-
llvm::ArrayRef<mlir::Type>({}),
583-
nullptr);
574+
statement.getLoc(), type, name, llvm::ArrayRef<mlir::Type>({}), nullptr);
575+
builder.getRewriter().createBlock(&built.getBody());
576+
577+
for (auto field : fields)
578+
{
579+
builder.getRewriter().create<mlir::rlc::ClassFieldDeclaration>(
580+
built.getLoc(), mlir::rlc::ClassFieldDeclarationAttr::get(field));
581+
}
582+
builder.getRewriter().setInsertionPointAfter(built);
584583
mlir::rlc::markSynthetic(built);
585584
auto applyFunction =
586585
defineApplyFunction(function, builder, action, statement, type);
@@ -1472,35 +1471,34 @@ mlir::LogicalResult mlir::rlc::ReturnStatement::typeCheck(
14721471
assert(yield);
14731472
const bool returnsValue = yield->getNumOperands() != 0;
14741473

1475-
auto newOne = rewriter.create<mlir::rlc::ReturnStatement>(
1476-
getLoc(),
1477-
returnsValue ? yield->getOpOperand(0).get().getType()
1478-
: mlir::rlc::VoidType::get(getContext()));
1479-
newOne.getBody().takeBody(getBody());
1480-
rewriter.eraseOp(*this);
1474+
auto returnedType = returnsValue ? yield->getOpOperand(0).get().getType()
1475+
: mlir::rlc::VoidType::get(getContext());
14811476

1482-
if (newOne->getBlock()->getTerminator() != newOne)
1477+
setResult(returnedType);
1478+
1479+
if (getOperation()->getBlock()->getTerminator() != getOperation())
14831480
{
14841481
return mlir::rlc::logError(
1485-
newOne,
1482+
*this,
14861483
"Return statement should be the last statement of its code block.");
14871484
}
14881485

1489-
if (auto parentFunction = newOne->getParentOfType<mlir::rlc::FunctionOp>())
1486+
if (auto parentFunction =
1487+
getOperation()->getParentOfType<mlir::rlc::FunctionOp>())
14901488
{
14911489
mlir::Type returnType =
14921490
(parentFunction.getType().getNumResults() != 0
14931491
? parentFunction.getResultTypes()[0]
14941492
: mlir::rlc::VoidType::get(getContext()));
14951493

1496-
if (not isReturnTypeCompatible(newOne.getResult(), returnType))
1494+
if (not isReturnTypeCompatible(getResult(), returnType))
14971495
{
14981496
auto _ = mlir::rlc::logError(
1499-
newOne,
1497+
*this,
15001498
"Return statement returns values incompatible with the function "
15011499
"signature");
15021500
_ = mlir::rlc::logRemark(
1503-
newOne, "Return value type is " + prettyType(newOne.getResult()));
1501+
*this, "Return value type is " + prettyType(getResult()));
15041502

15051503
return mlir::rlc::logRemark(
15061504
parentFunction,
@@ -2430,6 +2428,16 @@ mlir::LogicalResult mlir::rlc::FromByteArrayOp::typeCheck(
24302428
"are supported");
24312429
}
24322430

2431+
llvm::SmallVector<mlir::rlc::ShugarizedTypeAttr, 2>
2432+
mlir::rlc::ClassFieldDeclaration::getShugarizedTypes()
2433+
{
2434+
llvm::SmallVector<mlir::rlc::ShugarizedTypeAttr, 2> toReturn;
2435+
2436+
if (getDeclaration().getShugarizedType() != nullptr)
2437+
toReturn.push_back(getDeclaration().getShugarizedType());
2438+
return toReturn;
2439+
}
2440+
24332441
llvm::SmallVector<mlir::rlc::ShugarizedTypeAttr, 2>
24342442
mlir::rlc::ConstantGlobalOp::getShugarizedTypes()
24352443
{
@@ -2498,17 +2506,6 @@ mlir::rlc::IsOp::getShugarizedTypes()
24982506
return { *getShugarizedType() };
24992507
}
25002508

2501-
llvm::SmallVector<mlir::rlc::ShugarizedTypeAttr, 2>
2502-
mlir::rlc::ClassDeclaration::getShugarizedTypes()
2503-
{
2504-
llvm::SmallVector<mlir::rlc::ShugarizedTypeAttr, 2> toReturn;
2505-
2506-
for (auto parameter : getMemberFields())
2507-
if (parameter.getShugarizedType() != nullptr)
2508-
toReturn.push_back(parameter.getShugarizedType());
2509-
return toReturn;
2510-
}
2511-
25122509
llvm::SmallVector<mlir::rlc::ShugarizedTypeAttr, 2>
25132510
mlir::rlc::TypeAliasOp::getShugarizedTypes()
25142511
{
@@ -3440,3 +3437,19 @@ size_t mlir::rlc::EnumDeclarationOp::countFields()
34403437
auto range = getBody().front().getOps<mlir::rlc::EnumFieldDeclarationOp>();
34413438
return std::distance(range.begin(), range.end());
34423439
}
3440+
3441+
llvm::SmallVector<mlir::rlc::ClassFieldDeclarationAttr, 4>
3442+
mlir::rlc::ClassDeclaration::getMemberFields()
3443+
{
3444+
llvm::SmallVector<mlir::rlc::ClassFieldDeclarationAttr, 4> outs;
3445+
for (auto member : getBody().getOps<mlir::rlc::ClassFieldDeclaration>())
3446+
outs.push_back(member.getDeclaration());
3447+
3448+
return outs;
3449+
}
3450+
3451+
mlir::rlc::ClassFieldDeclarationAttr
3452+
mlir::rlc::ClassDeclaration::getMemberField(size_t i)
3453+
{
3454+
return getMemberFields()[i];
3455+
}

0 commit comments

Comments
 (0)