Skip to content

Commit

Permalink
Made things even more consistent.
Browse files Browse the repository at this point in the history
  • Loading branch information
azreika committed Nov 18, 2020
1 parent a6d501e commit f21fa4e
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 19 deletions.
27 changes: 10 additions & 17 deletions src/ast2ram/AstToRamTranslator.cpp
Expand Up @@ -337,7 +337,7 @@ Own<ast::Clause> AstToRamTranslator::createDeltaClause(
return recursiveVersion;
}

VecOwn<ram::Statement> AstToRamTranslator::translateRecursiveClauses(
Own<ram::Statement> AstToRamTranslator::translateRecursiveClauses(
const std::set<const ast::Relation*>& scc, const ast::Relation* rel) const {
assert(contains(scc, rel) && "relation should belong to scc");
VecOwn<ram::Statement> result;
Expand Down Expand Up @@ -413,7 +413,7 @@ VecOwn<ram::Statement> AstToRamTranslator::translateRecursiveClauses(
}
}

return result;
return mk<ram::Sequence>(std::move(result));
}

Own<ram::Statement> AstToRamTranslator::generateStratumPreamble(
Expand Down Expand Up @@ -466,32 +466,25 @@ Own<ram::Statement> AstToRamTranslator::generateStratumTableUpdates(
return mk<ram::Sequence>(std::move(updateTable));
}

Own<ram::Statement> AstToRamTranslator::generateStratumMainLoop(
Own<ram::Statement> AstToRamTranslator::generateStratumLoopBody(
const std::set<const ast::Relation*>& scc) const {
VecOwn<ram::Statement> loopSeq;
VecOwn<ram::Statement> loopBody;
for (const ast::Relation* rel : scc) {
auto loopRelSeq = translateRecursiveClauses(scc, rel);

// if there were no rules, continue
if (loopRelSeq.empty()) {
continue;
}
auto relClauses = translateRecursiveClauses(scc, rel);

// add profiling information
if (Global::config().has("profile")) {
const std::string& relationName = toString(rel->getQualifiedName());
const auto& srcLocation = rel->getSrcLoc();
const std::string logTimerStatement = LogStatement::tRecursiveRelation(relationName, srcLocation);
const std::string logSizeStatement = LogStatement::nRecursiveRelation(relationName, srcLocation);
auto newStmt = mk<ram::LogRelationTimer>(mk<ram::Sequence>(std::move(loopRelSeq)),
relClauses = mk<ram::LogRelationTimer>(mk<ram::Sequence>(std::move(relClauses)),
logTimerStatement, getNewRelationName(rel->getQualifiedName()));
loopRelSeq.clear();
appendStmt(loopRelSeq, std::move(newStmt));
}

appendStmt(loopSeq, mk<ram::Sequence>(std::move(loopRelSeq)));
appendStmt(loopBody, mk<ram::Sequence>(std::move(relClauses)));
}
return mk<ram::Sequence>(std::move(loopSeq));
return mk<ram::Sequence>(std::move(loopBody));
}

Own<ram::Statement> AstToRamTranslator::generateStratumExitSequence(
Expand Down Expand Up @@ -533,11 +526,11 @@ Own<ram::Statement> AstToRamTranslator::translateRecursiveRelation(
appendStmt(result, generateStratumPreamble(scc));

// Add in the main fixpoint loop
auto innerLoop = mk<ram::Parallel>(generateStratumMainLoop(scc));
auto loopBody = mk<ram::Parallel>(generateStratumLoopBody(scc));
auto exitSequence = generateStratumExitSequence(scc);
auto updateSequence = generateStratumTableUpdates(scc);
auto fixpointLoop = mk<ram::Loop>(
mk<ram::Sequence>(std::move(innerLoop), std::move(exitSequence), std::move(updateSequence)));
mk<ram::Sequence>(std::move(loopBody), std::move(exitSequence), std::move(updateSequence)));
appendStmt(result, std::move(fixpointLoop));

// Add in the postamble
Expand Down
4 changes: 2 additions & 2 deletions src/ast2ram/AstToRamTranslator.h
Expand Up @@ -150,14 +150,14 @@ class AstToRamTranslator {
Own<ram::Statement> generateMergeRelations(
const ast::Relation* rel, const std::string& destRelation, const std::string& srcRelation) const;

VecOwn<ram::Statement> translateRecursiveClauses(
Own<ram::Statement> translateRecursiveClauses(
const std::set<const ast::Relation*>& scc, const ast::Relation* rel) const;

/** Stratum translation */
Own<ram::Statement> generateStratumPreamble(const std::set<const ast::Relation*>& scc) const;
Own<ram::Statement> generateStratumPostamble(const std::set<const ast::Relation*>& scc) const;
Own<ram::Statement> generateStratumTableUpdates(const std::set<const ast::Relation*>& scc) const;
Own<ram::Statement> generateStratumMainLoop(const std::set<const ast::Relation*>& scc) const;
Own<ram::Statement> generateStratumLoopBody(const std::set<const ast::Relation*>& scc) const;
Own<ram::Statement> generateStratumExitSequence(const std::set<const ast::Relation*>& scc) const;

Own<ram::Statement> generateStoreRelation(const ast::Relation* relation) const;
Expand Down

0 comments on commit f21fa4e

Please sign in to comment.