[pypy-svn] r35237 - in pypy/branch/jit-real-world/pypy/jit: codegen/llgraph timeshifter

arigo at codespeak.net arigo at codespeak.net
Mon Dec 4 00:11:38 CET 2006


Author: arigo
Date: Mon Dec  4 00:11:35 2006
New Revision: 35237

Modified:
   pypy/branch/jit-real-world/pypy/jit/codegen/llgraph/rgenop.py
   pypy/branch/jit-real-world/pypy/jit/timeshifter/oop.py
   pypy/branch/jit-real-world/pypy/jit/timeshifter/vdict.py
   pypy/branch/jit-real-world/pypy/jit/timeshifter/vlist.py
Log:
(pedronis, arigo)

Bugs left behind by arigo in removing None arguments to genop_call().


Modified: pypy/branch/jit-real-world/pypy/jit/codegen/llgraph/rgenop.py
==============================================================================
--- pypy/branch/jit-real-world/pypy/jit/codegen/llgraph/rgenop.py	(original)
+++ pypy/branch/jit-real-world/pypy/jit/codegen/llgraph/rgenop.py	Mon Dec  4 00:11:35 2006
@@ -91,7 +91,7 @@
             if ARGS_gv[i] is gv_Void:
                 gv_arg = gv_dummy_placeholder
             else:
-                gv_arg = LLVar(llimpl.cast(self.b, ARGS_gv[i].v, args_gv[j]))
+                gv_arg = LLVar(llimpl.cast(self.b, ARGS_gv[i].v, args_gv[j].v))
                 j += 1
             vars_gv.append(gv_arg)
         if gv_callable.is_const:

Modified: pypy/branch/jit-real-world/pypy/jit/timeshifter/oop.py
==============================================================================
--- pypy/branch/jit-real-world/pypy/jit/timeshifter/oop.py	(original)
+++ pypy/branch/jit-real-world/pypy/jit/timeshifter/oop.py	Mon Dec  4 00:11:35 2006
@@ -32,16 +32,16 @@
         self.argtuple = eval(args, d)
         # end of rather XXX'edly hackish parsing
 
-        self.argpositions = []
+        arg_llsig_to_oopsig = {}
         for i, obj in enumerate(self.argtuple):
             if isinstance(obj, Index):
-                self.argpositions.append(obj.n)
-            else:
-                self.argpositions.append(-1)
+                arg_llsig_to_oopsig[obj.n] = i
 
+        self.residualargsources = []
         for i in range(nb_args):
             ARGTYPE = FUNCTYPE.ARGS[i]
-            assert (i in self.argpositions) == (ARGTYPE is not lltype.Void)
+            if ARGTYPE is not lltype.Void:
+                self.residualargsources.append(arg_llsig_to_oopsig[i])
 
         RGenOp = hrtyper.RGenOp
         self.args_gv = [None] * nb_args
@@ -70,7 +70,7 @@
         else:
             typename, method = operation_name.split('.')
             method = 'oop_%s_%s' % (typename, method)
-            SELFTYPE = FUNCTYPE.ARGS[self.argpositions[0]].TO
+            SELFTYPE = FUNCTYPE.ARGS[self.argtuple[0].n].TO
             self.is_method = True
 
         vmodule = __import__('pypy.jit.timeshifter.v%s' % (typename,),
@@ -87,15 +87,20 @@
 
         if self.couldfold:
             ARGS = FUNCTYPE.ARGS
-            argpos = unrolling_iterable(enumerate(self.argpositions))
+            residualargsources = self.residualargsources
+            unrolling_ARGS = unrolling_iterable(ARGS)
 
             def do_call(jitstate, argboxes):
-                args = (None,)*nb_args
-                for i, pos in argpos:
-                    if pos >= 0:
-                        T = ARGS[pos]
-                        v = rvalue.ll_getvalue(argboxes[i], T)
-                        args = args[:pos] +(v,) + args[pos+1:]
+                args = ()
+                j = 0
+                for ARG in unrolling_ARGS:
+                    if ARG == lltype.Void:
+                        v = None
+                    else:
+                        argsrc = residualargsources[j]
+                        j = j + 1
+                        v = rvalue.ll_getvalue(argboxes[argsrc], ARG)
+                    args += (v,)
                 result = fnptr(*args)
                 if FUNCTYPE.RESULT == lltype.Void:
                     return None
@@ -110,15 +115,12 @@
 
     def residual_call(self, jitstate, argboxes, deepfrozen=False):
         builder = jitstate.curbuilder
-        args_gv = self.args_gv[:]
-        argpositions = self.argpositions
+        args_gv = []
         fold = deepfrozen
-        for i in range(len(argpositions)):
-            pos = argpositions[i]
-            if pos >= 0:
-                gv_arg = argboxes[i].getgenvar(builder)
-                args_gv[pos] = gv_arg
-                fold &= gv_arg.is_const
+        for argsrc in self.residualargsources:
+            gv_arg = argboxes[argsrc].getgenvar(builder)
+            args_gv.append(gv_arg)
+            fold &= gv_arg.is_const
         if fold:
             try:
                 return self.do_call(jitstate, argboxes)

Modified: pypy/branch/jit-real-world/pypy/jit/timeshifter/vdict.py
==============================================================================
--- pypy/branch/jit-real-world/pypy/jit/timeshifter/vdict.py	(original)
+++ pypy/branch/jit-real-world/pypy/jit/timeshifter/vdict.py	Mon Dec  4 00:11:35 2006
@@ -203,7 +203,7 @@
         typedesc = self.typedesc
         items = self.getitems_and_makeempty(builder.rgenop)
 
-        args_gv = [None]
+        args_gv = []
         gv_dict = builder.genop_call(typedesc.tok_ll_newdict,
                                      typedesc.gv_ll_newdict,
                                      args_gv)

Modified: pypy/branch/jit-real-world/pypy/jit/timeshifter/vlist.py
==============================================================================
--- pypy/branch/jit-real-world/pypy/jit/timeshifter/vlist.py	(original)
+++ pypy/branch/jit-real-world/pypy/jit/timeshifter/vlist.py	Mon Dec  4 00:11:35 2006
@@ -112,7 +112,7 @@
         boxes = self.item_boxes
         self.item_boxes = None
 
-        args_gv = [None, builder.rgenop.genconst(len(boxes))]
+        args_gv = [builder.rgenop.genconst(len(boxes))]
         gv_list = builder.genop_call(typedesc.tok_ll_newlist,
                                      typedesc.gv_ll_newlist,
                                      args_gv)



More information about the Pypy-commit mailing list