[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