From b747f81211782277fb66985146d1c40bb27c69e9 Mon Sep 17 00:00:00 2001 From: Francis Russell Date: Fri, 30 Mar 2012 10:47:46 +0100 Subject: [PATCH] Replace array ranges with iteration symbols. --- src/ofc/codegen/ArrayRange.scala | 9 --------- src/ofc/codegen/ScopeStatement.scala | 6 ++++++ src/ofc/codegen/Symbol.scala | 2 +- src/ofc/generators/onetep/PPDFunctionSet.scala | 14 ++++++++------ 4 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 src/ofc/codegen/ArrayRange.scala create mode 100644 src/ofc/codegen/ScopeStatement.scala diff --git a/src/ofc/codegen/ArrayRange.scala b/src/ofc/codegen/ArrayRange.scala deleted file mode 100644 index 070e394..0000000 --- a/src/ofc/codegen/ArrayRange.scala +++ /dev/null @@ -1,9 +0,0 @@ -package ofc.codegen - -class ArrayRange private(name: String, count: Expression, statements: List[Statement]) extends Statement { - val index = UniqueUnboundVarSymbol(name) - - def getIndex = index - def this(name: String, start: Expression, count: Expression) = this(name, start, count, List.empty) - def +(stat: Statement) = new ArrayRange(name, start, count, statements :+ stat) -} diff --git a/src/ofc/codegen/ScopeStatement.scala b/src/ofc/codegen/ScopeStatement.scala new file mode 100644 index 0000000..22cbf32 --- /dev/null +++ b/src/ofc/codegen/ScopeStatement.scala @@ -0,0 +1,6 @@ +package ofc.codegen + +class ScopeStatement(var statements: List[Statement]) extends Statement { + def this() = this(List.empty) + def +=(stat: Statement) = statements += stat +} diff --git a/src/ofc/codegen/Symbol.scala b/src/ofc/codegen/Symbol.scala index af5fedb..b55caac 100644 --- a/src/ofc/codegen/Symbol.scala +++ b/src/ofc/codegen/Symbol.scala @@ -19,4 +19,4 @@ object VarSymbol { case class DeclaredVarSymbol(name: String) extends VarSymbol(name) abstract class UnboundVarSymbol(name: String) extends VarSymbol(name) case class NamedUnboundVarSymbol(name: String) extends UnboundVarSymbol(name) -case class UniqueUnboundVarSymbol(name: String) extends UnboundVarSymbol(name) +class IterationSymbol(name: String, count: Expression) extends UnboundVarSymbol(name) diff --git a/src/ofc/generators/onetep/PPDFunctionSet.scala b/src/ofc/generators/onetep/PPDFunctionSet.scala index 7d90eba..175bf85 100644 --- a/src/ofc/generators/onetep/PPDFunctionSet.scala +++ b/src/ofc/generators/onetep/PPDFunctionSet.scala @@ -4,14 +4,16 @@ import ofc.codegen._ class PPDFunctionSet(val basisName: String, dataName: String) extends FunctionSet { val basis = NamedUnboundVarSymbol(basisName) val data = NamedUnboundVarSymbol(dataName) + val pubCell = NamedUnboundVarSymbol("pub_cell") + val numSpheres = basis % FieldSymbol("num"); + val ppdWidths = for(dim <- 1 to 3) yield pubCell % FieldSymbol("n_ppds_a"+dim) def getReader = { - var sphereLoop = new ArrayRange("sphere_index", 1, numSpheres) - val sphereIndex = sphereLoop.getIndex - - var numPPDs = (basis % FieldSymbol("n_ppds_sphere"))(sphereIndex) - var ppdLoop = new ArrayRange("ppd_index", 1, numPPDs) + var sphereIndex = new IterationSymbol("sphere_index", numSpheres) + val numPPDs = (basis % FieldSymbol("n_ppds_sphere"))(sphereIndex) + val ppdIndex = new IterationSymbol("ppd_index", numPPDs) + val ppdRanges = for(dim <- 1 to 3) yield new IterationSymbol("point"+dim, ppdWidths(dim)) new IterationTemplate(sphereLoop) } @@ -31,7 +33,7 @@ class PPDFunctionSet(val basisName: String, dataName: String) extends FunctionSe def generateIterationFooter(names: NameManager) = "end do" def getDeclarations(names: NameManager) = List("integer :: "+names(this)) } - +   class PPDIndex(parent: PPDFunctionSet) extends DiscreteIndex { var denseIndexNames : List[String] = Nil var startNames : List[String] = Nil -- 2.47.3