Skip to content

Commit 964ed69

Browse files
committed
types of functions are renamed too
1 parent be109fa commit 964ed69

File tree

5 files changed

+176
-63
lines changed

5 files changed

+176
-63
lines changed

lib/dialect/src/Dialect.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ class TypeAliasASMInterface: public mlir::OpAsmDialectInterface
3636
OS << "fun_info";
3737
return AliasResult::FinalAlias;
3838
}
39+
if (auto casted = type.dyn_cast<mlir::rlc::ClassFieldAttr>())
40+
{
41+
OS << "field_info";
42+
return AliasResult::FinalAlias;
43+
}
3944

4045
return AliasResult::NoAlias;
4146
}

lib/dialect/src/Operations.cpp

Lines changed: 121 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -819,15 +819,16 @@ mlir::LogicalResult mlir::rlc::SubActionStatement::typeCheck(
819819

820820
llvm::SmallVector<mlir::Type, 4> resultTypes;
821821
llvm::SmallVector<mlir::Location, 4> resultLoc;
822-
llvm::SmallVector<llvm::StringRef> nameAttrs;
822+
llvm::SmallVector<mlir::rlc::FunctionArgumentAttr> nameAttrs;
823823

824824
for (auto arg : llvm::zip(parent.getArgumentTypes(), parent.getArgNames()))
825825
{
826826
auto type = std::get<0>(arg);
827827
if (type.isa<mlir::rlc::ContextType>())
828828
{
829829
resultTypes.push_back(type);
830-
nameAttrs.push_back(std::get<1>(arg));
830+
nameAttrs.push_back(mlir::rlc::FunctionArgumentAttr::get(
831+
type.getContext(), std::get<1>(arg), nullptr, type, nullptr));
831832
resultLoc.push_back(parent.getLoc());
832833
}
833834
}
@@ -853,17 +854,18 @@ mlir::LogicalResult mlir::rlc::SubActionStatement::typeCheck(
853854
resultLoc.push_back(actions.getLoc());
854855
}
855856

856-
for (auto name :
857-
llvm::drop_begin(referred.getDeclaredNames(), forwardedArgsCount()))
857+
for (auto arg :
858+
llvm::drop_begin(referred.getInfo().getArgs(), forwardedArgsCount()))
858859
{
859-
nameAttrs.push_back(name);
860+
nameAttrs.push_back(arg);
860861
}
861862

862863
auto fixed = rewiter.create<mlir::rlc::ActionStatement>(
863864
referred.getLoc(),
864865
resultTypes,
865866
referred.getName(),
866-
mlir::rlc::FunctionInfoAttr::get(referred.getContext(), nameAttrs),
867+
mlir::rlc::FunctionInfoAttr::get(
868+
referred.getContext(), nameAttrs, nullptr, nullptr),
867869
referred.getId(),
868870
referred.getResumptionPoint());
869871

@@ -1635,7 +1637,7 @@ mlir::LogicalResult mlir::rlc::ActionStatement::typeCheck(
16351637
rewriter.restoreInsertionPoint(point);
16361638

16371639
llvm::SmallVector<mlir::Type, 4> newResultTypes;
1638-
llvm::SmallVector<llvm::StringRef, 4> newArgNames;
1640+
llvm::SmallVector<mlir::rlc::FunctionArgumentAttr, 4> newArgNames;
16391641
unsigned contextArgCounts = 0;
16401642
for (auto arg : llvm::zip(parent.getArgumentTypes(), parent.getArgNames()))
16411643
{
@@ -1645,7 +1647,8 @@ mlir::LogicalResult mlir::rlc::ActionStatement::typeCheck(
16451647
getPrecondition().front().insertArgument(
16461648
contextArgCounts++, type, getLoc());
16471649
newResultTypes.push_back(type);
1648-
newArgNames.push_back(std::get<1>(arg));
1650+
newArgNames.push_back(mlir::rlc::FunctionArgumentAttr::get(
1651+
type.getContext(), std::get<1>(arg), nullptr, type, nullptr));
16491652
}
16501653
}
16511654

@@ -1670,14 +1673,15 @@ mlir::LogicalResult mlir::rlc::ActionStatement::typeCheck(
16701673
for (auto result : getResults())
16711674
newResultTypes.push_back(result.getType());
16721675

1673-
for (auto name : getDeclaredNames())
1674-
newArgNames.push_back(name);
1676+
for (auto arg : getInfo().getArgs())
1677+
newArgNames.push_back(arg);
16751678

16761679
auto newDecl = builder.getRewriter().create<mlir::rlc::ActionStatement>(
16771680
getLoc(),
16781681
newResultTypes,
16791682
getName(),
1680-
mlir::rlc::FunctionInfoAttr::get(getContext(), newArgNames));
1683+
mlir::rlc::FunctionInfoAttr::get(
1684+
getContext(), newArgNames, nullptr, nullptr));
16811685

16821686
newDecl.getPrecondition().takeBody(getPrecondition());
16831687

@@ -1812,6 +1816,112 @@ mlir::LogicalResult mlir::rlc::FromByteArrayOp::typeCheck(
18121816
"are supported");
18131817
}
18141818

1819+
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2>
1820+
mlir::rlc::ActionFunction::getTypeSourceRange()
1821+
{
1822+
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2> toReturn;
1823+
1824+
if (getInfo().getReturnTypeLocation() != nullptr)
1825+
toReturn.push_back(getInfo().getReturnTypeLocation());
1826+
1827+
for (auto parameter : getInfo().getArgs())
1828+
if (parameter.getTypeLocation() != nullptr)
1829+
toReturn.push_back(parameter.getTypeLocation());
1830+
return toReturn;
1831+
}
1832+
1833+
llvm::SmallVector<mlir::Type, 2> mlir::rlc::ActionFunction::getExplicitType()
1834+
{
1835+
llvm::SmallVector<mlir::Type, 2> toReturn;
1836+
1837+
if (getInfo().getReturnTypeLocation() != nullptr)
1838+
toReturn.push_back(getMainActionType());
1839+
1840+
size_t i = 0;
1841+
for (auto parameter : getInfo().getArgs())
1842+
if (parameter.getTypeLocation() != nullptr)
1843+
toReturn.push_back(getArgumentTypes()[i++]);
1844+
return toReturn;
1845+
}
1846+
1847+
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2>
1848+
mlir::rlc::ActionStatement::getTypeSourceRange()
1849+
{
1850+
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2> toReturn;
1851+
1852+
for (auto parameter : getInfo().getArgs())
1853+
if (parameter.getTypeLocation() != nullptr)
1854+
toReturn.push_back(parameter.getTypeLocation());
1855+
return toReturn;
1856+
}
1857+
1858+
llvm::SmallVector<mlir::Type, 2> mlir::rlc::ActionStatement::getExplicitType()
1859+
{
1860+
llvm::SmallVector<mlir::Type, 2> toReturn;
1861+
1862+
int64_t i = 0;
1863+
for (auto parameter : getInfo().getArgs())
1864+
if (parameter.getTypeLocation() != nullptr)
1865+
toReturn.push_back(getResultTypes()[i++]);
1866+
return toReturn;
1867+
}
1868+
1869+
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2>
1870+
mlir::rlc::FlatFunctionOp::getTypeSourceRange()
1871+
{
1872+
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2> toReturn;
1873+
1874+
if (getInfo().getReturnTypeLocation() != nullptr)
1875+
toReturn.push_back(getInfo().getReturnTypeLocation());
1876+
1877+
for (auto parameter : getInfo().getArgs())
1878+
if (parameter.getTypeLocation() != nullptr)
1879+
toReturn.push_back(parameter.getTypeLocation());
1880+
return toReturn;
1881+
}
1882+
1883+
llvm::SmallVector<mlir::Type, 2> mlir::rlc::FlatFunctionOp::getExplicitType()
1884+
{
1885+
llvm::SmallVector<mlir::Type, 2> toReturn;
1886+
1887+
if (getInfo().getReturnTypeLocation() != nullptr)
1888+
toReturn.push_back(getResultTypes()[0]);
1889+
1890+
size_t i = 0;
1891+
for (auto parameter : getInfo().getArgs())
1892+
if (parameter.getTypeLocation() != nullptr)
1893+
toReturn.push_back(getArgumentTypes()[i++]);
1894+
return toReturn;
1895+
}
1896+
1897+
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2>
1898+
mlir::rlc::FunctionOp::getTypeSourceRange()
1899+
{
1900+
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2> toReturn;
1901+
1902+
if (getInfo().getReturnTypeLocation() != nullptr)
1903+
toReturn.push_back(getInfo().getReturnTypeLocation());
1904+
1905+
for (auto parameter : getInfo().getArgs())
1906+
if (parameter.getTypeLocation() != nullptr)
1907+
toReturn.push_back(parameter.getTypeLocation());
1908+
return toReturn;
1909+
}
1910+
1911+
llvm::SmallVector<mlir::Type, 2> mlir::rlc::FunctionOp::getExplicitType()
1912+
{
1913+
llvm::SmallVector<mlir::Type, 2> toReturn;
1914+
1915+
if (getInfo().getReturnTypeLocation() != nullptr)
1916+
toReturn.push_back(getResultTypes()[0]);
1917+
1918+
size_t i = 0;
1919+
for (auto parameter : getInfo().getArgs())
1920+
if (parameter.getTypeLocation() != nullptr)
1921+
toReturn.push_back(getArgumentTypes()[i++]);
1922+
return toReturn;
1923+
}
1924+
18151925
llvm::SmallVector<mlir::rlc::SourceRangeAttr, 2>
18161926
mlir::rlc::IsOp::getTypeSourceRange()
18171927
{

lib/dialect/src/Operations.td

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@ def RLC_DeclarationStatement : RLC_Dialect<"decl", [DeclareOpInterfaceMethods<Ty
737737

738738

739739
class RLC_FunctionBase<string mnemonic> :
740-
RLC_Dialect<mnemonic, [CallableOpInterface, AutomaticAllocationScope, TypeCheckable]> {
740+
RLC_Dialect<mnemonic, [CallableOpInterface, AutomaticAllocationScope, TypeCheckable, DeclareOpInterfaceMethods<TypeUser> ]> {
741741

742742
let arguments = (ins StrAttr:$unmangled_name, RLC_FunctionInfoAttr:$info);
743743
let description = [{
@@ -868,6 +868,7 @@ RLC_Dialect<mnemonic, [CallableOpInterface, AutomaticAllocationScope, TypeChecka
868868
return getBody().front().args_end();
869869
}
870870

871+
871872
}];
872873
}
873874

@@ -1079,7 +1080,7 @@ def RLC_CallOp : RLC_Dialect<"call",
10791080
}
10801081

10811082

1082-
def RLC_ActionStatement : RLC_Dialect<"action", [DeclareOpInterfaceMethods<TypeCheckable>, DeclareOpInterfaceMethods<RegionBranchOpInterface, ["getRegionInvocationBounds"]>]> {
1083+
def RLC_ActionStatement : RLC_Dialect<"action", [DeclareOpInterfaceMethods<TypeCheckable>, DeclareOpInterfaceMethods<RegionBranchOpInterface, ["getRegionInvocationBounds"]>, DeclareOpInterfaceMethods<TypeUser>]> {
10831084
let summary = "statement list.";
10841085

10851086
let arguments = (ins StrAttr:$name, RLC_FunctionInfoAttr:$info, I64Attr:$id, I64Attr:$resumption_point);

lib/parser/include/rlc/parser/Parser.hpp

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,6 @@ namespace rlc
2828
class Parser
2929
{
3030
public:
31-
struct FunctionDeclarationResult
32-
{
33-
mlir::rlc::FunctionOp op;
34-
llvm::SmallVector<mlir::Location> argLocs;
35-
};
36-
3731
Parser(
3832
mlir::MLIRContext* ctx,
3933
std::string source,
@@ -103,9 +97,9 @@ namespace rlc
10397
llvm::Expected<mlir::rlc::ContinueStatement> continueStatement();
10498
llvm::Expected<mlir::rlc::SubActionStatement> subActionStatement();
10599

106-
llvm::Expected<llvm::SmallVector<std::tuple<std::string, mlir::Type>, 3>>
100+
llvm::Expected<llvm::SmallVector<mlir::rlc::FunctionArgumentAttr, 3>>
107101
functionArguments();
108-
llvm::Expected<std::tuple<std::string, mlir::Type>> argDeclaration();
102+
llvm::Expected<mlir::rlc::FunctionArgumentAttr> argDeclaration();
109103

110104
llvm::Expected<std::pair<mlir::Type, mlir::rlc::SourceRangeAttr>>
111105
singleTypeUse();
@@ -116,9 +110,9 @@ namespace rlc
116110
llvm::Expected<
117111
llvm::SmallVector<mlir::rlc::UncheckedTemplateParameterType, 2>>
118112
templateArguments();
119-
llvm::Expected<FunctionDeclarationResult> functionDeclaration(
113+
llvm::Expected<mlir::rlc::FunctionOp> functionDeclaration(
120114
bool templateFunction = true, bool isMemberFunction = false);
121-
llvm::Expected<FunctionDeclarationResult> externFunctionDeclaration();
115+
llvm::Expected<mlir::rlc::FunctionOp> externFunctionDeclaration();
122116
llvm::Expected<mlir::Operation*> actionDeclaration(bool actionFunction);
123117
llvm::Expected<mlir::rlc::ActionFunction> actionDefinition();
124118
llvm::Expected<mlir::rlc::UncheckedTraitDefinition> traitDefinition();

0 commit comments

Comments
 (0)