Changeset 2713


Ignore:
Timestamp:
Dec 2, 2012, 6:13:05 PM (7 years ago)
Author:
ksherdy
Message:

Updated final block simd_andc(X) operation applied to scanto builtins. Updated test cases.

Location:
proto/pablo
Files:
8 added
5 deleted
10 edited
15 copied
2 moved

Legend:

Unmodified
Added
Removed
  • proto/pablo/input/test/visitors/Pablo2CarryQXFormer/FinalBlock/pablo2CarryQ.pablo

    r2710 r2713  
    2525        R = pablo.ScanThru(C,X);
    2626
    27         R = carryQ.BitBlock_scanto_ci_co(C,X,carryQ.get_carry_in(6),6);
     27        R = carryQ.BitBlock_scanto_ci_co(C,simd_andc(X, EOF_mask),carryQ.get_carry_in(6),6);
    2828        R = ScanTo(C,X);
    2929       
    30         R = carryQ.BitBlock_scanto_ci_co(C,X,carryQ.get_carry_in(7),7);
     30        R = carryQ.BitBlock_scanto_ci_co(C,simd_andc(X, EOF_mask),carryQ.get_carry_in(7),7);   
    3131        R = pablo.ScanTo(C,X);
    3232
     
    3737        R = pablo.AdvanceThenScanThru(C,X);
    3838
    39         R = carryQ.BitBlock_advance_then_scanto(C,X,carryQ.get_carry_in(10),10);                       
     39        R = carryQ.BitBlock_advance_then_scanto(C,simd_andc(X, EOF_mask),carryQ.get_carry_in(10),10);                   
    4040        R = AdvanceThenScanTo(C,X);
    4141       
    42         R = carryQ.BitBlock_advance_then_scanto(C,X,carryQ.get_carry_in(11),11);       
     42        R = carryQ.BitBlock_advance_then_scanto(C,simd_andc(X, EOF_mask),carryQ.get_carry_in(11),11);   
    4343        R = pablo.AdvanceThenScanTo(C,X);
    4444
  • proto/pablo/src/application/ApplicationGenerator.java

    r2710 r2713  
    33//import ast.StartSymbolNode;
    44import ast.ASTNode;
    5 import compiler.backend.CodeGenerator;
    6 import compiler.backend.visitors.CPPUnparser;
    7 import compiler.backend.visitors.Unparser;
    8 import compiler.frontend.SyntacticAnalysisFailedException;
    9 import compiler.frontend.SyntacticAnalyzer;
     5import compiler.codeGenerator.CodeGenerator;
    106import compiler.lang.pablo.*;
    117import compiler.lang.carryset.*;
     8import compiler.syntacticAnalysis.SyntacticAnalysisFailedException;
     9import compiler.syntacticAnalysis.SyntacticAnalyzer;
     10import compiler.transformers.visitors.CPPXFormer;
     11import compiler.transformers.visitors.CodeXFormer;
    1212
    1313import tokens.Tokens;
     
    4646                Builtins2Lang builtins2Lang = null;
    4747                CarrySet2Lang carrySet2Lang = null;
    48                 Unparser unparser = null;
     48                CodeXFormer unparser = null;
    4949               
    5050                if(applicationConfig.targetLang.contentEquals(ApplicationConfig.CLANG)) {
     
    5555                        builtins2Lang = new Builtins2CPP();
    5656                        carrySet2Lang = new CarrySet2CPP();
    57                         unparser = new CPPUnparser();
     57                        unparser = new CPPXFormer();
    5858                }
    5959               
  • proto/pablo/src/application/TemplateContentsGenerator.java

    r2710 r2713  
    22
    33import ast.*;
    4 import compiler.backend.visitors.helpers.UnparserUtil;
    54import compiler.template.Template;
     5import compiler.transformers.visitors.helpers.UnparserUtil;
    66import application.ApplicationGenerator;
    77
  • proto/pablo/src/application/Test.java

    r2711 r2713  
    2525import compiler.lang.pablo.Builtins2Lang;
    2626import compiler.ast.visitors.*;
    27 import compiler.backend.visitors.AdvanceCombinerXFormer;
    28 import compiler.backend.visitors.AugAssignXFormer;
    29 import compiler.backend.visitors.Bitwise2IDISAXFormer;
    30 import compiler.backend.visitors.Pablo2CarryXFormer;
    31 import compiler.backend.visitors.StreamFuncVisitor;
    32 import compiler.backend.visitors.helpers.AssertCompare;
    3327import compiler.test.*;
     28import compiler.transformers.visitors.AdvanceCombinerXFormer;
     29import compiler.transformers.visitors.AugAssignXFormer;
     30import compiler.transformers.visitors.Bitwise2IDISAXFormer;
     31import compiler.transformers.visitors.Pablo2CarryXFormer;
     32import compiler.transformers.visitors.StreamFuncVisitor;
     33import compiler.transformers.visitors.helpers.AssertCompare;
    3434
    3535@SuppressWarnings("unused")
  • proto/pablo/src/compiler/codeGenerator/CodeGenerator.java

    r2710 r2713  
    1 package compiler.backend;
     1package compiler.codeGenerator;
    22
    3 import compiler.backend.visitors.*;
    43import compiler.lang.carryset.CarrySet2Lang;
    54import compiler.lang.pablo.Builtins2Lang;
     5import compiler.transformers.visitors.*;
    66
    77import ast.ASTNode;
     
    5050               
    5151                CarryIntroXFormer carryQIntro = new CarryIntroXFormer(root, getCarrySet2Lang());
    52                 carryQIntro.XForm(/*ciMode , coMode */);
     52                carryQIntro.XForm();
    5353
    5454                AssertZeroXFormer assertZeroXFormer = new AssertZeroXFormer(root, getBuiltins2Lang());
  • proto/pablo/src/compiler/syntacticAnalysis/SyntacticAnalysisFailedException.java

    r2710 r2713  
    1 package compiler.frontend;
     1package compiler.syntacticAnalysis;
    22
    33public class SyntacticAnalysisFailedException extends Exception {
  • proto/pablo/src/compiler/syntacticAnalysis/SyntacticAnalyzer.java

    r2710 r2713  
    44//
    55
    6 package  compiler.frontend;
     6package  compiler.syntacticAnalysis;
    77
    88import parser.*;
     
    1111import lexicalAnalyzer.LexicalController;
    1212import logging.ScatterLogger;
    13 import compiler.frontend.SyntacticAnalyzer;
     13import compiler.syntacticAnalysis.SyntacticAnalyzer;
    1414
    1515public class SyntacticAnalyzer {
  • proto/pablo/src/compiler/transformers/visitors/ASTAssertCompareVisitor.java

    r2710 r2713  
    11
    2 package compiler.backend.visitors;
     2package compiler.transformers.visitors;
    33
    44import java.util.List;
  • proto/pablo/src/compiler/transformers/visitors/AdvanceCombinerXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/AdvanceNCounterVisitor.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/AssertBitBlockAlignStmtsXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/AssertZeroXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/AugAssignXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import java.util.HashMap;
  • proto/pablo/src/compiler/transformers/visitors/Bitwise2IDISAXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/CPPXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
     
    77
    88import compiler.ast.Accessors;
    9 import compiler.backend.visitors.helpers.CodeStore;
    10 import compiler.backend.visitors.helpers.UnparserUtil;
    119import compiler.codeGenerator.visitors.helpers.*;
    1210import compiler.lang.carryset.CarrySet2CPP;
    1311import compiler.lang.pablo.Builtins2CPP;
     12import compiler.transformers.visitors.helpers.CodeStore;
     13import compiler.transformers.visitors.helpers.UnparserUtil;
    1414
    1515//
    16 // Design:      This class clones the AST function body in the visit(FuncDefNode) method and
    17 //                      modifies the FuncDefNode body to handle atEOF, inFile and EOF_mask in block     
    18 //                      final block processing.
     16// This class transforms Pablo AST code to Block-at-a-time CPP code.
    1917//
    2018
    21 // Target
     19// For each stream function
     20// (1) Deep copy of the stream function body for (a) non-final block body and (b) final block body).
     21// (2) Apply final block transformation to non-final
     22// (3) Transform (a) non-final block body to C++ do_block.
     23// (4) Transform (b) final-block body to C++ do_final_block.
     24// (5) carry_count, carry_n_count
     25
     26// An alternate design choices to make AST copies externally to this class and
     27// then iterate over over stream function externally unparse, gather build the
     28// C++ code. This option may promotes 'smaller' visitors and 'looser-coupling'.
     29
     30// Adoption of code templates and template composition may prove to be a valuable design choice (see Scatter).
     31// The AnTLR String Template framework makes use of this strategy.
     32
     33// Pablo stream function target.
    2234/*             
    2335struct @name
     
    2840        @do_block                               
    2941  }
    30   IDISA_INLINE void do_final_block(@parameters)
     42  IDISA_INLINE void do_final_block(@parameters, BitBlock & EOF_mask)
    3143  {
    3244    @do_final_block
     
    3648*/
    3749
    38 public class CPPUnparser extends Unparser {
     50public class CPPXFormer extends CodeXFormer {
    3951       
    4052        //////////////////////////////////////////////////////////////
    4153        // constructor and helpers     
    42         public CPPUnparser() {}
     54        public CPPXFormer() {}
    4355
    4456        public String getCode(ASTNode node) {
     
    144156                Pablo2CarryXFormer pablo2CarryQ = new Pablo2CarryXFormer(copy, new Builtins2CPP(), new CarrySet2CPP());
    145157                pablo2CarryQ.XForm(isFinalBlock);                   
    146                 CodeStore codeStore = copy.accept(new CPPUnparser());
     158                CodeStore codeStore = copy.accept(new CPPXFormer());
    147159                return codeStore;
    148160        }
  • proto/pablo/src/compiler/transformers/visitors/CarryCounterVisitor.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/CarryIntroXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/CodeXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33
    44import ast.ASTNode;
    55import ast.ASTVisitor.Default;
    6 import compiler.backend.visitors.helpers.CodeStore;
     6import compiler.transformers.visitors.helpers.CodeStore;
    77
    8 abstract public class Unparser extends Default<CodeStore> {
     8abstract public class CodeXFormer extends Default<CodeStore> {
    99       
    1010        abstract public String getCode(ASTNode node);           
  • proto/pablo/src/compiler/transformers/visitors/DumpAssignStmtsXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/Pablo2CarryXFormer.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import java.util.ArrayList;
     
    2727    }
    2828
    29     public void XForm(boolean isFinalBlock/* boolean ci, boolean co*/) {
    30                 XFormer visitor = new XFormer(isFinalBlock/*ci , co*/);
     29    public void XForm(boolean isFinalBlock) {
     30                XFormer visitor = new XFormer(isFinalBlock);
    3131                ASTTree.accept(visitor);
    3232    }                   
     
    105105        //                    return c                 
    106106                        if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ADVANCE.pabloName(), Builtins.ADVANCE.argCount())) {         
    107                                 if(finalBlockMode) {
    108                                        
    109                                 }
    110                                
    111107                                replaceFuncCallNode(node,
    112108                                                CarrySet.CarryQ_IDENTIFIER,
     
    118114                        }
    119115       
    120 
    121         //            #CARRYSET
    122         //            rtn = self.carryvar.id + "." + "BitBlock_scanthru_ci_co"
    123         //            c = mkCall(rtn, callnode.args + carry_args)
    124         //            self.current_carry += 1
    125         //            return c         
    126                        
    127                                        
     116        //      #CARRYSET
     117        //      rtn = self.carryvar.id + "." + "BitBlock_scanthru_ci_co"
     118        //      c = mkCall(rtn, callnode.args + carry_args)
     119        //      self.current_carry += 1
     120        //      return c                                                       
    128121                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.SCANTHRU.pabloName(), Builtins.SCANTHRU.argCount())) {                           
    129                                 if(finalBlockMode) {
    130                                        
    131                                 }
    132                                
    133122                                replaceFuncCallNode(node,
    134123                                                CarrySet.CarryQ_IDENTIFIER,
     
    139128                        }
    140129                               
    141         //                  elif is_BuiltIn_Call(callnode, 'AdvanceThenScanThru', 2):
    142         //                  #CARRYSET
    143         //                  rtn = self.carryvar.id + "." + "BitBlock_advance_then_scanthru"
    144         //                  c = mkCall(rtn, callnode.args + carry_args)
    145         //                  self.current_carry += 1
    146         //                  return c                   
     130        //          elif is_BuiltIn_Call(callnode, 'AdvanceThenScanThru', 2):
     131        //          #CARRYSET
     132        //          rtn = self.carryvar.id + "." + "BitBlock_advance_then_scanthru"
     133        //          c = mkCall(rtn, callnode.args + carry_args)
     134        //          self.current_carry += 1
     135        //          return c                   
    147136                       
    148137                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ADVANCETHENSCANTHRU.pabloName(), Builtins.ADVANCETHENSCANTHRU.argCount())) {
    149                                 if(finalBlockMode) {
    150                                                                        
    151                                 }
    152                                
    153138                                replaceFuncCallNode(node,
    154139                                                CarrySet.CarryQ_IDENTIFIER,
     
    159144                        }               
    160145       
    161         //            elif is_BuiltIn_Call(callnode, 'SpanUpTo', 2):
    162         //            #CARRYSET
    163         //            rtn = self.carryvar.id + "." + "BitBlock_span_upto"
    164         //            c = mkCall(rtn, callnode.args + carry_args)
    165         //            self.current_carry += 1
    166         //            return c         
     146        //      elif is_BuiltIn_Call(callnode, 'SpanUpTo', 2):
     147        //      #CARRYSET
     148        //      rtn = self.carryvar.id + "." + "BitBlock_span_upto"
     149        //      c = mkCall(rtn, callnode.args + carry_args)
     150        //      self.current_carry += 1
     151        //      return c               
    167152                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.SPANUPTO.pabloName(), Builtins.SPANUPTO.argCount())) {
    168                                 if(finalBlockMode) {
    169                                                
    170                                 }
    171        
    172153                                replaceFuncCallNode(node,
    173154                                                CarrySet.CarryQ_IDENTIFIER,
     
    188169                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ADVANCETHENSCANTO.pabloName(), Builtins.ADVANCETHENSCANTO.argCount())) {
    189170                                if(finalBlockMode) {
    190                                        
     171                                        ASTNode argNode = Accessors.funcCallArg(node, 1);
     172                                        replacementNode = Generators.makeSIMDAndCEOFMaskFuncCall(argNode, builtins2Lang);
     173                                        Accessors.funcCallArgsListNode(node).replaceChild(argNode, replacementNode);                                   
    191174                                }
    192175                               
     
    209192       
    210193                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.INCLUSIVESPAN.pabloName(), Builtins.INCLUSIVESPAN.argCount())) {
    211                                 if(finalBlockMode) {
    212                                        
    213                                 }
    214 
    215194                                replaceFuncCallNode(node,
    216195                                                CarrySet.CarryQ_IDENTIFIER,
     
    231210       
    232211                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.EXCLUSIVESPAN.pabloName(), Builtins.EXCLUSIVESPAN.argCount())) {
    233                                 if(finalBlockMode) {
    234                                        
    235                                 }
    236 
    237212                                replaceFuncCallNode(node,
    238213                                                CarrySet.CarryQ_IDENTIFIER,
     
    256231                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.SCANTO.pabloName(), Builtins.SCANTO.argCount())) {
    257232                                if(finalBlockMode) {
    258                                        
     233                                        ASTNode argNode = Accessors.funcCallArg(node, 1);
     234                                        replacementNode = Generators.makeSIMDAndCEOFMaskFuncCall(argNode, builtins2Lang);
     235                                        Accessors.funcCallArgsListNode(node).replaceChild(argNode, replacementNode);                                   
    259236                                }
    260 
    261237                                replaceFuncCallNode(node,
    262238                                                CarrySet.CarryQ_IDENTIFIER,
     
    274250        //            self.current_carry += 1
    275251        //            return c
    276                        
    277 
    278        
     252
    279253                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.SCANTOFIRST.pabloName(), Builtins.SCANTOFIRST.argCount())) {
    280                                 if(finalBlockMode) {
    281                                        
    282                                 }
    283 
     254        //                      if(finalBlockMode) {
     255        //                             
     256        //                      }
    284257                                replaceFuncCallNode(node,
    285258                                                CarrySet.CarryQ_IDENTIFIER,
     
    299272                                //replaceFuncCallNode(node, CarryQ.CarryQ_PACKAGE_NAME, BuiltinOperations.ADVANCE32.cPPCode(), carryCall, currentAdvN);
    300273                                // TODO ==> Verify implementation.
    301                                 if(finalBlockMode) {
    302                                        
    303                                 }
    304                                
    305274                                replaceFuncCallNode(node,
    306275                                                CarrySet.CarryQ_IDENTIFIER,
     
    320289                                //replaceFuncCallNode(node, CarryQ.CarryQ_PACKAGE_NAME, BuiltinOperations.ADVANCEN.cPPCode(), carryCall, currentAdvN);                                 
    321290                                // TODO - Verify implementation.
    322                                 if(finalBlockMode) {
    323                                        
    324                                 }
    325                                                                
    326291                                replaceFuncCallNode(node,
    327292                                                CarrySet.CarryQ_IDENTIFIER,
     
    335300                                 
    336301                                if(finalBlockMode) {
    337                                         ASTNode arg0 = Accessors.funcCallArg(node, 0);
    338                                         replacementNode = Generators.makeSIMDAndCEOFMaskFuncCall(arg0, builtins2Lang);
     302                                        ASTNode argNode = Accessors.funcCallArg(node, 0);
     303                                        replacementNode = Generators.makeSIMDAndCEOFMaskFuncCall(argNode, builtins2Lang);
    339304                                } else {
    340305                                        replacementNode = Generators.makeFuncCallNode(SIMD.CONSTANT.idisaConstantName(1, 0), node.getToken());                                 
     
    352317                               
    353318                                if(finalBlockMode) {                                   
    354                                         ASTNode arg0 = Accessors.funcCallArg(node, 0);
    355                                         replacementNode = Generators.makeSIMDAndEOFMaskFuncCall(arg0, builtins2Lang);
     319                                        ASTNode argNode = Accessors.funcCallArg(node, 0);
     320                                        replacementNode = Generators.makeSIMDAndEOFMaskFuncCall(argNode, builtins2Lang);
    356321                                } else {
    357322                                        replacementNode = Accessors.funcCallArg(node,0);
  • proto/pablo/src/compiler/transformers/visitors/StreamFuncVisitor.java

    r2710 r2713  
    1 package compiler.backend.visitors;
     1package compiler.transformers.visitors;
    22
    33import java.util.*;
  • proto/pablo/src/compiler/transformers/visitors/helpers/AssertCompare.java

    r2710 r2713  
    1 package compiler.backend.visitors.helpers;
     1package compiler.transformers.visitors.helpers;
    22
    3 import compiler.backend.visitors.ASTAssertCompareVisitor;
     3import compiler.transformers.visitors.ASTAssertCompareVisitor;
    44
    55import ast.*;
  • proto/pablo/src/compiler/transformers/visitors/helpers/CodeStore.java

    r2710 r2713  
    1 package compiler.backend.visitors.helpers;
     1package compiler.transformers.visitors.helpers;
    22
    33import java.util.ArrayList;
  • proto/pablo/src/compiler/transformers/visitors/helpers/Labeller.java

    r2710 r2713  
    1 package compiler.backend.visitors.helpers;
     1package compiler.transformers.visitors.helpers;
    22
    33public class Labeller {
  • proto/pablo/src/compiler/transformers/visitors/helpers/UnparserUtil.java

    r2710 r2713  
    1 package compiler.backend.visitors.helpers;
     1package compiler.transformers.visitors.helpers;
    22
    33import ast.*;
Note: See TracChangeset for help on using the changeset viewer.