[pypy-commit] pypy libgccjit-backend: Clarify _impl_guard; start adding boilerplate for bridges

dmalcolm noreply at buildbot.pypy.org
Thu Dec 18 19:01:27 CET 2014


Author: David Malcolm <dmalcolm at redhat.com>
Branch: libgccjit-backend
Changeset: r75017:a1db64631c41
Date: 2014-12-17 13:20 -0500
http://bitbucket.org/pypy/pypy/changeset/a1db64631c41/

Log:	Clarify _impl_guard; start adding boilerplate for bridges

diff --git a/rpython/jit/backend/libgccjit/assembler.py b/rpython/jit/backend/libgccjit/assembler.py
--- a/rpython/jit/backend/libgccjit/assembler.py
+++ b/rpython/jit/backend/libgccjit/assembler.py
@@ -259,6 +259,15 @@
 
         # FIXME: this leaks the gcc_jit_result
 
+    def assemble_bridge(self, logger, faildescr, inputargs, operations,
+                        original_loop_token, log):
+        print('assemble_bridge(%r)' % locals())
+        if not we_are_translated():
+            # Arguments should be unique
+            assert len(set(inputargs)) == len(inputargs)
+
+        raise foo
+
     def expr_to_rvalue(self, expr):
         """
         print('expr_to_rvalue')
@@ -391,9 +400,14 @@
                                             b_true, b_false)
 
         if istrue:
-            self.b_current = b_false
+            b_guard_failure = b_false
+            b_guard_success = b_true
         else:
-            self.b_current = b_true
+            b_guard_failure = b_true
+            b_guard_success = b_false
+
+        # Write out guard failure impl:
+        self.b_current = b_guard_failure
         self._impl_write_output_args(resop._fail_args)
         self._impl_write_jf_descr(resop)
         self.b_current.end_with_return(self.param_frame.as_rvalue ())
@@ -402,10 +416,8 @@
             rd_locs.append(idx * self.sizeof_signed)
         resop.getdescr().rd_locs = rd_locs
 
-        if istrue:
-            self.b_current = b_true
-        else:
-            self.b_current = b_false
+        # Further operations go into the guard success block:
+        self.b_current = b_guard_success
 
     def emit_guard_true(self, resop):
         self._impl_guard(resop, r_int(1))
diff --git a/rpython/jit/backend/libgccjit/runner.py b/rpython/jit/backend/libgccjit/runner.py
--- a/rpython/jit/backend/libgccjit/runner.py
+++ b/rpython/jit/backend/libgccjit/runner.py
@@ -17,20 +17,13 @@
 
     def compile_loop(self, inputargs, operations, looptoken,
                      log=True, name='', logger=None):
-        """
-        import sys
-        sys.stderr.write('compile_loop:\n')
-        for i, arg in enumerate(inputargs):
-            sys.stderr.write('  arg[%i] = %r\n' % (i, arg))
-            sys.stderr.write('    type(arg[%i]) = %r\n' % (i, type(arg)))
-        for i, op in enumerate(operations):
-            sys.stderr.write('  op[%i] = %r\n' % (i, op))
-            sys.stderr.write('    type(op[%i]) = %r\n' % (i, type(op)))
-        sys.stderr.write('  looptoken: %r\n' % (looptoken, ))
-        sys.stderr.write('  log: %r\n' % (log, ))
-        sys.stderr.write('  name: %r\n' % (name, ))
-        sys.stderr.write('  logger: %r\n' % (logger, ))
-        sys.stderr.write('compile_loop: %r\n' % locals ())
-        """
         return self.assembler.assemble_loop(inputargs, operations, looptoken, log,
                                             name, logger)
+
+    def compile_bridge(self, faildescr, inputargs, operations,
+                       original_loop_token, log=True, logger=None):
+        clt = original_loop_token.compiled_loop_token
+        clt.compiling_a_bridge()
+        return self.assembler.assemble_bridge(logger, faildescr, inputargs,
+                                              operations,
+                                              original_loop_token, log=log)


More information about the pypy-commit mailing list