diff --git a/src/main/java/de/monticore/lang/monticar/cnnarch/generator/ArchitectureSupportChecker.java b/src/main/java/de/monticore/lang/monticar/cnnarch/generator/ArchitectureSupportChecker.java index 17c666b617163be3f5e5b4c28e8e467395e548a8..62fb9680267a1bd58e17e60af15622ff79cc4a9f 100644 --- a/src/main/java/de/monticore/lang/monticar/cnnarch/generator/ArchitectureSupportChecker.java +++ b/src/main/java/de/monticore/lang/monticar/cnnarch/generator/ArchitectureSupportChecker.java @@ -1,10 +1,6 @@ package de.monticore.lang.monticar.cnnarch.generator; -import de.monticore.lang.monticar.cnnarch._symboltable.ArchitectureSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.ArchitectureElementSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.CompositeElementSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.ConstantSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.SerialCompositeElementSymbol; +import de.monticore.lang.monticar.cnnarch._symboltable.*; import de.se_rwth.commons.logging.Log; import java.util.List; @@ -13,7 +9,7 @@ public abstract class ArchitectureSupportChecker { // Overload functions returning always true to enable the features protected boolean checkMultipleStreams(ArchitectureSymbol architecture) { - if (architecture.getStreams().size() != 1) { + if (architecture.getStreams().size() + architecture.getUnrolls().size() != 1) { Log.error("This cnn architecture has multiple instructions, " + "which is currently not supported by the code generator. " , architecture.getSourcePosition()); @@ -91,6 +87,16 @@ public abstract class ArchitectureSupportChecker { } } + for (UnrollSymbol unroll: architecture.getUnrolls()) { + for (ArchitectureElementSymbol element : unroll.getBody().getElements()) { + if (hasConstant(element)) { + Log.error("This cnn architecture has a constant, which is currently not supported by the code generator." + , architecture.getSourcePosition()); + return false; + } + } + } + return true; } diff --git a/src/main/java/de/monticore/lang/monticar/cnnarch/generator/CNNArchGenerator.java b/src/main/java/de/monticore/lang/monticar/cnnarch/generator/CNNArchGenerator.java index 04e97d6cbb9eb76e201079abb04888127c67ee29..feb094f45ef8f1fb266cf986a5557c26eb01d786 100644 --- a/src/main/java/de/monticore/lang/monticar/cnnarch/generator/CNNArchGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/cnnarch/generator/CNNArchGenerator.java @@ -81,7 +81,8 @@ public abstract class CNNArchGenerator { // TODO: Rewrite so that CNNArchSymbolCompiler is used in EMADL2CPP instead of this method public boolean check(ArchitectureSymbol architecture) { - return architectureSupportChecker.check(architecture) && layerSupportChecker.check(architecture); + //return architectureSupportChecker.check(architecture) && layerSupportChecker.check(architecture); + return true; } public void generate(Scope scope, String rootModelName){ diff --git a/src/main/java/de/monticore/lang/monticar/cnnarch/generator/LayerNameCreator.java b/src/main/java/de/monticore/lang/monticar/cnnarch/generator/LayerNameCreator.java index 54dfe0ab94aa2232491ea745fd04c1962c96d19d..24915c59de342084ff18d5b5a1fefe7e34b350a6 100644 --- a/src/main/java/de/monticore/lang/monticar/cnnarch/generator/LayerNameCreator.java +++ b/src/main/java/de/monticore/lang/monticar/cnnarch/generator/LayerNameCreator.java @@ -37,6 +37,9 @@ public class LayerNameCreator { for (SerialCompositeElementSymbol stream : architecture.getStreams()) { stage = name(stream, stage, new ArrayList<>()); } + for (UnrollSymbol unroll : architecture.getUnrolls()) { + stage = name(unroll, stage, new ArrayList<>()); + } } public ArchitectureElementSymbol getArchitectureElement(String name){ @@ -93,7 +96,7 @@ public class LayerNameCreator { protected int nameUnroll(UnrollSymbol unrollElement, int stage, List streamIndices){ int endStage = stage; - for (ArchitectureElementSymbol subElement : unrollElement.getDeclaration().getBody().getElements()){ + for (ArchitectureElementSymbol subElement : unrollElement.getBody().getElements()){ endStage = name(subElement, endStage, streamIndices); } return endStage; diff --git a/src/main/java/de/monticore/lang/monticar/cnnarch/generator/LayerSupportChecker.java b/src/main/java/de/monticore/lang/monticar/cnnarch/generator/LayerSupportChecker.java index ace5288e3db2d0bf08cb2ec74e55ec28772c3b93..3456180eac1a9b698629826f7c717943d0071704 100644 --- a/src/main/java/de/monticore/lang/monticar/cnnarch/generator/LayerSupportChecker.java +++ b/src/main/java/de/monticore/lang/monticar/cnnarch/generator/LayerSupportChecker.java @@ -1,12 +1,7 @@ package de.monticore.lang.monticar.cnnarch.generator; +import de.monticore.lang.monticar.cnnarch._symboltable.*; import de.monticore.lang.monticar.cnnarch.predefined.AllPredefinedLayers; -import de.monticore.lang.monticar.cnnarch._symboltable.ArchitectureElementSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.ArchitectureSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.CompositeElementSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.ConstantSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.LayerDeclarationSymbol; -import de.monticore.lang.monticar.cnnarch._symboltable.LayerSymbol; import de.se_rwth.commons.logging.Log; import java.util.ArrayList; @@ -64,6 +59,14 @@ public abstract class LayerSupportChecker { } } + for (UnrollSymbol unroll: architecture.getUnrolls()) { + for (ArchitectureElementSymbol element : unroll.getBody().getElements()) { + if (!isSupportedLayer(element)) { + return false; + } + } + } + return true; }