Skip to content

Commit

Permalink
Updated translator to create SIPS more naturally.
Browse files Browse the repository at this point in the history
  • Loading branch information
Abdul Zreika committed Sep 21, 2020
1 parent 3daa8e2 commit 8a5d614
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 17 deletions.
19 changes: 9 additions & 10 deletions src/ast2ram/AstToRamTranslator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -412,9 +412,8 @@ Own<ast::Clause> AstToRamTranslator::ClauseTranslator::getReorderedClause(
// check whether there is an imposed order constraint
if (plan == nullptr) {
// no plan, so reorder it according to the internal heuristic
auto sips = getSipsFunction();
if (auto* reorderedClause =
ast::transform::ReorderLiteralsTransformer::reorderClauseWithSips(*sips, &clause)) {
if (auto* reorderedClause = ast::transform::ReorderLiteralsTransformer::reorderClauseWithSips(
*translator.sips, &clause)) {
return Own<ast::Clause>(reorderedClause);
}
return nullptr;
Expand Down Expand Up @@ -444,10 +443,6 @@ Own<ast::Clause> AstToRamTranslator::ClauseTranslator::getReorderedClause(
return reorderedClause;
}

std::unique_ptr<ast::SipsMetric> AstToRamTranslator::ClauseTranslator::getSipsFunction() const {
return std::make_unique<ast::DeltaInputSips>(*translator.relDetail, *translator.ioType);
}

AstToRamTranslator::ClauseTranslator::arg_list* AstToRamTranslator::ClauseTranslator::getArgList(
const ast::Node* curNode, std::map<const ast::Node*, Own<arg_list>>& nodeArgs) const {
if (nodeArgs.count(curNode) == 0u) {
Expand Down Expand Up @@ -1496,9 +1491,6 @@ void AstToRamTranslator::translateProgram(const ast::TranslationUnit& translatio
// obtain IO Type of relations
ioType = translationUnit.getAnalysis<ast::analysis::IOTypeAnalysis>();

// obtain relation details from analysis
relDetail = translationUnit.getAnalysis<ast::analysis::RelationDetailCacheAnalysis>();

// obtain type environment from analysis
typeEnv = &translationUnit.getAnalysis<ast::analysis::TypeEnvironmentAnalysis>()->getTypeEnvironment();

Expand All @@ -1518,6 +1510,13 @@ void AstToRamTranslator::translateProgram(const ast::TranslationUnit& translatio
// get auxiliary arity analysis
auxArityAnalysis = translationUnit.getAnalysis<ast::analysis::AuxiliaryArityAnalysis>();

// determine the sips to use
std::string sipsChosen = "all-bound";
if (Global::config().has("RamSIPS")) {
sipsChosen = Global::config().get("RamSIPS");
}
sips = ast::SipsMetric::create(sipsChosen, translationUnit);

// handle the case of an empty SCC graph
if (sccGraph.getNumberOfSCCs() == 0) return;

Expand Down
10 changes: 3 additions & 7 deletions src/ast2ram/AstToRamTranslator.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
#include "ast/Variable.h"
#include "ast/analysis/AuxArity.h"
#include "ast/analysis/IOType.h"
#include "ast/analysis/RelationDetailCache.h"
#include "ast/analysis/RecursiveClauses.h"
#include "ast/analysis/TypeSystem.h"
#include "ast/utility/SipsMetric.h"
Expand Down Expand Up @@ -82,9 +81,6 @@ class AstToRamTranslator {
/** IO Type */
const ast::analysis::IOTypeAnalysis* ioType = nullptr;

/** Relation Detail */
const ast::analysis::RelationDetailCacheAnalysis* relDetail = nullptr;

/** RAM program */
Own<ram::Statement> ramMain;

Expand All @@ -100,6 +96,9 @@ class AstToRamTranslator {
/** Auxiliary Arity Analysis */
const ast::analysis::AuxiliaryArityAnalysis* auxArityAnalysis = nullptr;

/** SIPS metric for reordering */
Own<ast::SipsMetric> sips;

/**
* Concrete attribute
*/
Expand Down Expand Up @@ -346,9 +345,6 @@ class AstToRamTranslator {

Own<ast::Clause> getReorderedClause(const ast::Clause& clause, const int version) const;

// get the appropraite sips function
std::unique_ptr<ast::SipsMetric> getSipsFunction() const;

arg_list* getArgList(
const ast::Node* curNode, std::map<const ast::Node*, Own<arg_list>>& nodeArgs) const;

Expand Down

0 comments on commit 8a5d614

Please sign in to comment.