Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult
Changeset: r77774:8010cbfca5a0
Date: 2015-06-02 16:52 +0200
http://bitbucket.org/pypy/pypy/changeset/8010cbfca5a0/

Log:    fix fix fix fix

diff --git a/rpython/jit/metainterp/history.py 
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -760,7 +760,7 @@
         op = ResOperation(opnum, argboxes, descr)
         if value is None:
             assert op.type == 'v'
-        elif type(value) is bool:
+        elif not we_are_translated() and type(value) is bool:
             assert op.type == 'i'
             op.setint(int(value))
         elif isinstance(value, float):
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py 
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -836,6 +836,7 @@
     def optimize_STRGETITEM(self, op):
         indexb = self.getintbound(op.getarg(1))
         if indexb.is_constant():
+            raise Exception("implement me")
             arrayvalue = self.getvalue(op.getarg(0))
             arrayvalue.make_len_gt(MODE_STR, op.getdescr(), 
indexvalue.box.getint())
         self.optimize_default(op)
@@ -843,6 +844,7 @@
     def optimize_UNICODEGETITEM(self, op):
         indexb = self.getintbound(op.getarg(1))
         if indexb.is_constant():
+            raise Exception("implement me")
             arrayvalue = self.getvalue(op.getarg(0))
             arrayvalue.make_len_gt(MODE_UNICODE, op.getdescr(), 
indexvalue.box.getint())
         self.optimize_default(op)
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py 
b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -262,6 +262,8 @@
             box = self.get_box_replacement(box)
             if box.is_constant():
                 if not box.same_constant(constbox):
+                    r = self.optimizer.metainterp_sd.logger_ops.repr_of_resop(
+                        op)
                     raise InvalidLoop('A GUARD_VALUE (%s) was proven '
                                       'to always fail' % r)
                 return
diff --git a/rpython/jit/metainterp/optimizeopt/simplify.py 
b/rpython/jit/metainterp/optimizeopt/simplify.py
--- a/rpython/jit/metainterp/optimizeopt/simplify.py
+++ b/rpython/jit/metainterp/optimizeopt/simplify.py
@@ -33,8 +33,9 @@
         pass
 
     def optimize_VIRTUAL_REF(self, op):
-        op = ResOperation(rop.SAME_AS, [op.getarg(0)], op.result)
-        self.emit_operation(op)
+        newop = ResOperation(rop.SAME_AS_R, [op.getarg(0)], op.result)
+        self.replace_op_with(op, newop)
+        self.emit_operation(newop)
 
     def optimize_QUASIIMMUT_FIELD(self, op):
         # xxx ideally we could also kill the following GUARD_NOT_INVALIDATED
diff --git a/rpython/jit/metainterp/pyjitpl.py 
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1382,10 +1382,9 @@
         vrefinfo = metainterp.staticdata.virtualref_info
         obj = box.getref_base()
         vref = vrefinfo.virtual_ref_during_tracing(obj)
-        resbox = history.BoxPtr(vref)
+        cindex = history.ConstInt(len(metainterp.virtualref_boxes) // 2)
+        resbox = metainterp.history.record(rop.VIRTUAL_REF, [box, cindex], 
vref)
         self.metainterp.heapcache.new(resbox)
-        cindex = history.ConstInt(len(metainterp.virtualref_boxes) // 2)
-        metainterp.history.record(rop.VIRTUAL_REF, [box, cindex], resbox)
         # Note: we allocate a JIT_VIRTUAL_REF here
         # (in virtual_ref_during_tracing()), in order to detect when
         # the virtual escapes during tracing already.  We record it as a
@@ -2975,7 +2974,7 @@
         num_extra_guards = 0
         while True:
             op = self.history.operations[-1-num_extra_guards]
-            if op.getopnum() == rop.CALL_MAY_FORCE:
+            if op.is_call_may_force():
                 break
             assert op.is_guard()
             num_extra_guards += 1
@@ -3004,29 +3003,31 @@
         for i in range(cif_description.nargs):
             kind, descr, itemsize = get_arg_descr(self.cpu,
                                                   cif_description.atypes[i])
+            ofs = cif_description.exchange_args[i]
+            assert ofs % itemsize == 0     # alignment check
             if kind == 'i':
-                box_arg = history.BoxInt()
+                box_arg = self.history.record(rop.GETARRAYITEM_RAW_I,
+                                    [box_exchange_buffer,
+                                     ConstInt(ofs // itemsize)],
+                                     0, descr)
             elif kind == 'f':
-                box_arg = history.BoxFloat()
+                box_arg = self.history.record(rop.GETARRAYITEM_RAW_F,
+                                    [box_exchange_buffer,
+                                     ConstInt(ofs // itemsize)],
+                                     0.0, descr)
             else:
                 assert kind == 'v'
                 continue
-            ofs = cif_description.exchange_args[i]
-            assert ofs % itemsize == 0     # alignment check
-            self.history.record(rop.GETARRAYITEM_RAW,
-                                [box_exchange_buffer,
-                                 ConstInt(ofs // itemsize)],
-                                box_arg, descr)
             arg_boxes.append(box_arg)
         #
-        box_result = op.result
         # for now, any call via libffi saves and restores everything
         # (that is, errno and SetLastError/GetLastError on Windows)
         # Note these flags match the ones in clibffi.ll_callback
         c_saveall = ConstInt(rffi.RFFI_ERR_ALL | rffi.RFFI_ALT_ERRNO)
-        self.history.record(rop.CALL_RELEASE_GIL,
-                            [c_saveall, op.getarg(2)] + arg_boxes,
-                            box_result, calldescr)
+        if op.type == 'i':
+            self.history.record(rop.CALL_RELEASE_GIL,
+                                [c_saveall, op.getarg(2)] + arg_boxes,
+                                box_result, calldescr)
         #
         self.history.operations.extend(extra_guards)
         #
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to