[pypy-svn] r37079 - in pypy/dist/pypy/jit: codegen codegen/i386 codegen/i386/test codegen/llgraph codegen/llgraph/test codegen/llvm codegen/ppc codegen/ppc/test codegen/test timeshifter timeshifter/test
arigo at codespeak.net
arigo at codespeak.net
Sat Jan 20 22:59:40 CET 2007
Author: arigo
Date: Sat Jan 20 22:59:34 2007
New Revision: 37079
Modified:
pypy/dist/pypy/jit/codegen/graph2rgenop.py
pypy/dist/pypy/jit/codegen/i386/rgenop.py
pypy/dist/pypy/jit/codegen/i386/test/test_genc_portal.py
pypy/dist/pypy/jit/codegen/i386/test/test_operation.py
pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py
pypy/dist/pypy/jit/codegen/llgraph/rgenop.py
pypy/dist/pypy/jit/codegen/llgraph/test/test_rgenop.py
pypy/dist/pypy/jit/codegen/llvm/rgenop.py
pypy/dist/pypy/jit/codegen/model.py
pypy/dist/pypy/jit/codegen/ppc/rgenop.py
pypy/dist/pypy/jit/codegen/ppc/test/test_interp.py
pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
pypy/dist/pypy/jit/timeshifter/hrtyper.py
pypy/dist/pypy/jit/timeshifter/rtimeshift.py
pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py
Log:
(pedronis, arigo)
The point of this is to pass codegen/i386/test/test_genc_portal.py.
Change the newgraph() signature: it now returns a builder that is not
initially opened. Changed hrtyper to not generate residual graphs
recursively any more, but off a queue.
All i386 tests pass! Success. All ppc tests still pass too.
Apparently, no new failure in the llvm backend on wyvern.
Modified: pypy/dist/pypy/jit/codegen/graph2rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/graph2rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/graph2rgenop.py Sat Jan 20 22:59:34 2007
@@ -12,6 +12,7 @@
sigtoken = rgenop.sigToken(FUNC)
builder, gv_entrypoint, args_gv = rgenop.newgraph(sigtoken,
"compiled_%s" % (graph.name,))
+ builder.start_writing()
pending_blocks = {graph.startblock: (builder, args_gv)}
seen_blocks = {}
Modified: pypy/dist/pypy/jit/codegen/i386/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/i386/rgenop.py Sat Jan 20 22:59:34 2007
@@ -244,6 +244,7 @@
opname = 'int_floordiv'
input_is_64bits = True
reg_containing_result = eax
+ unsigned = False
@staticmethod
def emit(mc, op2):
# from the PPC backend which has the same problem:
@@ -1312,6 +1313,7 @@
mc = self.generate_block_code(outputargs_gv, outputargs_gv, operands,
minimal_stack_depth = targetlbl.targetstackdepth)
mc.JMP(rel32(targetlbl.targetaddr))
+ mc.done()
self.rgenop.close_mc(mc)
def finish_and_return(self, sigtoken, gv_returnvar):
@@ -1324,11 +1326,13 @@
mc.POP(ebp)
mc.RET()
# ----------------
+ mc.done()
self.rgenop.close_mc(mc)
def pause_writing(self, alive_gv):
mc = self.generate_block_code(alive_gv, renaming=False)
self.set_coming_from(mc)
+ mc.done()
self.rgenop.close_mc(mc)
return self
@@ -1430,6 +1434,7 @@
renaming=False)
result = FlexSwitch(self.rgenop, self.inputargs_gv, self.inputoperands)
default_builder = result.initialize(mc)
+ mc.done()
self.rgenop.close_mc(mc)
return result, default_builder
@@ -1568,9 +1573,6 @@
mc.PUSH(esi)
mc.PUSH(edi)
# ^^^ pushed 5 words including the retval ( == PROLOGUE_FIXED_WORDS)
- self.close_mc(mc)
- # NB. a bit of a hack: the first generated block of the function
- # will immediately follow, by construction
# ----------------
numargs = sigtoken # for now
inputargs_gv = []
@@ -1579,7 +1581,12 @@
inputargs_gv.append(GenVar())
inputoperands.append(mem(ebp, WORD * (2+i)))
builder = Builder(self, inputargs_gv, inputoperands)
- builder.start_writing()
+ # XXX this makes the code layout in memory a bit obscure: we have the
+ # prologue of the new graph somewhere in the middle of its first
+ # caller, all alone...
+ builder.set_coming_from(mc)
+ mc.done()
+ self.close_mc(mc)
#ops = [OpSameAs(v) for v in inputargs_gv]
#builder.operations.extend(ops)
#inputargs_gv = ops
Modified: pypy/dist/pypy/jit/codegen/i386/test/test_genc_portal.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/test/test_genc_portal.py (original)
+++ pypy/dist/pypy/jit/codegen/i386/test/test_genc_portal.py Sat Jan 20 22:59:34 2007
@@ -1,5 +1,4 @@
import py, os
-py.test.skip("in-progress")
from pypy.annotation import model as annmodel
from pypy.annotation.listdef import s_list_of_strings
from pypy.rlib.unroll import unrolling_iterable
Modified: pypy/dist/pypy/jit/codegen/i386/test/test_operation.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/test/test_operation.py (original)
+++ pypy/dist/pypy/jit/codegen/i386/test/test_operation.py Sat Jan 20 22:59:34 2007
@@ -59,6 +59,7 @@
arraytoken = rgenop.arrayToken(A)
builder0, gv_callable, _ = rgenop.newgraph(rgenop.sigToken(FUNC0),
'generated')
+ builder0.start_writing()
builder0.genop_setarrayitem(arraytoken, gv_a, rgenop.genconst(0),
rgenop.genconst(1))
builder0.genop_setarrayitem(arraytoken, gv_a, rgenop.genconst(1),
Modified: pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/i386/test/test_rgenop.py Sat Jan 20 22:59:34 2007
@@ -19,6 +19,7 @@
# ------------------------------------------------------------
builder0, gv_callable, [v0, v1, v2] = rgenop.newgraph(
rgenop.sigToken(FUNC3), 'generated')
+ builder0.start_writing()
v3 = builder0.genop_malloc_varsize(varsizealloctoken,
rgenop.genconst(2))
v4 = builder0.genop1('ptr_iszero', v3)
Modified: pypy/dist/pypy/jit/codegen/llgraph/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/llgraph/rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/llgraph/rgenop.py Sat Jan 20 22:59:34 2007
@@ -289,13 +289,11 @@
currently_writing = None
def newgraph(self, (ARGS_gv, gv_RESULT, gv_FUNCTYPE), name):
- debug_assert(self.currently_writing is None,
- "newgraph: currently_writing")
gv_func = llimpl.newgraph(gv_FUNCTYPE.v, name)
- builder = LLBuilder(self, gv_func, llimpl.getstartblock(gv_func))
- inputargs_gv = [LLVar(llimpl.getinputarg(builder.b, i))
+ builder = LLBuilder(self, gv_func, llimpl.nullblock)
+ builder.later_block = llimpl.getstartblock(gv_func)
+ inputargs_gv = [LLVar(llimpl.getinputarg(builder.later_block, i))
for i in range(len(ARGS_gv))]
- self.currently_writing = builder
return builder, LLConst(gv_func), inputargs_gv
@staticmethod
Modified: pypy/dist/pypy/jit/codegen/llgraph/test/test_rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/llgraph/test/test_rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/llgraph/test/test_rgenop.py Sat Jan 20 22:59:34 2007
@@ -44,6 +44,7 @@
readertoken = rgenop.sigToken(lltype.typeOf(reader_ptr).TO)
builder, gv_f, [gv_x] = rgenop.newgraph(sigtoken, "f")
+ builder.start_writing()
gv_y = builder.genop2("int_mul", gv_x, rgenop.genconst(2))
gv_base = builder.get_frame_base()
@@ -61,6 +62,7 @@
rgenop = RGenOp()
sigtoken = rgenop.sigToken(F1)
builder, gv_adder, [gv_x] = rgenop.newgraph(sigtoken, "adder")
+ builder.start_writing()
gv_result = builder.genop2("int_add", gv_x, rgenop.genconst(5))
builder.finish_and_return(sigtoken, gv_result)
#builder.end() <--- the point
Modified: pypy/dist/pypy/jit/codegen/llvm/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/llvm/rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/llvm/rgenop.py Sat Jan 20 22:59:34 2007
@@ -811,7 +811,6 @@
self.funcsig[n] = '%s %%%s' % (restype, name)
self.gv_entrypoint = IntConst(n) #note: updated by Builder.end() (i.e after compilation)
args = list(prologueblock.inputargs)
- builder.start_writing()
return builder, self.gv_entrypoint, args
@specialize.genconst(1)
Modified: pypy/dist/pypy/jit/codegen/model.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/model.py (original)
+++ pypy/dist/pypy/jit/codegen/model.py Sat Jan 20 22:59:34 2007
@@ -201,7 +201,10 @@
inputargs_gv where the new builder is for the startblock,
entrypoint is the address of the new function as GenConst and
inputargs_gv is the location of each argument on entry to the
- function. name is for debugging purposes"""
+ function. name is for debugging purposes. The fresh builder
+ is initially paused, you must call start_writing() before
+ actually putting operations in it.
+ """
raise NotImplementedError
# all staticmethods commented out for the sake of the annotator
Modified: pypy/dist/pypy/jit/codegen/ppc/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/ppc/rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/ppc/rgenop.py Sat Jan 20 22:59:34 2007
@@ -413,7 +413,6 @@
return self
else:
self._open()
- self.closed = False
self.maybe_patch_start_here()
return self
@@ -520,6 +519,7 @@
def _open(self):
self.asm.mc = self.rgenop.open_mc()
+ self.closed = False
def _close(self):
self.rgenop.close_mc(self.asm.mc)
Modified: pypy/dist/pypy/jit/codegen/ppc/test/test_interp.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/ppc/test/test_interp.py (original)
+++ pypy/dist/pypy/jit/codegen/ppc/test/test_interp.py Sat Jan 20 22:59:34 2007
@@ -14,6 +14,7 @@
rgenop = LLTypeRGenOp()
sigtoken = rgenop.sigToken(FUNC)
builder, gv_add_one, [gv_x] = rgenop.newgraph(sigtoken, "adder")
+ builder.start_writing()
gv_result = builder.genop2("int_add", gv_x, rgenop.genconst(n))
builder.finish_and_return(sigtoken, gv_result)
builder.end()
Modified: pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/test/rgenop_tests.py (original)
+++ pypy/dist/pypy/jit/codegen/test/rgenop_tests.py Sat Jan 20 22:59:34 2007
@@ -15,6 +15,7 @@
# 'return x+n'
sigtoken = rgenop.sigToken(FUNC)
builder, gv_add_one, [gv_x] = rgenop.newgraph(sigtoken, "adder")
+ builder.start_writing()
gv_result = builder.genop2("int_add", gv_x, rgenop.genconst(n))
builder.finish_and_return(sigtoken, gv_result)
builder.end()
@@ -37,6 +38,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC2)
builder, gv_dummyfn, [gv_x, gv_y] = rgenop.newgraph(sigtoken, "dummy")
+ builder.start_writing()
gv_z = builder.genop2("int_sub", gv_x, rgenop.genconst(1))
args_gv = [gv_y, gv_z, gv_x]
@@ -74,6 +76,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC100)
builder, gv_largedummyfn, gvs = rgenop.newgraph(sigtoken, "largedummy")
+ builder.start_writing()
for i in range(0, 100, 2):
gvs.append(builder.genop2("int_sub", gvs[i], gvs[i+1]))
@@ -123,6 +126,7 @@
sigtoken = rgenop.sigToken(FUNC2)
builder, gv_branchingfn, [gv_x, gv_y] = rgenop.newgraph(sigtoken,
"branching")
+ builder.start_writing()
gv_cond = builder.genop2("int_gt", gv_x, rgenop.genconst(5))
false_builder = builder.jump_if_false(gv_cond, [gv_y])
@@ -191,6 +195,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC2)
builder, gv_gotofn, [gv_x, gv_y] = rgenop.newgraph(sigtoken, "goto")
+ builder.start_writing()
[gv_x, gv_y, gv_z],loopblock,bodybuilder = loop_start(
rgenop, builder, signed_kind, gv_x, gv_y)
@@ -221,6 +226,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC2)
builder, gv_gotofn, [gv_x1, gv_unused] = rgenop.newgraph(sigtoken, "if")
+ builder.start_writing()
# check
args_gv = [gv_x1, gv_unused]
@@ -271,6 +277,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC2)
builder, gv_switch, [gv0, gv1] = rgenop.newgraph(sigtoken, "switch")
+ builder.start_writing()
flexswitch, default_builder = builder.flexswitch(gv0, [gv1])
const21 = rgenop.genconst(21)
@@ -319,6 +326,7 @@
signed_tok = rgenop.kindToken(lltype.Signed)
f2_token = rgenop.sigToken(FUNC2)
builder, gv_switch, (gv0, gv1) = rgenop.newgraph(f2_token, "large_switch")
+ builder.start_writing()
flexswitch, default_builder = builder.flexswitch(gv0, [gv1])
const21 = rgenop.genconst(21)
@@ -362,6 +370,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC)
builder, gv_fact, [gv_x] = rgenop.newgraph(sigtoken, "fact")
+ builder.start_writing()
gv_cond = builder.genop1("int_is_true", gv_x)
@@ -398,6 +407,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC)
builder, gv_f, [gv_x] = rgenop.newgraph(sigtoken, "abs")
+ builder.start_writing()
gv_cond = builder.genop2("int_gt", gv_x, rgenop.genconst(0))
@@ -440,6 +450,7 @@
bool_kind = rgenop.kindToken(lltype.Bool)
sigtoken = rgenop.sigToken(FUNC)
builder, gv_f, [gv_y] = rgenop.newgraph(sigtoken, "abs")
+ builder.start_writing()
gv_x = builder.genop2("int_le", rgenop.genconst(2), gv_y)
@@ -469,6 +480,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC)
builder, gv_f, [gv_y] = rgenop.newgraph(sigtoken, "foo")
+ builder.start_writing()
gv_result = builder.genop2("int_eq", gv_y, rgenop.genconst(0))
target1 = builder.jump_if_false(gv_result, [gv_result])
@@ -497,6 +509,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC)
builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken, "f")
+ builder.start_writing()
gv_one = rgenop.genconst(1)
@@ -548,6 +561,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC2)
builder, gv_f, [gv_x, gv_y] = rgenop.newgraph(sigtoken, "f")
+ builder.start_writing()
gv_c = builder.genop2("int_ne", gv_x, rgenop.genconst(0))
@@ -593,6 +607,7 @@
sig1token = rgenop.sigToken(FUNC)
sig100token = rgenop.sigToken(FUNC100)
builder, gv_callable, [gv_x, gv_y] = rgenop.newgraph(sig2token, "f")
+ builder.start_writing()
gv_z = builder.genop_call(sig100token, gv_largedummy, [gv_y]*100)
gv_w = builder.genop_call(sig1token, gv_add1, [gv_x])
@@ -857,6 +872,7 @@
sigtoken = rgenop.sigToken(FUNC2)
builder, gv_callable, [gv_x, gv_y] = rgenop.newgraph(sigtoken,
"multicmp")
+ builder.start_writing()
args_gv = [gv_x, gv_y]
builder.enter_next_block([signed_kind, signed_kind], args_gv)
@@ -908,6 +924,7 @@
sigtoken = rgenop.sigToken(FUNC)
builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken,
"multicmp")
+ builder.start_writing()
gv_one = rgenop.genconst(1)
gv_gt = builder.genop2("int_gt", gv_one, gv_x)
@@ -962,6 +979,7 @@
sigtoken = rgenop.sigToken(FUNC)
builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken,
"tightloop")
+ builder.start_writing()
args_gv = [gv_x]
loopstart = builder.enter_next_block([signed_kind], args_gv)
[gv_x] = args_gv
@@ -988,11 +1006,13 @@
sigtoken = rgenop.sigToken(FUNC)
builder, gv_verysmall_callable, [gv_x] = rgenop.newgraph(sigtoken,
"verysmall")
+ builder.start_writing()
builder.finish_and_return(sigtoken, rgenop.genconst(17))
builder.end()
builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken,
"jtbwmv")
+ builder.start_writing()
gv_cond = builder.genop1("int_is_true", gv_x)
builder2 = builder.jump_if_false(gv_cond, [gv_x])
builder = builder.pause_writing([gv_x])
@@ -1027,6 +1047,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC)
builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken, "sameas")
+ builder.start_writing()
gv_nineteen = builder.genop_same_as(signed_kind, rgenop.genconst(19))
assert not gv_nineteen.is_const # 'same_as' must return a variable
builder.finish_and_return(sigtoken, gv_nineteen)
@@ -1090,6 +1111,7 @@
signed_kind = rgenop.kindToken(lltype.Signed)
sigtoken = rgenop.sigToken(FUNC)
builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken, "defaultonly")
+ builder.start_writing()
flexswitch, default_builder = builder.flexswitch(gv_x, [gv_x])
default_builder.finish_and_return(sigtoken, gv_x)
builder.end()
Modified: pypy/dist/pypy/jit/timeshifter/hrtyper.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/hrtyper.py (original)
+++ pypy/dist/pypy/jit/timeshifter/hrtyper.py Sat Jan 20 22:59:34 2007
@@ -260,8 +260,15 @@
vinfo_read_forced_ptr)
self.vinfo_read_forced_token = RGenOp.sigToken(
lltype.typeOf(vinfo_read_forced_ptr).TO)
-
-
+
+ # global state for the portal corresponding to this timeshifted world
+ class PortalState(object):
+ pass
+ def compile_more_functions():
+ "Empty by default; overridden in rewire_portal()"
+ self.portalstate = PortalState()
+ self.portalstate.compile_more_functions = compile_more_functions
+
def specialize(self, origportalgraph=None, view=False):
"""
Driver for running the timeshifter.
@@ -352,12 +359,7 @@
args_specification = unrolling_iterable(args_specification)
fresh_jitstate = self.ll_fresh_jitstate
finish_jitstate = self.ll_finish_jitstate
-
- class PortalState(object):
- def __init__(self):
- self.cache = {}
-
- state = PortalState()
+ sigtoken = rgenop.sigToken(FUNC)
# debug helper
def readportal(*args):
@@ -400,7 +402,6 @@
gv_generated = cache[key]
except KeyError:
portal_ts_args = ()
- sigtoken = rgenop.sigToken(FUNC)
builder, gv_generated, inputargs_gv = rgenop.newgraph(sigtoken,
"generated")
cache[key] = gv_generated
@@ -418,15 +419,27 @@
i += make_arg_redbox.consumes
portal_ts_args += (box,)
+ state.graph_compilation_queue.append((top_jitstate, portal_ts_args))
+ compile_more_functions()
+
+ fn = gv_generated.revealconst(lltype.Ptr(FUNC))
+ return fn(*residualargs)
+
+ def compile_more_functions():
+ while state.graph_compilation_queue:
+ top_jitstate, portal_ts_args = state.graph_compilation_queue.pop()
+ builder = top_jitstate.curbuilder
+ builder.start_writing()
top_jitstate = portal_fn(top_jitstate, *portal_ts_args)
if top_jitstate is not None:
finish_jitstate(top_jitstate, sigtoken)
-
builder.end()
builder.show_incremental_progress()
- fn = gv_generated.revealconst(lltype.Ptr(FUNC))
- return fn(*residualargs)
+ state = self.portalstate
+ state.cache = {}
+ state.graph_compilation_queue = []
+ state.compile_more_functions = compile_more_functions
args_s = [annmodel.lltype_to_annotation(v.concretetype) for
v in origportalgraph.getargs()]
@@ -464,7 +477,6 @@
box = args[i]
args_gv.append(box.getgenvar(jitstate))
i = i + 1
- sigtoken = rgenop.sigToken(FUNC)
cache = state.cache
try:
gv_generated = cache[key]
@@ -489,14 +501,8 @@
portal_ts_args += (box,)
top_jitstate = fresh_jitstate(builder)
- top_jitstate = portal_fn(top_jitstate, *portal_ts_args)
- if top_jitstate is not None:
- finish_jitstate(top_jitstate, sigtoken)
-
- builder.end()
- builder.show_incremental_progress()
+ state.graph_compilation_queue.append((top_jitstate, portal_ts_args))
-
gv_res = curbuilder.genop_call(sigtoken, gv_generated, args_gv)
fetch_global_excdata(jitstate)
Modified: pypy/dist/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rtimeshift.py (original)
+++ pypy/dist/pypy/jit/timeshifter/rtimeshift.py Sat Jan 20 22:59:34 2007
@@ -596,25 +596,26 @@
MC_CALL_NOT_TAKEN = -2
-def ll_continue_compilation(promotion_point_ptr, value):
- try:
- promotion_point = cast_base_ptr_to_instance(PromotionPoint,
- promotion_point_ptr)
- path = [None]
- root = promotion_point.promotion_path.follow_path(path)
- gv_value = root.rgenop.genconst(value)
- resuminginfo = ResumingInfo(promotion_point, gv_value, path)
- root.continue_compilation(resuminginfo)
- except Exception, e:
- lloperation.llop.debug_fatalerror(lltype.Void,
- "compilation-time error %s" % e)
-
class PromotionDesc:
__metatype__ = cachedtype
def __init__(self, ERASED, hrtyper):
-## (s_PromotionPoint,
-## r_PromotionPoint) = hrtyper.s_r_instanceof(PromotionPoint)
+ state = hrtyper.portalstate
+
+ def ll_continue_compilation(promotion_point_ptr, value):
+ try:
+ promotion_point = cast_base_ptr_to_instance(
+ PromotionPoint, promotion_point_ptr)
+ path = [None]
+ root = promotion_point.promotion_path.follow_path(path)
+ gv_value = root.rgenop.genconst(value)
+ resuminginfo = ResumingInfo(promotion_point, gv_value, path)
+ root.continue_compilation(resuminginfo)
+ state.compile_more_functions()
+ except Exception, e:
+ lloperation.llop.debug_fatalerror(
+ lltype.Void, "compilation-time error %s" % e)
+
fnptr = hrtyper.annhelper.delayedfunction(
ll_continue_compilation,
[annmodel.SomePtr(base_ptr_lltype()),
Modified: pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py (original)
+++ pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py Sat Jan 20 22:59:34 2007
@@ -159,6 +159,7 @@
sigtoken = rgenop.sigToken(FUNC)
builder, gv_generated, inputargs_gv = rgenop.newgraph(sigtoken,
"generated")
+ builder.start_writing()
i = 0
for color in argcolors:
if color == "green":
More information about the Pypy-commit
mailing list