Skip to content

Commit b162dca

Browse files
committed
formatted most test
1 parent 68c4c6a commit b162dca

File tree

172 files changed

+1725
-1484
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

172 files changed

+1725
-1484
lines changed

lib/dialect/include/rlc/dialect/SerializationContext.hpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,32 @@ namespace mlir::rlc
3535
SerializationContext* ctx;
3636
};
3737

38+
class PreconditionGuard
39+
{
40+
public:
41+
PreconditionGuard(SerializationContext& ctx, int value = 1): ctx(&ctx)
42+
{
43+
ctx.emittingPrecondition += value;
44+
}
45+
~PreconditionGuard() { ctx->emittingPrecondition--; }
46+
47+
private:
48+
SerializationContext* ctx;
49+
};
50+
3851
void indent(llvm::raw_ostream& OS) { OS.indent(indentLevel * 2); }
3952
IndentGuard increaseIndent() { return IndentGuard(*this); }
53+
PreconditionGuard startEmittingPrecondition()
54+
{
55+
return PreconditionGuard(*this);
56+
}
4057

4158
ModuleBuilder& getBuilder() { return *builder; }
59+
bool isInPrecondition() { return emittingPrecondition == 1; }
4260

4361
private:
4462
int indentLevel = 0;
63+
int emittingPrecondition = 0;
4564
ModuleBuilder* builder;
4665
};
4766
} // namespace mlir::rlc

lib/dialect/src/EmitEnumEntitiesPass.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,8 @@ namespace mlir::rlc
345345

346346
mlir::rlc::FunctionInfoAttr::get(rewriter.getContext()),
347347
true);
348+
349+
markSynthetic(op);
348350
rewriter.createBlock(&op.getBody());
349351
auto retStm = rewriter.create<mlir::rlc::ReturnStatement>(
350352
op.getLoc(), mlir::rlc::UnknownType::get(op.getContext()));
@@ -425,7 +427,8 @@ namespace mlir::rlc
425427
ifStatement.getLoc(),
426428
mlir::rlc::UnknownType::get(ifStatement.getContext()));
427429

428-
retStm.getBody().takeBody(expression.getBody());
430+
mlir::IRMapping mapping;
431+
expression.getBody().cloneInto(&retStm.getBody(), mapping);
429432
}
430433
currentFieldIndex++;
431434
}

lib/dialect/src/Operations.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,6 +1424,8 @@ mlir::LogicalResult mlir::rlc::ArrayAccess::typeCheck(
14241424
if (!newCall)
14251425
return mlir::failure();
14261426
replaceAllUsesWith(newCall);
1427+
newCall->setAttr(
1428+
"array_access_syntax", builder.getRewriter().getUnitAttr());
14271429
erase();
14281430
return mlir::success();
14291431
}

lib/dialect/src/Operations.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ def RLC_EnumDeclarationOp : RLC_Dialect<"enum_declaration_op", [NoTerminator, No
573573
}];
574574
}
575575

