Author: Ronan Lamy <ronan.l...@gmail.com> Branch: llconst Changeset: r80099:251f3b632147 Date: 2015-10-10 00:58 +0100 http://bitbucket.org/pypy/pypy/changeset/251f3b632147/
Log: Remove concretetype attribute from Constant and create LLConstant diff --git a/rpython/flowspace/model.py b/rpython/flowspace/model.py --- a/rpython/flowspace/model.py +++ b/rpython/flowspace/model.py @@ -337,12 +337,7 @@ class Constant(Hashable): - __slots__ = ["concretetype"] - - def __init__(self, value, concretetype=None): - Hashable.__init__(self, value) - if concretetype is not None: - self.concretetype = concretetype + __slots__ = [] def foldable(self): to_check = self.value diff --git a/rpython/memory/gctransform/transform.py b/rpython/memory/gctransform/transform.py --- a/rpython/memory/gctransform/transform.py +++ b/rpython/memory/gctransform/transform.py @@ -1,6 +1,6 @@ from rpython.rtyper.lltypesystem import lltype, llmemory from rpython.flowspace.model import ( - SpaceOperation, Variable, Constant, checkgraph) + SpaceOperation, Variable, checkgraph) from rpython.translator.unsimplify import insert_empty_block from rpython.translator.unsimplify import insert_empty_startblock from rpython.translator.unsimplify import starts_with_empty_block @@ -13,6 +13,7 @@ from rpython.rtyper import rmodel from rpython.rtyper.annlowlevel import MixLevelHelperAnnotator from rpython.rtyper.rtyper import LowLevelOpList +from rpython.rtyper.rmodel import inputconst from rpython.rtyper.rbuiltin import gen_cast from rpython.rlib.rarithmetic import ovfcheck from rpython.rtyper.lltypesystem.lloperation import llop @@ -273,7 +274,7 @@ def inittime_helper(self, ll_helper, ll_args, ll_result, inline=True): ptr = self.annotate_helper(ll_helper, ll_args, ll_result, inline=inline) - return Constant(ptr, lltype.typeOf(ptr)) + return inputconst(lltype.typeOf(ptr), ptr) def annotate_finalizer(self, ll_finalizer, ll_args, ll_result): fptr = self.annotate_helper(ll_finalizer, ll_args, ll_result) diff --git a/rpython/rlib/nonconst.py b/rpython/rlib/nonconst.py --- a/rpython/rlib/nonconst.py +++ b/rpython/rlib/nonconst.py @@ -1,9 +1,8 @@ - -""" simple non-constant constant. Ie constant which does not get annotated as constant +""" simple non-constant constant. +Ie constant which does not get annotated as constant """ from rpython.rtyper.extregistry import ExtRegistryEntry -from rpython.flowspace.model import Constant from rpython.annotator.model import not_const class NonConstant(object): @@ -39,7 +38,6 @@ def specialize_call(self, hop): hop.exception_cannot_occur() - retval = Constant(hop.r_result.convert_const(hop.args_v[0].value)) - retval.concretetype = hop.r_result.lowleveltype - return retval - + value = hop.r_result.convert_const(hop.args_v[0].value) + lltype = hop.r_result.lowleveltype + return hop.inputconst(lltype, value) diff --git a/rpython/rtyper/annlowlevel.py b/rpython/rtyper/annlowlevel.py --- a/rpython/rtyper/annlowlevel.py +++ b/rpython/rtyper/annlowlevel.py @@ -11,10 +11,9 @@ SomePtr, annotation_to_lltype, lltype_to_annotation) from rpython.rtyper.normalizecalls import perform_normalizations from rpython.rtyper.lltypesystem import lltype, llmemory -from rpython.flowspace.model import Constant from rpython.rlib.objectmodel import specialize from rpython.rtyper import extregistry -from rpython.rtyper.rmodel import warning +from rpython.rtyper.rmodel import warning, LLConstant class KeyComp(object): @@ -162,7 +161,7 @@ def constfunc(self, ll_function, args_s, s_result): p = self.delayedfunction(ll_function, args_s, s_result) - return Constant(p, lltype.typeOf(p)) + return LLConstant(p, lltype.typeOf(p)) def graph2delayed(self, graph, FUNCTYPE=None): if FUNCTYPE is None: @@ -177,7 +176,7 @@ def graph2const(self, graph): p = self.graph2delayed(graph) - return Constant(p, lltype.typeOf(p)) + return LLConstant(p, lltype.typeOf(p)) def getdelayedrepr(self, s_value, check_never_seen=True): """Like rtyper.getrepr(), but the resulting repr will not be setup() at @@ -309,7 +308,7 @@ vlist = hop.inputargs(*args_r) p = self.instance.llfnptr TYPE = lltype.typeOf(p) - c_func = Constant(p, TYPE) + c_func = LLConstant(p, TYPE) FUNCTYPE = TYPE.TO for r_arg, ARGTYPE in zip(args_r, FUNCTYPE.ARGS): assert r_arg.lowleveltype == ARGTYPE diff --git a/rpython/rtyper/rmodel.py b/rpython/rtyper/rmodel.py --- a/rpython/rtyper/rmodel.py +++ b/rpython/rtyper/rmodel.py @@ -355,8 +355,15 @@ # ____________________________________________________________ +class LLConstant(Constant): + __slots__ = ["concretetype"] + def __init__(self, value, concretetype): + Constant.__init__(self, value) + self.concretetype = concretetype + + def inputconst(reqtype, value): - """Return a Constant with the given value, of the requested type, + """Return a LLConstant with the given value, of the requested type, which can be a Repr instance or a low-level type. """ if isinstance(reqtype, Repr): @@ -369,9 +376,7 @@ if not lltype._contains_value(value): raise TyperError("inputconst(): expected a %r, got %r" % (lltype, value)) - c = Constant(value) - c.concretetype = lltype - return c + return LLConstant(value, lltype) class BrokenReprTyperError(TyperError): """ raised when trying to setup a Repr whose setup diff --git a/rpython/rtyper/rnone.py b/rpython/rtyper/rnone.py --- a/rpython/rtyper/rnone.py +++ b/rpython/rtyper/rnone.py @@ -1,6 +1,5 @@ -from rpython.flowspace.model import Constant from rpython.annotator.model import SomeNone -from rpython.rtyper.rmodel import Repr, TyperError, inputconst +from rpython.rtyper.rmodel import Repr, TyperError, inputconst, LLConstant from rpython.rtyper.lltypesystem.lltype import Void, Bool, Ptr, Char from rpython.rtyper.lltypesystem.llmemory import Address from rpython.rtyper.rpbc import SmallFunctionSetPBCRepr @@ -11,7 +10,7 @@ lowleveltype = Void def rtype_bool(self, hop): - return Constant(False, Bool) + return LLConstant(False, Bool) def none_call(self, hop): raise TyperError("attempt to call constant None") diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py --- a/rpython/rtyper/rpbc.py +++ b/rpython/rtyper/rpbc.py @@ -17,7 +17,7 @@ typeOf, Void, ForwardReference, Struct, Bool, Char, Ptr, malloc, nullptr, Array, Signed, cast_pointer, getfunctionptr) from rpython.rtyper.rmodel import (Repr, inputconst, CanBeNull, mangle, - warning, impossible_repr) + warning, impossible_repr, LLConstant) from rpython.tool.pairtype import pair, pairtype from rpython.translator.unsimplify import varoftype @@ -779,7 +779,7 @@ if access is r_pbc2.access_set: value = r_pbc2.convert_desc(frozendesc1) lltype = r_pbc2.lowleveltype - return Constant(value, lltype) + return LLConstant(value, lltype) return NotImplemented class __extend__(pairtype(MultipleFrozenPBCReprBase, diff --git a/rpython/rtyper/rptr.py b/rpython/rtyper/rptr.py --- a/rpython/rtyper/rptr.py +++ b/rpython/rtyper/rptr.py @@ -4,7 +4,7 @@ from rpython.rlib.rarithmetic import r_uint from rpython.rtyper.error import TyperError from rpython.rtyper.lltypesystem import lltype -from rpython.rtyper.rmodel import Repr +from rpython.rtyper.rmodel import Repr, inputconst from rpython.rtyper.rint import IntegerRepr from rpython.tool.pairtype import pairtype @@ -48,7 +48,7 @@ pass else: assert hop.s_result.is_constant() - return hop.inputconst(hop.r_result, hop.s_result.const) + return inputconst(hop.r_result, hop.s_result.const) assert attr in self.lowleveltype.TO._flds # check that the field exists FIELD_TYPE = getattr(self.lowleveltype.TO, attr) if isinstance(FIELD_TYPE, lltype.ContainerType): @@ -75,7 +75,7 @@ def rtype_len(self, hop): ARRAY = hop.args_r[0].lowleveltype.TO if isinstance(ARRAY, lltype.FixedSizeArray): - return hop.inputconst(lltype.Signed, ARRAY.length) + return inputconst(lltype.Signed, ARRAY.length) else: vlist = hop.inputargs(self) return hop.genop('getarraysize', vlist, @@ -100,7 +100,7 @@ opname = 'direct_call' else: opname = 'indirect_call' - vlist.append(hop.inputconst(lltype.Void, None)) + vlist.append(inputconst(lltype.Void, None)) hop.exception_is_here() return hop.genop(opname, vlist, resulttype = self.lowleveltype.TO.RESULT) @@ -123,15 +123,14 @@ if isinstance(hop.r_result, InteriorPtrRepr): v_array, v_index = hop.inputargs(r_ptr, lltype.Signed) INTERIOR_PTR_TYPE = r_ptr.lowleveltype._interior_ptr_type_with_index(ITEM_TYPE) - cflags = hop.inputconst(lltype.Void, {'flavor': 'gc'}) - args = [flowmodel.Constant(INTERIOR_PTR_TYPE, lltype.Void), - cflags] + cflags = inputconst(lltype.Void, {'flavor': 'gc'}) + args = [inputconst(lltype.Void, INTERIOR_PTR_TYPE), cflags] v_interior_ptr = hop.genop('malloc', args, resulttype=lltype.Ptr(INTERIOR_PTR_TYPE)) hop.genop('setfield', - [v_interior_ptr, flowmodel.Constant('ptr', lltype.Void), v_array]) + [v_interior_ptr, inputconst(lltype.Void, 'ptr'), v_array]) hop.genop('setfield', - [v_interior_ptr, flowmodel.Constant('index', lltype.Void), v_index]) + [v_interior_ptr, inputconst(lltype.Void, 'index'), v_index]) return v_interior_ptr else: newopname = 'getarraysubstruct' @@ -220,7 +219,7 @@ self.v_offsets.append(None) else: assert isinstance(offset, str) - self.v_offsets.append(flowmodel.Constant(offset, lltype.Void)) + self.v_offsets.append(inputconst(lltype.Void, offset)) self.parentptrtype = lltype.Ptr(ptrtype.PARENTTYPE) self.resulttype = lltype.Ptr(ptrtype.TO) assert numitemoffsets <= 1 @@ -237,7 +236,7 @@ name = nameiter.next() vlist.append( hop.genop('getfield', - [v_self, flowmodel.Constant(name, lltype.Void)], + [v_self, inputconst(lltype.Void, name)], resulttype=INTERIOR_TYPE._flds[name])) else: vlist.append(v_self) @@ -246,7 +245,7 @@ name = nameiter.next() vlist.append( hop.genop('getfield', - [v_self, flowmodel.Constant(name, lltype.Void)], + [v_self, inputconst(lltype.Void, name)], resulttype=INTERIOR_TYPE._flds[name])) else: vlist.append(v_offset) @@ -296,14 +295,14 @@ if isinstance(ITEM_TYPE, lltype.ContainerType): v_array, v_index = hop.inputargs(r_ptr, lltype.Signed) INTERIOR_PTR_TYPE = r_ptr.lowleveltype._interior_ptr_type_with_index(ITEM_TYPE) - cflags = hop.inputconst(lltype.Void, {'flavor': 'gc'}) - args = [flowmodel.Constant(INTERIOR_PTR_TYPE, lltype.Void), cflags] + cflags = inputconst(lltype.Void, {'flavor': 'gc'}) + args = [inputconst(lltype.Void, INTERIOR_PTR_TYPE), cflags] v_interior_ptr = hop.genop('malloc', args, resulttype=lltype.Ptr(INTERIOR_PTR_TYPE)) hop.genop('setfield', - [v_interior_ptr, flowmodel.Constant('ptr', lltype.Void), v_array]) + [v_interior_ptr, inputconst(lltype.Void, 'ptr'), v_array]) hop.genop('setfield', - [v_interior_ptr, flowmodel.Constant('index', lltype.Void), v_index]) + [v_interior_ptr, inputconst(lltype.Void, 'index'), v_index]) return v_interior_ptr else: v_self, v_index = hop.inputargs(r_ptr, lltype.Signed) diff --git a/rpython/translator/backendopt/constfold.py b/rpython/translator/backendopt/constfold.py --- a/rpython/translator/backendopt/constfold.py +++ b/rpython/translator/backendopt/constfold.py @@ -1,5 +1,6 @@ -from rpython.flowspace.model import (Constant, Variable, SpaceOperation, +from rpython.flowspace.model import (Variable, SpaceOperation, mkentrymap) +from rpython.rtyper.rmodel import LLConstant from rpython.rtyper.lltypesystem import lltype from rpython.rtyper.lltypesystem.lloperation import llop from rpython.translator.unsimplify import insert_empty_block, split_block @@ -13,7 +14,7 @@ vargs = [] args = [] for v in spaceop.args: - if isinstance(v, Constant): + if isinstance(v, LLConstant): args.append(v.value) elif v in constants: v = constants[v] @@ -41,7 +42,7 @@ # success in folding this space operation if spaceop.opname in fixup_op_result: result = fixup_op_result[spaceop.opname](result) - constants[spaceop.result] = Constant(result, RESTYPE) + constants[spaceop.result] = LLConstant(result, RESTYPE) folded_count += 1 continue # failed to fold an operation, exit early if requested @@ -50,7 +51,7 @@ else: if vargsmodif: if (spaceop.opname == 'indirect_call' - and isinstance(vargs[0], Constant)): + and isinstance(vargs[0], LLConstant)): spaceop = SpaceOperation('direct_call', vargs[:-1], spaceop.result) else: @@ -216,7 +217,7 @@ if isinstance(vexit, Variable): for link in block.exits: if vexit in link.args and link.exitcase != 'default': - remap = {vexit: Constant(link.llexitcase, + remap = {vexit: LLConstant(link.llexitcase, vexit.concretetype)} link.args = [remap.get(v, v) for v in link.args] count += 1 @@ -233,7 +234,7 @@ rest = links[1:] diffuse = [] for i, c in enumerate(firstlink.args): - if not isinstance(c, Constant): + if not isinstance(c, LLConstant): continue for lnk in rest: if lnk.args[i] != c: @@ -268,7 +269,7 @@ for link in list(graph.iterlinks()): constants = {} for v1, v2 in zip(link.args, link.target.inputargs): - if isinstance(v1, Constant): + if isinstance(v1, LLConstant): constants[v2] = v1 if constants: prepare_constant_fold_link(link, constants, splitblocks) diff --git a/rpython/translator/backendopt/inline.py b/rpython/translator/backendopt/inline.py --- a/rpython/translator/backendopt/inline.py +++ b/rpython/translator/backendopt/inline.py @@ -2,6 +2,7 @@ from rpython.flowspace.model import (Variable, Constant, Block, Link, SpaceOperation, FunctionGraph, mkentrymap) +from rpython.rtyper.rmodel import LLConstant, inputconst from rpython.rtyper.lltypesystem.lltype import Bool, Signed, typeOf, Void, Ptr, normalizeptr from rpython.tool.algo import sparsemat from rpython.translator.backendopt import removenoops @@ -355,9 +356,8 @@ def generic_exception_matching(self, afterblock, copiedexceptblock): #XXXXX don't look: insert blocks that do exception matching #for the cases where direct matching did not work - exc_match = Constant( - self.translator.rtyper.exceptiondata.fn_exception_match) - exc_match.concretetype = typeOf(exc_match.value) + ll_exc_match = self.translator.rtyper.exceptiondata.fn_exception_match + exc_match = inputconst(typeOf(ll_exc_match), ll_exc_match) blocks = [] for i, link in enumerate(afterblock.exits[1:]): etype = copiedexceptblock.inputargs[0].copy() @@ -366,8 +366,8 @@ block = Block([etype, evalue] + passon_vars) res = Variable() res.concretetype = Bool - cexitcase = Constant(link.llexitcase) - cexitcase.concretetype = typeOf(cexitcase.value) + exitcase = link.llexitcase + cexitcase = LLConstant(exitcase, typeOf(exitcase)) args = [exc_match, etype, cexitcase] block.operations.append(SpaceOperation("direct_call", args, res)) block.exitswitch = res @@ -597,8 +597,8 @@ '_dont_inline_', False): continue if candidate(graph): - tag = Constant('inline', Void) - label = Constant(n, Signed) + tag = LLConstant('inline', Void) + label = LLConstant(n, Signed) dummy = Variable() dummy.concretetype = Void count = SpaceOperation('instrument_count', diff --git a/rpython/translator/backendopt/malloc.py b/rpython/translator/backendopt/malloc.py --- a/rpython/translator/backendopt/malloc.py +++ b/rpython/translator/backendopt/malloc.py @@ -1,6 +1,7 @@ from rpython.flowspace.model import Variable, Constant, SpaceOperation from rpython.tool.algo.unionfind import UnionFind from rpython.rtyper.lltypesystem import lltype +from rpython.rtyper.rmodel import LLConstant from rpython.translator import simplify from rpython.translator.backendopt import removenoops from rpython.translator.backendopt.support import log @@ -88,7 +89,7 @@ for key in self.needsubmallocs: v = Variable() v.concretetype = self.newvarstype[key] - c = Constant(v.concretetype.TO, lltype.Void) + c = LLConstant(v.concretetype.TO, lltype.Void) if c.value == op.args[0].value: progress = False # replacing a malloc with # the same malloc! @@ -348,10 +349,8 @@ return False def recreate_malloc(self, c, v): - return SpaceOperation(self.MALLOC_OP, [c, - Constant({'flavor': 'gc'}, - lltype.Void)], - v) + return SpaceOperation( + self.MALLOC_OP, [c, LLConstant({'flavor': 'gc'}, lltype.Void)], v) def get_STRUCT(self, TYPE): STRUCT = TYPE.TO @@ -436,8 +435,7 @@ ('data', FIELDTYPE))) elif not isinstance(FIELDTYPE, lltype.ContainerType): example = FIELDTYPE._defl() - constant = Constant(example) - constant.concretetype = FIELDTYPE + constant = LLConstant(example, FIELDTYPE) self.flatconstants[key] = constant self.flatnames.append(key) self.newvarstype[key] = FIELDTYPE @@ -458,7 +456,7 @@ from rpython.rtyper.lltypesystem.rstr import string_repr msg = "unreachable operation (from malloc.py)" ll_msg = string_repr.convert_const(msg) - c_msg = Constant(ll_msg, lltype.typeOf(ll_msg)) + c_msg = LLConstant(ll_msg, lltype.typeOf(ll_msg)) return SpaceOperation("debug_fatalerror", [c_msg], v_result) def flowin_op(self, op, vars, newvarsmap): @@ -469,7 +467,7 @@ if key not in newvarsmap: newop = self.handle_unreachable(op.result) elif key in self.accessed_substructs: - c_name = Constant('data', lltype.Void) + c_name = LLConstant('data', lltype.Void) newop = SpaceOperation("getfield", [newvarsmap[key], c_name], op.result) @@ -486,7 +484,7 @@ newop = self.handle_unreachable(op.result) self.newops.append(newop) elif key in self.accessed_substructs: - c_name = Constant('data', lltype.Void) + c_name = LLConstant('data', lltype.Void) newop = SpaceOperation("setfield", [newvarsmap[key], c_name, op.args[2]], op.result) @@ -522,7 +520,7 @@ except KeyError: newop = self.handle_unreachable(op.result) else: - cname = Constant('data', lltype.Void) + cname = LLConstant('data', lltype.Void) newop = SpaceOperation(opname, [v, cname], op.result) @@ -530,7 +528,7 @@ elif op.opname in ("ptr_iszero", "ptr_nonzero"): # we know the pointer is not NULL if it comes from # a successful malloc - c = Constant(op.opname == "ptr_nonzero", lltype.Bool) + c = LLConstant(op.opname == "ptr_nonzero", lltype.Bool) newop = SpaceOperation('same_as', [c], op.result) self.newops.append(newop) else: diff --git a/rpython/translator/backendopt/mallocv.py b/rpython/translator/backendopt/mallocv.py --- a/rpython/translator/backendopt/mallocv.py +++ b/rpython/translator/backendopt/mallocv.py @@ -7,6 +7,7 @@ from rpython.rtyper.lltypesystem.lltype import getfunctionptr from rpython.rtyper.lltypesystem import lltype from rpython.rtyper.lltypesystem.lloperation import llop +from rpython.rtyper.rmodel import LLConstant def virtualize_mallocs(translator, graphs, verbose=False): @@ -576,16 +577,15 @@ v_incoming_value = varoftype(TVAL) block = Block([v_ignored_type, v_incoming_value]) # - c_EXCTYPE = Constant(typedesc.MALLOCTYPE, lltype.Void) + c_EXCTYPE = LLConstant(typedesc.MALLOCTYPE, lltype.Void) v = varoftype(lltype.Ptr(typedesc.MALLOCTYPE)) - c_flavor = Constant({'flavor': 'gc'}, lltype.Void) + c_flavor = LLConstant({'flavor': 'gc'}, lltype.Void) op = SpaceOperation('malloc', [c_EXCTYPE, c_flavor], v) block.operations.append(op) # for name, FIELDTYPE in typedesc.names_and_types: EXACTPTR = lltype.Ptr(typedesc.name2subtype[name]) - c_name = Constant(name) - c_name.concretetype = lltype.Void + c_name = LLConstant(name, lltype.Void) # v_in = varoftype(EXACTPTR) op = SpaceOperation('cast_pointer', [v_incoming_value], v_in) @@ -608,7 +608,7 @@ block.operations.append(op) # exc_type = self.mallocv.EXCTYPE_to_vtable[typedesc.MALLOCTYPE] - c_exc_type = Constant(exc_type, TEXC) + c_exc_type = LLConstant(exc_type, TEXC) block.closeblock(Link([c_exc_type, v_exc_value], exceptblock)) return block @@ -774,8 +774,7 @@ self.setnode(v_result, newrtnode) if v_result.concretetype is not lltype.Void: assert v_result.concretetype == lltype.typeOf(value) - c_value = Constant(value) - c_value.concretetype = v_result.concretetype + c_value = LLConstant(value, v_result.concretetype) self.renamings[newrtnode] = c_value def handle_default(self, op): @@ -793,7 +792,7 @@ from rpython.rtyper.lltypesystem.rstr import string_repr msg = 'unreachable: %s' % (op,) ll_msg = string_repr.convert_const(msg) - c_msg = Constant(ll_msg, lltype.typeOf(ll_msg)) + c_msg = LLConstant(ll_msg, lltype.typeOf(ll_msg)) newresult = self.make_rt_result(op.result) return [SpaceOperation('debug_fatalerror', [c_msg], newresult)] @@ -889,8 +888,7 @@ for name, FIELDTYPE in typedesc.names_and_types: fieldnode = RuntimeSpecNode(name, FIELDTYPE) virtualnode.fields.append(fieldnode) - c = Constant(FIELDTYPE._defl()) - c.concretetype = FIELDTYPE + c = LLConstant(FIELDTYPE._defl(), FIELDTYPE) self.renamings[fieldnode] = c self.v_expand_malloc = None # done return [] @@ -939,8 +937,7 @@ def handle_residual_call(self, op, newgraph, newnodes): fspecptr = getfunctionptr(newgraph) - newargs = [Constant(fspecptr, - concretetype=lltype.typeOf(fspecptr))] + newargs = [LLConstant(fspecptr, concretetype=lltype.typeOf(fspecptr))] newargs += self.expand_nodes(newnodes) newresult = self.make_rt_result(op.result) newop = SpaceOperation('direct_call', newargs, newresult) diff --git a/rpython/translator/backendopt/test/test_constfold.py b/rpython/translator/backendopt/test/test_constfold.py --- a/rpython/translator/backendopt/test/test_constfold.py +++ b/rpython/translator/backendopt/test/test_constfold.py @@ -1,9 +1,9 @@ -import py -from rpython.flowspace.model import checkgraph, Constant, summary +from rpython.flowspace.model import checkgraph, summary from rpython.translator.translator import TranslationContext, graphof from rpython.rtyper.llinterp import LLInterpreter from rpython.rtyper.lltypesystem import lltype from rpython.rtyper.lltypesystem.lloperation import llop +from rpython.rtyper.rmodel import LLConstant from rpython.rtyper import rclass from rpython.rlib import objectmodel from rpython.translator.backendopt.constfold import constant_fold_graph @@ -99,7 +99,7 @@ constant_fold_graph(graph) assert summary(graph) == {'int_mul': 1, 'int_eq': 3, 'int_add': 2} for link in graph.iterlinks(): - if Constant(139) in link.args: + if LLConstant(139, lltype.Signed) in link.args: break else: raise AssertionError("139 not found in the graph as a constant") @@ -316,7 +316,7 @@ elif n == 4: return -123 elif n == 5: return 12973 else: return n - + graph, t = get_graph(fn, [int]) from rpython.translator.backendopt.removenoops import remove_same_as from rpython.translator.backendopt import merge_if_blocks @@ -335,7 +335,7 @@ elif n == 4: return -123 elif n == 5: return 12973 else: return n - + graph, t = get_graph(fn, []) from rpython.translator.backendopt.removenoops import remove_same_as from rpython.translator.backendopt import merge_if_blocks diff --git a/rpython/translator/exceptiontransform.py b/rpython/translator/exceptiontransform.py --- a/rpython/translator/exceptiontransform.py +++ b/rpython/translator/exceptiontransform.py @@ -2,13 +2,13 @@ from rpython.translator.unsimplify import varoftype from rpython.translator.unsimplify import insert_empty_block, split_block from rpython.translator.backendopt import canraise, inline -from rpython.flowspace.model import Block, Constant, Variable, Link, \ - SpaceOperation, FunctionGraph, mkentrymap +from rpython.flowspace.model import ( + Block, Variable, Link, SpaceOperation, FunctionGraph, mkentrymap) from rpython.rtyper.lltypesystem import lltype, llmemory, rffi from rpython.rtyper.lltypesystem import lloperation from rpython.rtyper.rclass import ll_inst_type from rpython.rtyper import rtyper -from rpython.rtyper.rmodel import inputconst +from rpython.rtyper.rmodel import inputconst, LLConstant from rpython.rlib.rarithmetic import r_uint, r_longlong, r_ulonglong from rpython.rlib.rarithmetic import r_singlefloat, r_longfloat from rpython.rlib.debug import ll_assert @@ -41,10 +41,10 @@ assert 0, "not implemented yet" def error_constant(T): - return Constant(error_value(T), T) + return LLConstant(error_value(T), T) def constant_value(llvalue): - return Constant(llvalue, lltype.typeOf(llvalue)) + return LLConstant(llvalue, lltype.typeOf(llvalue)) class ExceptionTransformer(object): @@ -460,16 +460,16 @@ null_value = lltype.nullptr(self.lltype_of_exception_value.TO) self.exc_data_ptr = exc_data - self.cexcdata = Constant(exc_data, lltype.Ptr(self.EXCDATA)) - self.c_null_etype = Constant(null_type, self.lltype_of_exception_type) - self.c_null_evalue = Constant(null_value, self.lltype_of_exception_value) + self.cexcdata = LLConstant(exc_data, lltype.Ptr(self.EXCDATA)) + self.c_null_etype = LLConstant(null_type, self.lltype_of_exception_type) + self.c_null_evalue = LLConstant(null_value, self.lltype_of_exception_value) return exc_data, null_type, null_value def constant_func(self, name, inputtypes, rettype, graph, **kwds): FUNC_TYPE = lltype.FuncType(inputtypes, rettype) fn_ptr = lltype.functionptr(FUNC_TYPE, name, graph=graph, **kwds) - return Constant(fn_ptr, lltype.Ptr(FUNC_TYPE)) + return LLConstant(fn_ptr, lltype.Ptr(FUNC_TYPE)) def gen_getfield(self, name, llops): c_name = inputconst(lltype.Void, name) diff --git a/rpython/translator/transform.py b/rpython/translator/transform.py --- a/rpython/translator/transform.py +++ b/rpython/translator/transform.py @@ -9,6 +9,7 @@ SpaceOperation, Variable, Constant, Link, checkgraph) from rpython.annotator import model as annmodel from rpython.rtyper.lltypesystem import lltype +from rpython.rtyper.rmodel import inputconst def checkgraphs(self, blocks): seen = set() @@ -205,7 +206,8 @@ graph = rtyper.annotate_helper(stack_check, []) rtyper.specialize_more_blocks() stack_check_ptr = rtyper.getcallable(graph) - stack_check_ptr_const = Constant(stack_check_ptr, lltype.typeOf(stack_check_ptr)) + stack_check_ptr_const = inputconst(lltype.typeOf(stack_check_ptr), + stack_check_ptr) edges = set() insert_in = set() block2graph = {} _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit