Changeset 3797


Ignore:
Timestamp:
Apr 5, 2014, 6:38:01 PM (4 years ago)
Author:
ksherdy
Message:

Fixed basic code generation for graph body.

Location:
proto/s2k/trunk/framework
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • proto/s2k/trunk/framework/input/grammar/scatter/b2k.scatter

    r3788 r3797  
    140140       
    141141    addKernelStmts              ->  addKernelStmt * ;   
    142     addKernelStmt               ->  kernelVarName kernelArgList ;
    143     kernelVarName               #-> identifier ;
    144     kernelArgList               ->  (kernelArgName (COMMA kernelArgName) *) ? ;
    145     kernelArgName               #-> identifier ; 
     142    addKernelStmt               ->  addKernelVarName addKernelArgList ;
     143    addKernelVarName            #-> identifier ;
     144    addKernelArgList            ->  (addKernelArgName (COMMA addKernelArgName) *) ? ;
     145    addKernelArgName            #-> identifier ; 
    146146
    147147    //
  • proto/s2k/trunk/framework/input/grammar/scatter/s2k.scatter

    r3788 r3797  
    159159   
    160160    addFilterStmts              ->  addFilterStmt * ;
    161     addFilterStmt                   ->  filterVarName LROUND filterArgList RROUND TERMINATOR ;
    162     filterVarName               #-> identifier ;
    163     filterArgList               ->  (filterArgName (COMMA filterArgName) *) ? ;
    164     filterArgName               #-> identifier ; 
     161    addFilterStmt                   ->  addFilterVarName LROUND addFilterArgList RROUND TERMINATOR ;
     162    addFilterVarName            #-> identifier ;
     163    addFilterArgList            ->  (addFilterArgName (COMMA addFilterArgName) *) ? ;
     164    addFilterArgName            #-> identifier ; 
    165165
    166166    //
  • proto/s2k/trunk/framework/input/templates/cpplang/grep.template

    r3796 r3797  
    212212            byte_data = &buffer[block_index * BLOCK_SIZE];
    213213
    214 //Compiled to 'do_block()' calls.
     214// S2K Generated 'do_block()' calls.
    215215###@kernel_do_block ###
    216216
     
    281281                  byte_data = &buffer[block_index * BLOCK_SIZE];
    282282
    283 // Compiler 'do_block()' calls.
     283// S2K Generated 'do_block()' calls.
    284284###@kernel_do_block ###
    285285
     
    303303            byte_data = &buffer[block_index * BLOCK_SIZE];
    304304
    305 // Compiler 'do_final_block()' calls.
     305// S2K Generated 'do_final_block()' calls.
    306306###@kernel_do_final_block ###
    307307
     
    375375        // loop_tail()
    376376
    377 // Compiler 'clear()' calls.
     377// S2K Generated 'clear()' calls.
    378378###@kernel_clear ###
    379379
  • proto/s2k/trunk/framework/src/application/generators/ContentsGenerator.java

    r3794 r3797  
    148148               
    149149                for(AddKernelStmtNode addKernelStmt : addKernelStmts) {
    150                         String doBlockStmt = codeGenerator.makeKernelDoBlockCallStmt(addKernelStmt);
    151                         codeBuffer.append(doBlockStmt);
     150                        codeBuffer.append(codeGenerator.makeKernelDoBlockCallStmt(addKernelStmt).toStringIndented(0));
    152151                }
    153152               
     
    164163               
    165164                for(AddKernelStmtNode addKernelStmt : addKernelStmts) {
    166                         String doFinalBlockStmt = codeGenerator.makeKernelDoFinalBlockCallStmt(addKernelStmt);
    167                         codeBuffer.append(doFinalBlockStmt);
     165                        codeBuffer.append(codeGenerator.makeKernelDoFinalBlockCallStmt(addKernelStmt).toStringIndented(0));
    168166                }
    169167               
     
    179177               
    180178                for(AddKernelStmtNode addKernelStmt : addKernelStmts) {
    181                         String doFinalBlockStmt = codeGenerator.makeKernelClearCallStmt(addKernelStmt);
    182                         codeBuffer.append(doFinalBlockStmt);
     179                        codeBuffer.append(codeGenerator.makeKernelClearCallStmt(addKernelStmt).toStringIndented(0));
    183180                }
    184181               
  • proto/s2k/trunk/framework/src/toolchain/b2k/ast/Accessors.java

    r3794 r3797  
    6565        }       
    6666
    67         public static ASTNode nameNode(GraphDefNode addKernelStmtNode) {
    68                 return addKernelStmtNode.child(0);
     67        public static ASTNode nameNode(GraphDefNode graphDefNode) {
     68                return graphDefNode.child(0);
    6969        }
    7070       
     
    7272            return ((node.child(1) instanceof GraphParameterListNode) && (node.child(1).nChildren() > 1));
    7373        }
    74        
     74               
    7575        public static KernelParameterListNode graphParameterListNode(GraphDefNode node) {   
    7676            return (KernelParameterListNode) node.child(1);
     77        }       
     78       
     79        public static boolean hasGraphParameterMode(GraphParameterNode node) {
     80                return (node.child(0) instanceof GraphParameterModeNode);
     81        }
     82       
     83        public static ASTNode typeNode(GraphParameterNode node) {
     84                return node.child(typeNodeIndex(node));
     85        }
     86       
     87        public static int typeNodeIndex(GraphParameterNode node) {
     88                if(!hasGraphParameterMode(node)) {
     89                        return 0;
     90                } else {
     91                        return 1;
     92                }
     93        }
     94
     95        public static ASTNode nameNode(GraphParameterNode node) {
     96                return node.child(nameNodeIndex(node));
     97        }       
     98
     99        public static int nameNodeIndex(GraphParameterNode node) {
     100                if(!hasGraphParameterMode(node)) {
     101                        return 1;
     102                } else {
     103                        return 2;
     104                }
    77105        }       
    78106       
     
    136164        }
    137165       
    138     public static List<ASTNode> addKernelStmtArgs(AddKernelStmtNode node) {
    139         return Accessors.addKernelStmtArgList(node).getChildren();
     166    public static List<ASTNode> addKernelStmtArgsAsList(AddKernelStmtNode node) {
     167        return (Accessors.addKernelStmtArgList(node)).getChildren();
    140168    }
    141169       
     
    336364    }
    337365   
    338     public static List<ASTNode> argsList(FuncCallNode node) {
     366    public static List<ASTNode> funcCallArgsAsList(FuncCallNode node) {
    339367        return Accessors.argsListNode(node).getChildren();
    340368    }
     
    397425        // ParameterNode
    398426        ////////////////////////////////////////////////////////////////////////////
     427        public static boolean hasKernelParameterMode(KernelParameterNode node) {
     428                return (node.child(0) instanceof KernelParameterModeNode);
     429        }
     430       
    399431        public static ASTNode typeNode(KernelParameterNode node) {
    400             return node.child(0);
     432                return node.child(typeNodeIndex(node));
     433        }
     434       
     435        public static int typeNodeIndex(KernelParameterNode node) {
     436                if(!hasKernelParameterMode(node)) {
     437                        return 0;
     438                } else {
     439                        return 1;
     440                }
    401441        }
    402442
    403443        public static ASTNode nameNode(KernelParameterNode node) {
    404             return node.child(1);
    405         }
     444                return node.child(nameNodeIndex(node));
     445        }       
     446
     447        public static int nameNodeIndex(KernelParameterNode node) {
     448                if(!hasKernelParameterMode(node)) {
     449                        return 1;
     450                } else {
     451                        return 2;
     452                }
     453        }       
     454
    406455
    407456//      public static Type declarationType(ParameterNode node) {
     
    554603        return node.child(0);
    555604    }
    556     public static List<ASTNode> tailChildren(ASTNode compound) {
     605    public static List<ASTNode> tailChildrenAsList(ASTNode compound) {
    557606        List<ASTNode> children = compound.getChildren();
    558607        return children.subList(1, children.size());
  • proto/s2k/trunk/framework/src/toolchain/b2k/codeGenerator/visitors/AbstractCodeGenerator.java

    r3788 r3797  
    5353        abstract public String getCode(ASTNode node);           
    5454        abstract public String getCode(ASTNode node, int indent);
    55         abstract public String makeKernelDoBlockCallStmt(AddKernelStmtNode addKernelStmt);
    56         abstract public String makeKernelDoFinalBlockCallStmt(AddKernelStmtNode addKernelStmt);
    57         abstract public String makeKernelClearCallStmt(AddKernelStmtNode addKernelStmt);
     55        abstract public CodeStore makeKernelDoBlockCallStmt(AddKernelStmtNode addKernelStmt);
     56        abstract public CodeStore makeKernelDoFinalBlockCallStmt(AddKernelStmtNode addKernelStmt);
     57        abstract public CodeStore makeKernelClearCallStmt(AddKernelStmtNode addKernelStmt);
    5858
    5959}
  • proto/s2k/trunk/framework/src/toolchain/b2k/codeGenerator/visitors/CodeGenerator.java

    r3795 r3797  
    4343import toolchain.b2k.codeGenerator.util.CodeGeneratorUtil;
    4444import toolchain.b2k.lang.AbstractBuiltinEncoder;
     45import toolchain.b2k.lang.B2KBuiltin;
    4546import toolchain.b2k.lang.idisa.IDISABuiltin;
    4647
     48import java.util.ArrayList;
    4749import java.util.Iterator;
    4850import java.util.List;
     
    9092                CodeStore code = new CodeStore();
    9193               
    92                 CodeStore structName = (CodeStore) childResults.get(0);
    93                 code.addFormattedLine("struct %s", structName.getResultVarName());
     94                CodeStore identifier = (CodeStore) childResults.get(0);
     95                code.addFormattedLine("struct %s", identifier.getResultVarName());
    9496                code.addLine("{");
    9597                code.addAll(childResults.get(1),0);
     
    103105        public CodeStore visitLeave(KernelDefNode node, List<CodeStore> childResults) {
    104106                CodeStore code = new CodeStore();
    105                
    106                 String kernelName = childResults.get(0).getResultVarName();
    107                                
     107                String identifier = childResults.get(0).getResultVarName();
    108108                CodeStore initDef = childResults.get(1);
    109109               
    110                 code.addFormattedLine("struct %s ", kernelName);
     110                code.addFormattedLine("struct %s ", identifier);
    111111                code.addLine("{");
    112                 code.indentedFormattedLine("%s()", kernelName);
     112                code.indentedFormattedLine("%s()", identifier);
    113113                code.addLine("{");
    114114                code.addAll(initDef, 1);
     
    152152       
    153153        if (childResults.isEmpty()) {
    154             code.addLine(""); // empty if / while
     154            code.addLine(""); // // a blank line
    155155        }
    156156       
     
    177177                CodeStore code = new CodeStore();
    178178               
    179                
    180                 String funcName = childResults.get(0).getResultVarName();
     179                String identifier = childResults.get(0).getResultVarName();
    181180                String parameters = childResults.get(1).getResultVarName();
    182                                
    183181                CodeStore blockStmtCodeStore = childResults.get(2);
    184182               
    185                 code.addFormattedLine("void %s(%s)", funcName, parameters);
     183                code.addFormattedLine("void %s(%s)", identifier, parameters);
    186184                code.addLine("{");
    187185                code.addAll(blockStmtCodeStore, 1);
     
    205203        }
    206204       
    207         // Parameter
    208205        public CodeStore visitLeave(KernelParameterNode node, List<CodeStore> childResults) { 
    209206                CodeStore code = new CodeStore();
    210207               
    211                 String type = childResults.get(0).getResultVarName();
    212                 String identifier = childResults.get(1).getResultVarName();
     208                int typeNodeIndex = Accessors.typeNodeIndex(node);
     209                int nameNodeIndex = Accessors.nameNodeIndex(node);
     210               
     211                String type = childResults.get(typeNodeIndex).getResultVarName();
     212                String identifier = childResults.get(nameNodeIndex).getResultVarName();
    213213                code.setResultVarName(type + " & " + identifier);
    214214               
    215215                return code;
    216216        }
     217
     218        public CodeStore visitLeave(KernelParameterModeNode node, List<CodeStore> childResults) {
     219                CodeStore code = new CodeStore();
     220               
     221                return code;
     222        }
     223       
     224        ////////////////////////////////////////////////////////////////////////////
     225        // Graph
     226        ////////////////////////////////////////////////////////////////////////////
     227       
     228        public CodeStore visitLeave(GraphDefNode node, List<CodeStore> childResults) {
     229                CodeStore code = new CodeStore();
     230               
     231                String identifier = childResults.get(0).getResultVarName();
     232                String parameters = childResults.get(1).getResultVarName();
     233                CodeStore graphBodyCodeStore = childResults.get(2);
     234               
     235                code.addFormattedLine("void %s(%s)", identifier, parameters);
     236                code.addLine("{");
     237                code.addAll(graphBodyCodeStore, 1);
     238               
     239                if(!graphBodyCodeStore.hasCode()) {
     240                    code.dedentedLine("}");
     241                } else {
     242                    code.addLine("}");
     243                }
     244               
     245                code.addLine("");
     246                               
     247                return code;
     248               
     249        }
     250       
     251        public CodeStore visitLeave(GraphParameterListNode node, List<CodeStore> childResults) {
     252                CodeStore code = new CodeStore();               
     253                Iterator<CodeStore> iter = childResults.iterator();
     254                code.setResultVarName(CodeGeneratorUtil.makeDelimitedList(iter, ", "));         
     255                return code;
     256        }
     257       
     258        public CodeStore visitLeave(GraphParameterNode node, List<CodeStore> childResults) { 
     259                CodeStore code = new CodeStore();
     260               
     261                int typeNodeIndex = Accessors.typeNodeIndex(node);
     262                int nameNodeIndex = Accessors.nameNodeIndex(node);
     263               
     264                String type = childResults.get(typeNodeIndex).getResultVarName();
     265                String identifier = childResults.get(nameNodeIndex).getResultVarName();
     266                code.setResultVarName(type + " & " + identifier);
     267               
     268                return code;
     269        }
     270
     271        public CodeStore visitLeave(GraphParameterModeNode node, List<CodeStore> childResults) {
     272                CodeStore code = new CodeStore();
     273               
     274                return code;
     275        }
     276       
     277        public CodeStore visitLeave(GraphBodyNode node, List<CodeStore> childResults) {
     278                CodeStore code = new CodeStore();
     279               
     280                if (childResults.isEmpty()) {
     281                        code.addLine(""); // empty if / while
     282                }
     283               
     284                for (CodeStore child: childResults) {
     285                        code.addAll(child, 0);
     286                }
     287               
     288                return code;
     289        }
     290       
     291        public CodeStore visitLeave(GraphVarDeclsNode node, List<CodeStore> childResults) {
     292                CodeStore code = new CodeStore();
     293                for (CodeStore child: childResults) {
     294                        code.addAll(child, 0);
     295                }               
     296                return code;
     297        }
     298
     299        public CodeStore visitLeave(StructDeclNode node, List<CodeStore> childResults) {
     300                CodeStore code = new CodeStore();
     301               
     302                CodeStore type                                  = (CodeStore)childResults.get(0);
     303                CodeStore identifier                    = (CodeStore)childResults.get(1);
     304               
     305                code.addFormattedLine("%s %s;",
     306                                        type.getResultVarName(),
     307                                        identifier.getResultVarName());
     308
     309                return code;           
     310        }       
     311
     312        public CodeStore visitLeave(KernelDeclNode node, List<CodeStore> childResults) {
     313                CodeStore code = new CodeStore();
     314               
     315                CodeStore type                                  = (CodeStore)childResults.get(0);
     316                CodeStore identifier                    = (CodeStore)childResults.get(1);
     317               
     318                code.addFormattedLine("%s %s;",
     319                                        type.getResultVarName(),
     320                                        identifier.getResultVarName());
     321
     322                return code;           
     323        }
     324
     325        public CodeStore visitLeave(AddKernelStmtsNode node, List<CodeStore> childResults) {
     326                CodeStore code = new CodeStore();
     327                for (CodeStore child: childResults) {
     328                        code.addAll(child, 0);
     329                }
     330                return code;
     331        }
     332       
     333        public CodeStore visitLeave(AddKernelStmtNode node, List<CodeStore> childResults) {     
     334                CodeStore code = new CodeStore();
     335               
     336                StringBuilder resultVar = new StringBuilder();
     337               
     338                resultVar.append(childResults.get(0).getResultVarName());
     339                resultVar.append("(");
     340                resultVar.append(childResults.get(1).getResultVarName());
     341                resultVar.append(")");
     342               
     343                code.setResultVarName(resultVar.toString());            // expression   
     344               
     345                code.addFormattedLine("%s;", resultVar.toString()); // statement
     346               
     347                return code;
     348        }
     349       
     350        public CodeStore visitLeave(AddKernelArgListNode node, List<CodeStore> childResults) {
     351                CodeStore code = new CodeStore();
     352                Iterator<CodeStore> iter = childResults.iterator();
     353                code.setResultVarName(CodeGeneratorUtil.makeDelimitedList(iter, ", "));
     354                return code;
     355        }               
    217356               
    218357        ////////////////////////////////////////////////////////////////////////////
     
    270409       
    271410        public CodeStore visitLeave(VarDeclNode node, List<CodeStore> childResults) {
    272        
    273411                CodeStore code = new CodeStore();
    274412               
     
    312450                resultVar.append(")");
    313451               
    314                 code.setResultVarName(resultVar.toString());            // function invocation as an expression
    315                
    316                 code.addFormattedLine("%s;", resultVar.toString()); // function invocation as a statement
     452                code.setResultVarName(resultVar.toString());            // expression   
     453               
     454                code.addFormattedLine("%s;", resultVar.toString()); // statement
    317455               
    318456                return code;
     
    373511        // Types
    374512        ////////////////////////////////////////////////////////////////////////////
    375        
     513
    376514        // Stream Structures are used both as a variable and as sequence of code lines
     515        public CodeStore visitLeave(KernelTypeNode node, List<CodeStore> childResults) {
     516                CodeStore code = new CodeStore();
     517               
     518                StringBuilder resultVar = new StringBuilder();
     519                resultVar.append("struct");
     520                resultVar.append(" ");
     521                resultVar.append(childResults.get(0).getResultVarName());
     522                code.setResultVarName(resultVar.toString());   
     523               
     524                return code;
     525        }       
     526       
     527        // Stream structures both type decl and def
    377528        public CodeStore visitLeave(StructTypeNode node, List<CodeStore> childResults) {
    378529                CodeStore code = new CodeStore();
     
    402553                CodeStore code = new CodeStore();
    403554                CodeStore type = childResults.get(0);
    404                 CodeStore memberName = childResults.get(1);
    405                 code.addFormattedLine("%s %s;", type.getResultVarName(), memberName.getResultVarName());               
     555                CodeStore identifier = childResults.get(1);
     556                code.addFormattedLine("%s %s;", type.getResultVarName(), identifier.getResultVarName());               
    406557                return code;
    407558        }
     
    450601        }
    451602
    452         public String makeKernelDoBlockCallStmt(AddKernelStmtNode addKernelStmt) { return ""; }
    453         public String makeKernelDoFinalBlockCallStmt(AddKernelStmtNode addKernelStmt) { return ""; }
    454         public String makeKernelClearCallStmt(AddKernelStmtNode addKernelStmt) { return ""; }
     603        public CodeStore makeKernelDoBlockCallStmt(AddKernelStmtNode addKernelStmt) {
     604                CodeStore code = new CodeStore();
     605               
     606                String identifier  = Accessors.name(Accessors.nameNode(addKernelStmt));
     607                String funcName     = encoder.getCode(B2KBuiltin.DO_BLOCK);
     608               
     609                List<String> args = new ArrayList<String>();
     610                for(ASTNode arg : Accessors.addKernelStmtArgsAsList(addKernelStmt)) {
     611                        args.add(Accessors.name(arg));
     612                }
     613                String funcArgs = CodeGeneratorUtil.makeDelimitedList(args, ", ");
     614               
     615                code.addFormattedLine("%s.%s(%s);", identifier, funcName, funcArgs);
     616            return code;
     617        }
     618       
     619        public CodeStore makeKernelDoFinalBlockCallStmt(AddKernelStmtNode addKernelStmt) {
     620       
     621                CodeStore code = new CodeStore();
     622                String identifier  = Accessors.name(Accessors.nameNode(addKernelStmt));
     623                String funcName     = encoder.getCode(B2KBuiltin.DO_FINAL_BLOCK);
     624               
     625                List<String> args = new ArrayList<String>();
     626                for(ASTNode arg : Accessors.addKernelStmtArgsAsList(addKernelStmt)) {
     627                        args.add(Accessors.name(arg));
     628                }
     629                args.add(encoder.getCode(B2KBuiltin.EOF_MASK));
     630               
     631                String funcArgs = CodeGeneratorUtil.makeDelimitedList(args, ", ");
     632                code.addFormattedLine("%s.%s(%s);", identifier, funcName, funcArgs);           
     633               
     634                return code;
     635        }
     636       
     637        public CodeStore makeKernelClearCallStmt(AddKernelStmtNode addKernelStmt) {
     638               
     639                CodeStore code = new CodeStore();
     640                String identifier  = Accessors.name(Accessors.nameNode(addKernelStmt));
     641                String funcName     = encoder.getCode(B2KBuiltin.CLEAR);
     642               
     643                code.addFormattedLine("%s.%s();", identifier, funcName);               
     644               
     645                return code;
     646        }
    455647       
    456648}
  • proto/s2k/trunk/framework/src/toolchain/b2k/lang/B2KBuiltins2CPP.java

    r3788 r3797  
    33import java.util.HashMap;
    44import java.util.Map;
    5 
    6 import toolchain.b2k.lang.idisa.IDISABuiltin;
    75
    86public class B2KBuiltins2CPP extends AbstractBuiltinEncoder {
  • proto/s2k/trunk/framework/src/toolchain/s2k/transformer/visitors/S2K2B2K/S2K2B2KTransformer.java

    r3788 r3797  
    240240        }
    241241       
    242         // FilterArgList -> KernelArgListNode
    243         //
    244         public ASTNode visitLeave(s2k.ast.FilterArgListNode snode, List<ASTNode> childResults) {
    245                 ASTNode replacement = new KernelArgListNode(Generators.makeToken(snode.getToken()));
     242        // FilterArgList -> AddKernelArgListNode
     243        //
     244        public ASTNode visitLeave(s2k.ast.AddFilterArgListNode snode, List<ASTNode> childResults) {
     245                ASTNode replacement = new AddKernelArgListNode(Generators.makeToken(snode.getToken()));
    246246                appendChildResults(replacement, childResults);
    247247                return replacement;
Note: See TracChangeset for help on using the changeset viewer.