576-
def RLC_EnumFieldExpressionOp : RLC_Dialect<"enum_field_expression", [NoRegionArguments, HasOnlyGraphRegion]> {
576+
def RLC_EnumFieldExpressionOp : RLC_Dialect<"enum_field_expression", [NoRegionArguments, HasOnlyGraphRegion, DeclareOpInterfaceMethods<Serializable>]> {
577577
let summary = "implement malloc";
578578

579579
let description = [{
@@ -593,7 +593,7 @@ def RLC_EnumFieldExpressionOp : RLC_Dialect<"enum_field_expression", [NoRegionAr
593593
}];
594594
}
595595

596-
def RLC_EnumFieldDeclarationOp : RLC_Dialect<"enum_field_declaration", [NoTerminator, NoRegionArguments, HasOnlyGraphRegion, DeclareOpInterfaceMethods<Serializable>]> {
596+
def RLC_EnumFieldDeclarationOp : RLC_Dialect<"enum_field_declaration", [NoTerminator, NoRegionArguments, HasOnlyGraphRegion, DeclareOpInterfaceMethods<Serializable>, DeclareOpInterfaceMethods<RangeBased>]> {
597597
let summary = "implement malloc";
598598

599599
let description = [{

lib/dialect/src/Serialization.cpp

Lines changed: 66 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -380,11 +380,32 @@ void mlir::rlc::IsAlternativeTypeOp::serialize(
380380
OS << " is Alternative";
381381
}
382382

383+
void mlir::rlc::EnumFieldExpressionOp::serialize(
384+
llvm::raw_ostream& OS, mlir::rlc::SerializationContext& ctx)
385+
{
386+
ctx.indent(OS);
387+
OS << prettyType(getType());
388+
OS << " " << getName() << " = ";
389+
390+
auto yield = mlir::cast<mlir::rlc::Yield>(getBody().front().getTerminator());
391+
serializeExpression(yield.getArguments()[0], OS, ctx);
392+
OS << "\n";
393+
}
394+
383395
void mlir::rlc::EnumFieldDeclarationOp::serialize(
384396
llvm::raw_ostream& OS, mlir::rlc::SerializationContext& ctx)
385397
{
386398
ctx.indent(OS);
387-
OS << getName() << "\n";
399+
OS << getName();
400+
if (getBody().empty())
401+
{
402+
OS << "\n";
403+
return;
404+
}
405+
406+
OS << ":\n";
407+
auto _ = ctx.increaseIndent();
408+
serializeBlock(getBody().front(), OS, ctx, true);
388409
}
389410

390411
void mlir::rlc::EnumDeclarationOp::serialize(
@@ -443,6 +464,14 @@ void mlir::rlc::TraitDefinition::serialize(
443464
void mlir::rlc::CallOp::serialize(
444465
llvm::raw_ostream& OS, mlir::rlc::SerializationContext& ctx)
445466
{
467+
if (getOperation()->hasAttr("array_access_syntax"))
468+
{
469+
serializeExpression(getArgs()[0], OS, ctx);
470+
OS << "[";
471+
serializeExpression(getArgs()[1], OS, ctx);
472+
OS << "]";
473+
return;
474+
}
446475
if (getOperation()->hasAttr("post_fix_call"))
447476
{
448477
serializeExpression(getArgs()[0], OS, ctx);
@@ -868,8 +897,16 @@ void mlir::rlc::ForFieldStatement::serialize(
868897
<< " of ";
869898

870899
auto terminator = mlir::cast<mlir::rlc::Yield>(getCondition().front().back());
871-
serializeExpression(terminator.getArguments()[0], OS, ctx);
900+
901+
for (auto exp : llvm::drop_end(terminator.getArguments()))
902+
{
903+
serializeExpression(exp, OS, ctx);
904+
OS << ", ";
905+
}
906+
serializeExpression(terminator.getArguments().back(), OS, ctx);
907+
872908
OS << ":\n";
909+
873910
{
874911
auto _ = ctx.increaseIndent();
875912
serializeBlock(getBody().front(), OS, ctx, true);
@@ -908,6 +945,16 @@ void mlir::rlc::WhileStatement::serialize(
908945
}
909946
}
910947

948+
mlir::Location mlir::rlc::EnumFieldDeclarationOp::getEndLocation()
949+
{
950+
if (getBody().empty())
951+
{
952+
return getLoc();
953+
}
954+
// get end location of the final expression of this field
955+
return ::getEndLocation(&getBody().front().back());
956+
}
957+
911958
mlir::Location mlir::rlc::ActionStatement::getEndLocation()
912959
{
913960
return getPrecondition().front().getTerminator()->getLoc();
@@ -1114,6 +1161,7 @@ void mlir::rlc::FunctionOp::serialize(
11141161
mlir::cast<mlir::rlc::Yield>(getPrecondition().front().back());
11151162
if (not terminator.getArguments().empty())
11161163
{
1164+
auto _ = ctx.startEmittingPrecondition();
11171165
assert(terminator.getArguments().size() == 1);
11181166
OS << " { ";
11191167

@@ -1186,6 +1234,7 @@ void mlir::rlc::ActionStatement::serialize(
11861234
mlir::cast<mlir::rlc::Yield>(getPrecondition().front().back());
11871235
if (not terminator.getArguments().empty())
11881236
{
1237+
auto _ = ctx.startEmittingPrecondition();
11891238
OS << " { ";
11901239

11911240
serializeExpression(terminator.getArguments()[0], OS, ctx);
@@ -1218,12 +1267,20 @@ void mlir::rlc::ActionsStatement::serialize(
12181267
void mlir::rlc::ShortCircuitingAnd::serialize(
12191268
llvm::raw_ostream& OS, mlir::rlc::SerializationContext& ctx)
12201269
{
1221-
serializeExpression(
1222-
mlir::cast<mlir::rlc::Yield>(getLhs().front().getTerminator())
1223-
.getArguments()[0],
1224-
OS,
1225-
ctx);
1226-
OS << " and ";
1270+
bool topLevelAnd = ctx.isInPrecondition();
1271+
1272+
{
1273+
auto _ = ctx.startEmittingPrecondition();
1274+
serializeExpression(
1275+
mlir::cast<mlir::rlc::Yield>(getLhs().front().getTerminator())
1276+
.getArguments()[0],
1277+
OS,
1278+
ctx);
1279+
}
1280+
if (topLevelAnd)
1281+
OS << ", ";
1282+
else
1283+
OS << " and ";
12271284
serializeExpression(
12281285
mlir::cast<mlir::rlc::Yield>(getRhs().front().getTerminator())
12291286
.getArguments()[0],
@@ -1341,6 +1398,7 @@ void mlir::rlc::ActionFunction::serialize(
13411398
mlir::cast<mlir::rlc::Yield>(getPrecondition().front().back());
13421399
if (not terminator.getArguments().empty())
13431400
{
1401+
auto _ = ctx.startEmittingPrecondition();
13441402
OS << " { ";
13451403

13461404
serializeExpression(terminator.getArguments()[0], OS, ctx);

lib/dialect/src/TypeCheck.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,37 @@ static mlir::LogicalResult checkReturnsPath(mlir::rlc::FunctionOp fun)
470470
return mlir::success();
471471
}
472472

473+
// enum field expressions are already moved to their proper location
474+
// when we type check, but we type check them again here
475+
// so that we can reserialize properly the file if we need to
476+
static mlir::LogicalResult deduceEnumFieldTypes(mlir::ModuleOp op)
477+
{
478+
mlir::rlc::ModuleBuilder builder(op);
479+
480+
mlir::IRRewriter rewriter(op.getContext());
481+
llvm::SmallVector<mlir::rlc::EnumDeclarationOp, 4> funs(
482+
op.getOps<mlir::rlc::EnumDeclarationOp>());
483+
484+
for (auto enumDecl : funs)
485+
{
486+
for (auto field : enumDecl.getOps<mlir::rlc::EnumFieldDeclarationOp>())
487+
{
488+
for (auto exp : field.getOps<mlir::rlc::EnumFieldExpressionOp>())
489+
{
490+
llvm::SmallVector<mlir::Operation*, 4> ops;
491+
for (auto& op : exp.getBody().front())
492+
ops.push_back(&op);
493+
for (auto& op : ops)
494+
{
495+
if (mlir::rlc::typeCheck(*op, builder).failed())
496+
return mlir::failure();
497+
}
498+
}
499+
}
500+
}
501+
return mlir::success();
502+
}
503+
473504
static mlir::LogicalResult deduceOperationTypes(mlir::ModuleOp op)
474505
{
475506
mlir::rlc::ModuleBuilder builder(op);
@@ -768,6 +799,12 @@ namespace mlir::rlc
768799
signalPassFailure();
769800
return;
770801
}
802+
803+
if (deduceEnumFieldTypes(getOperation()).failed())
804+
{
805+
signalPassFailure();
806+
return;
807+
}
771808
}
772809
};
773810
} // namespace mlir::rlc

lib/parser/src/Parser.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2129,8 +2129,10 @@ Expected<mlir::rlc::EnumFieldDeclarationOp> Parser::enumFieldDeclaration()
21292129

21302130
EXPECT(Token::Equal, onExit());
21312131
TRY(exp, expression(), onExit());
2132+
current->setLoc((*exp).getLoc());
21322133

2133-
builder.create<mlir::rlc::Yield>(loc, mlir::ValueRange({ *exp }));
2134+
builder.create<mlir::rlc::Yield>(
2135+
getLastTokenEndPos(), mlir::ValueRange({ *exp }));
21342136
EXPECT_EOL(onExit());
21352137
} while (not accept(Token::Deindent));
21362138

tool/rlc/test/DefaultInitializedOwningPtr.rl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
# CHECK-LABEL: define void @rl_m_init__Asd(ptr nocapture writeonly initializes((0, 8)) %0) local_unnamed_addr
44
# CHECK: store ptr null, ptr %0, align 8
55
cls Asd:
6-
OwningPtr<Int> a
6+
OwningPtr<Int> a
77

88
fun main() -> Int:
9-
return 0
9+
return 0
10+

tool/rlc/test/GlobalConstant.rl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
const global = 3
55

66
fun main() -> Int:
7-
let x : Int[global]
8-
if global == 3:
9-
return 0
10-
else:
11-
return -1
7+
let x : Int[global]
8+
if global == 3:
9+
return 0
10+
else:
11+
return -1
12+

tool/rlc/test/OneSubAction.rl

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,25 @@
22
# RUN: %t%exeext
33

44
act to_run() -> ToRun:
5-
frm to_ret : Int
6-
act dead_store(Int val)
7-
to_ret = val
8-
act to_call(Int val2)
9-
to_ret = val2
10-
act final(Int val3)
11-
to_ret = val3
5+
frm to_ret : Int
6+
act dead_store(Int val)
7+
to_ret = val
8+
act to_call(Int val2)
9+
to_ret = val2
10+
act final(Int val3)
11+
to_ret = val3
1212

1313
fun frame_creator() -> ToRun:
14-
let frame = to_run()
15-
frame.dead_store(1)
16-
return frame
14+
let frame = to_run()
15+
frame.dead_store(1)
16+
return frame
1717

1818
act outer() -> Outer:
19-
subaction frame = frame_creator()
20-
frame.final(10)
19+
subaction frame = frame_creator()
20+
frame.final(10)
2121

2222
fun main() -> Int:
23-
let frame = outer()
24-
frame.to_call(4)
25-
return frame.frame.to_ret - 10
23+
let frame = outer()
24+
frame.to_call(4)
25+
return frame.frame.to_ret - 10
26+

0 commit comments

Comments
 (0)