Changeset: 7cad5f3a528d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7cad5f3a528d
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        monetdb5/optimizer/opt_garbageCollector.c
Branch: default
Log Message:

Avoid some useless work in the garbage collector.


diffs (86 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -11517,6 +11517,7 @@ Ready.
 [ "optimizer", "no_mitosis_pipe",      "function 
optimizer.no_mitosis_pipe():void;",   "",     ""      ]
 [ "optimizer", "oltp", "pattern optimizer.oltp():str ",        "OPTwrapper;",  
""      ]
 [ "optimizer", "oltp", "pattern optimizer.oltp(mod:str, fcn:str):str ",        
"OPTwrapper;",  "Inject the OLTP locking primitives."   ]
+[ "optimizer", "oltp_pipe",    "function optimizer.oltp_pipe():void;", "",     
""      ]
 [ "optimizer", "optimize",     "pattern optimizer.optimize(mod:str, 
fcn:str):void ",   "QOToptimize;", "Optimize a specific operation" ]
 [ "optimizer", "orcam",        "pattern optimizer.orcam(mod:str, fcn:str, 
targetmod:str, targetfcn:str):void ",        "OPTorcam;",    "Inverse macro, 
find pattern and replace with a function call." ]
 [ "optimizer", "orcam",        "pattern optimizer.orcam(targetmod:str, 
targetfcn:str):void ",  "OPTorcam;",    "Inverse macro processor for current 
function"  ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -15929,6 +15929,7 @@ Ready.
 [ "optimizer", "no_mitosis_pipe",      "function 
optimizer.no_mitosis_pipe():void;",   "",     ""      ]
 [ "optimizer", "oltp", "pattern optimizer.oltp():str ",        "OPTwrapper;",  
""      ]
 [ "optimizer", "oltp", "pattern optimizer.oltp(mod:str, fcn:str):str ",        
"OPTwrapper;",  "Inject the OLTP locking primitives."   ]
+[ "optimizer", "oltp_pipe",    "function optimizer.oltp_pipe():void;", "",     
""      ]
 [ "optimizer", "optimize",     "pattern optimizer.optimize(mod:str, 
fcn:str):void ",   "QOToptimize;", "Optimize a specific operation" ]
 [ "optimizer", "orcam",        "pattern optimizer.orcam(mod:str, fcn:str, 
targetmod:str, targetfcn:str):void ",        "OPTorcam;",    "Inverse macro, 
find pattern and replace with a function call." ]
 [ "optimizer", "orcam",        "pattern optimizer.orcam(targetmod:str, 
targetfcn:str):void ",  "OPTorcam;",    "Inverse macro processor for current 
function"  ]
diff --git a/monetdb5/optimizer/opt_garbageCollector.c 
b/monetdb5/optimizer/opt_garbageCollector.c
--- a/monetdb5/optimizer/opt_garbageCollector.c
+++ b/monetdb5/optimizer/opt_garbageCollector.c
@@ -31,6 +31,7 @@ OPTgarbageCollectorImplementation(Client
        char buf[256];
        lng usec = GDKusec();
        str msg = MAL_SUCCEED;
+       char *used;
        //int *varlnk, *stmtlnk;
 
        (void) pci;
@@ -49,6 +50,10 @@ OPTgarbageCollectorImplementation(Client
        }
 */
        
+       used = (char*) GDKzalloc(sizeof(char) * mb->vtop);
+       if ( used == NULL)
+               throw(MAL, "optimizer.garbagecollector", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+
        old= mb->stmt;
        limit = mb->stop;
        slimit = mb->ssize;
@@ -91,6 +96,8 @@ OPTgarbageCollectorImplementation(Client
                p->typechk = TYPE_UNKNOWN;
                /* Set the program counter to ease profiling */
                p->pc = i;
+               for( j = 0; j< p->retc; j++)
+                       used[getArg(p,j)] = 1;
 
                if ( p->barrier == RETURNsymbol){
                        pushInstruction(mb, p);
@@ -152,14 +159,17 @@ OPTgarbageCollectorImplementation(Client
        }
 #endif
 
-       /* rename all temporaries for ease of debugging */
+       /* rename all temporaries used for ease of debugging and profile 
interpretation */
        for( i = 0; i < mb->vtop; i++)
-       if( sscanf(getVarName(mb,i),"X_%d", &j) == 1)
-               snprintf(getVarName(mb,i),IDLENGTH,"X_%d",i);
-       else
-       if( sscanf(getVarName(mb,i),"C_%d", &j) == 1)
-               snprintf(getVarName(mb,i),IDLENGTH,"C_%d",i);
-
+       if ( used[i]){
+               str nme = getVarName(mb,i);
+               if( nme[0] == 'X' && nme[1] == '_' )
+                               snprintf(nme, IDLENGTH, "X_%d",i);
+               else
+               if( nme[0] == 'C' && nme[1] == '_' )
+                               snprintf(nme, IDLENGTH,"C_%d",i);
+       }
+       GDKfree(used);
        /* leave a consistent scope admin behind */
        setVariableScope(mb);
        /* Defense line against incorrect plans */
@@ -168,6 +178,7 @@ OPTgarbageCollectorImplementation(Client
                chkFlow(mb);
                chkDeclarations(mb);
        }
+
        /* keep all actions taken as a post block comment */
        usec = GDKusec()- usec;
        snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " 
usec","garbagecollector",actions, usec);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to