Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r79531:9b9ea4d9c72a
Date: 2015-09-08 11:37 +0200
http://bitbucket.org/pypy/pypy/changeset/9b9ea4d9c72a/

Log:    some fixes to translation

diff --git a/rpython/jit/metainterp/compile.py 
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -262,7 +262,7 @@
         del enable_opts['unroll']
 
     ops = history.operations[start:]
-    if 'unroll' not in enable_opts:
+    if 'unroll' not in enable_opts or not 
metainterp.cpu.supports_guard_gc_type:
         return compile_simple_loop(metainterp, greenkey, start, inputargs, ops,
                                    jumpargs, enable_opts)
     jitcell_token = make_jitcell_token(jitdriver_sd)
diff --git a/rpython/jit/metainterp/executor.py 
b/rpython/jit/metainterp/executor.py
--- a/rpython/jit/metainterp/executor.py
+++ b/rpython/jit/metainterp/executor.py
@@ -15,6 +15,7 @@
 
 # ____________________________________________________________
 
[email protected](4)
 def _do_call(cpu, metainterp, argboxes, descr, rettype):
     assert metainterp is not None
     # count the number of arguments of the different types
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py 
b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -170,7 +170,8 @@
 
     def _getfield(self, opinfo, descr, optheap, true_force=True):
         res = opinfo.getitem(descr, self.index, optheap)
-        if isinstance(res, PreambleOp):
+        if (isinstance(res, PreambleOp) and
+            optheap.optimizer.cpu.supports_guard_gc_type):
             if not true_force:
                 return res.op
             index = res.preamble_op.getarg(1).getint()
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py 
b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -147,12 +147,13 @@
             old_op = self.optimizer._newoperations[pos]
             if self.optimize_call_pure(op, old_op):
                 return
-        for i, old_op in enumerate(self.extra_call_pure):
-            if self.optimize_call_pure(op, old_op):
-                if isinstance(old_op, PreambleOp):
-                    old_op = self.optimizer.force_op_from_preamble(old_op)
-                    self.extra_call_pure[i] = old_op
-                return
+        if self.extra_call_pure:
+            for i, old_op in enumerate(self.extra_call_pure):
+                if self.optimize_call_pure(op, old_op):
+                    if isinstance(old_op, PreambleOp):
+                        old_op = self.optimizer.force_op_from_preamble(old_op)
+                        self.extra_call_pure[i] = old_op
+                    return
 
         # replace CALL_PURE with just CALL
         opnum = OpHelpers.call_for_descr(op.getdescr())
diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py 
b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -17,6 +17,7 @@
 
     See force_op_from_preamble for details how the extra things are put.
     """
+    op = None
     
     def __init__(self, op, preamble_op, invented_name):
         self.op = op
@@ -24,15 +25,23 @@
         self.invented_name = invented_name
 
     def numargs(self):
+        if self.op is None:
+            return 0
         return self.op.numargs()
 
     def getarglist(self):
+        if self.op is None:
+            return []
         return self.op.getarglist()
 
     def getarg(self, i):
+        if self.op is None:
+            return None
         return self.op.getarg(i)
 
     def getdescr(self):
+        if self.op is None:
+            return None
         return self.op.getdescr()
 
     def __repr__(self):
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -18,6 +18,8 @@
 class UnrollableOptimizer(Optimizer):    
     def force_op_from_preamble(self, preamble_op):
         if isinstance(preamble_op, PreambleOp):
+            if self.optunroll.short_preamble_producer is None:
+                assert False # unreachable code
             op = preamble_op.op
             self.optimizer.inparg_dict[op] = None # XXX ARGH
             # special hack for int_add(x, accumulator-const) optimization
diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py 
b/rpython/jit/metainterp/optimizeopt/vstring.py
--- a/rpython/jit/metainterp/optimizeopt/vstring.py
+++ b/rpython/jit/metainterp/optimizeopt/vstring.py
@@ -217,6 +217,9 @@
 
 class VStringSliceInfo(StrPtrInfo):
     length = -1
+    start = None
+    lgtop = None
+    s = None
     
     def __init__(self, s, start, length, mode):
         self.s = s
@@ -265,6 +268,10 @@
 
 class VStringConcatInfo(StrPtrInfo):
     #_attrs_ = ('mode', 'vleft', 'vright', '_is_virtual')
+
+    vleft = None
+    vright = None
+    _is_virtual = False
     
     def __init__(self, mode, vleft, vright, is_virtual):
         self.vleft = vleft
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to