ng_extparam: split up work and do per-comp reduce

This change breaks extparam processing up into:

 - propagateExtendedParams: propagates min_length, min_offset and
   max_offset into the reports on the graph
 - reduceExtendedParams: runs graph reductions based on extparams

Then, we apply the reduce pass to the whole graph, and later as well to
each component after calc_components.
This commit is contained in:
Justin Viiret
2017-03-23 14:10:14 +11:00
committed by Matthew Barr
parent 0a163b5535
commit a871f70c25
6 changed files with 435 additions and 214 deletions

View File

@@ -34,15 +34,30 @@
#ifndef NG_EXTPARAM_H
#define NG_EXTPARAM_H
#include "som/som.h"
namespace ue2 {
struct CompileContext;
class ExpressionInfo;
class NGHolder;
class ReportManager;
void handleExtendedParams(ReportManager &rm, NGHolder &g, ExpressionInfo &expr,
const CompileContext &cc);
/**
* \brief Propagate extended parameter information to vertex reports. Will
* throw CompileError if this expression's extended parameters are not
* satisfiable.
*
* This will also remove extended parameter constraints that are guaranteed to
* be satisfied from ExpressionInfo.
*/
void propagateExtendedParams(NGHolder &g, ExpressionInfo &expr,
ReportManager &rm);
/**
* \brief Perform graph reductions (if possible) to do with extended parameter
* constraints on reports.
*/
void reduceExtendedParams(NGHolder &g, ReportManager &rm, som_type som);
} // namespace ue2