[pypy-commit] pypy jit-cleanup: Move new_ref_dict() to rpython.jit.metainterp.history
rlamy
pypy.commits at gmail.com
Wed Apr 3 19:01:43 EDT 2019
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: jit-cleanup
Changeset: r96413:e6ca265bbc8a
Date: 2019-04-03 20:28 +0100
http://bitbucket.org/pypy/pypy/changeset/e6ca265bbc8a/
Log: Move new_ref_dict() to rpython.jit.metainterp.history
diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -1,18 +1,15 @@
from rpython.rlib import rgc
-from rpython.rlib.objectmodel import we_are_translated, r_dict, always_inline
+from rpython.rlib.objectmodel import we_are_translated, always_inline
from rpython.rlib.rarithmetic import ovfcheck, highest_bit
from rpython.rtyper.lltypesystem import llmemory, lltype, rstr
from rpython.rtyper.annlowlevel import cast_instance_to_gcref
-from rpython.jit.metainterp import history
-from rpython.jit.metainterp.history import ConstInt, ConstPtr
+from rpython.jit.metainterp.history import (
+ ConstInt, ConstPtr, JitCellToken, new_ref_dict)
from rpython.jit.metainterp.resoperation import ResOperation, rop, OpHelpers
-from rpython.jit.metainterp.typesystem import rd_eq, rd_hash
from rpython.jit.codewriter import heaptracker
from rpython.jit.backend.llsupport.symbolic import (WORD,
get_field_token, get_array_token)
-from rpython.jit.backend.llsupport.descr import SizeDescr, ArrayDescr,\
- FLAG_POINTER
-from rpython.jit.metainterp.history import JitCellToken
+from rpython.jit.backend.llsupport.descr import SizeDescr, ArrayDescr
from rpython.jit.backend.llsupport.descr import (unpack_arraydescr,
unpack_fielddescr, unpack_interiorfielddescr)
from rpython.rtyper.lltypesystem.lloperation import llop
@@ -608,11 +605,11 @@
def handle_call_assembler(self, op):
descrs = self.gc_ll_descr.getframedescrs(self.cpu)
loop_token = op.getdescr()
- assert isinstance(loop_token, history.JitCellToken)
+ assert isinstance(loop_token, JitCellToken)
jfi = loop_token.compiled_loop_token.frame_info
llfi = heaptracker.adr2int(llmemory.cast_ptr_to_adr(jfi))
frame = self.gen_malloc_frame(llfi)
- self.emit_setfield(frame, history.ConstInt(llfi),
+ self.emit_setfield(frame, ConstInt(llfi),
descr=descrs.jf_frame_info)
arglist = op.getarglist()
index_list = loop_token.compiled_loop_token._ll_initial_locs
@@ -948,7 +945,7 @@
def _gcref_index(self, gcref):
if self.gcrefs_map is None:
- self.gcrefs_map = r_dict(rd_eq, rd_hash)
+ self.gcrefs_map = new_ref_dict()
try:
return self.gcrefs_map[gcref]
except KeyError:
diff --git a/rpython/jit/backend/test/jitlog_test.py b/rpython/jit/backend/test/jitlog_test.py
--- a/rpython/jit/backend/test/jitlog_test.py
+++ b/rpython/jit/backend/test/jitlog_test.py
@@ -3,7 +3,6 @@
from rpython.rlib import debug
from rpython.jit.tool.oparser import pure_parse
from rpython.jit.metainterp import logger
-from rpython.jit.metainterp.typesystem import llhelper
from rpython.rlib.rjitlog import rjitlog as jl
from StringIO import StringIO
from rpython.jit.metainterp.optimizeopt.util import equaloplists
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
@@ -3,8 +3,8 @@
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
from rpython.rtyper.annlowlevel import (
cast_gcref_to_instance, cast_instance_to_gcref)
-from rpython.rlib.objectmodel import we_are_translated, Symbolic
-from rpython.rlib.objectmodel import compute_unique_id, specialize
+from rpython.rlib.objectmodel import (
+ we_are_translated, Symbolic, compute_unique_id, specialize, r_dict)
from rpython.rlib.rarithmetic import r_int64, is_valid_int
from rpython.rlib.rarithmetic import LONG_BIT, intmask, r_uint
from rpython.rlib.jit import Counters
@@ -386,6 +386,20 @@
return result
_const_ptr_for_unicode = {}
+# A dict whose keys are refs (like the .value of ConstPtr).
+# It is an r_dict. Note that NULL is not allowed as a key.
+ at specialize.call_location()
+def new_ref_dict():
+ return r_dict(rd_eq, rd_hash, simple_hash_eq=True)
+
+def rd_eq(ref1, ref2):
+ return ref1 == ref2
+
+def rd_hash(ref):
+ assert ref
+ return lltype.identityhash(ref)
+
+
# ____________________________________________________________
# The JitCellToken class is the root of a tree of traces. Each branch ends
diff --git a/rpython/jit/metainterp/opencoder.py b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -6,14 +6,14 @@
Snapshot index for guards points to snapshot stored in _snapshots of trace
"""
-from rpython.jit.metainterp.history import ConstInt, Const, ConstFloat, ConstPtr
+from rpython.jit.metainterp.history import (
+ ConstInt, Const, ConstFloat, ConstPtr, new_ref_dict)
from rpython.jit.metainterp.resoperation import AbstractResOp, AbstractInputArg,\
ResOperation, oparity, rop, opwithdescr, GuardResOp, IntOp, FloatOp, RefOp,\
opclasses
from rpython.rlib.rarithmetic import intmask, r_uint
from rpython.rlib.objectmodel import we_are_translated, specialize
from rpython.rtyper.lltypesystem import rffi, lltype, llmemory
-from rpython.jit.metainterp.typesystem import llhelper
TAGINT, TAGCONSTPTR, TAGCONSTOTHER, TAGBOX = range(4)
TAGMASK = 0x3
@@ -179,7 +179,7 @@
if opwithdescr[opnum]:
descr_index = self._next()
if rop.is_guard(opnum):
- update_liveranges(self.trace._snapshots[descr_index], index,
+ update_liveranges(self.trace._snapshots[descr_index], index,
liveranges)
if opclasses[opnum].type != 'v':
return index + 1
@@ -274,7 +274,7 @@
self._consts_ptr = 0
self._descrs = [None]
self._refs = [lltype.nullptr(llmemory.GCREF.TO)]
- self._refs_dict = llhelper.new_ref_dict_3()
+ self._refs_dict = new_ref_dict()
self._bigints = []
self._bigints_dict = {}
self._floats = []
@@ -304,7 +304,7 @@
assert not self.tag_overflow
self._bigints_dict = {}
- self._refs_dict = llhelper.new_ref_dict_3()
+ self._refs_dict = new_ref_dict()
debug_start("jit-trace-done")
debug_print("trace length: " + str(self._pos))
debug_print(" total snapshots: " + str(self._total_snapshots))
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -3,7 +3,7 @@
from rpython.jit.codewriter.effectinfo import EffectInfo
from rpython.jit.metainterp.optimizeopt.util import args_dict
-from rpython.jit.metainterp.history import Const, ConstInt
+from rpython.jit.metainterp.history import Const, ConstInt, new_ref_dict
from rpython.jit.metainterp.jitexc import JitException
from rpython.jit.metainterp.optimizeopt.optimizer import Optimization, REMOVED
from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
@@ -14,7 +14,7 @@
GuardResOp
from rpython.rlib.objectmodel import we_are_translated
from rpython.jit.metainterp.optimizeopt import info
-
+
class BogusImmutableField(JitException):
@@ -97,7 +97,7 @@
# need any _lazy_set: the heap value is already right.
# Note that this may reset to None a non-None lazy_set,
# cancelling its previous effects with no side effect.
-
+
# Now, we have to force the item in the short preamble
self._getfield(structinfo, op.getdescr(), optheap)
self._lazy_set = None
@@ -251,7 +251,7 @@
def setup(self):
self.optimizer.optheap = self
# mapping const value -> info corresponding to it's heap cache
- self.const_infos = self.optimizer.cpu.ts.new_ref_dict()
+ self.const_infos = new_ref_dict()
def flush(self):
self.cached_dict_reads.clear()
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
@@ -1,7 +1,7 @@
from rpython.jit.metainterp import jitprof, resume, compile
from rpython.jit.metainterp.executor import execute_nonspec_const
from rpython.jit.metainterp.history import (
- Const, ConstInt, ConstPtr, CONST_NULL)
+ Const, ConstInt, ConstPtr, CONST_NULL, new_ref_dict)
from rpython.jit.metainterp.optimizeopt.intutils import IntBound,\
ConstIntBound, MININT, MAXINT, IntUnbounded
from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
@@ -9,7 +9,6 @@
OpHelpers
from rpython.jit.metainterp.optimizeopt import info
from rpython.jit.metainterp.optimize import InvalidLoop
-from rpython.jit.metainterp.typesystem import llhelper
from rpython.rlib.objectmodel import specialize, we_are_translated
from rpython.rlib.debug import debug_print
from rpython.rtyper import rclass
@@ -272,7 +271,7 @@
self.metainterp_sd = metainterp_sd
self.jitdriver_sd = jitdriver_sd
self.cpu = metainterp_sd.cpu
- self.interned_refs = self.cpu.ts.new_ref_dict()
+ self.interned_refs = new_ref_dict()
self.resumedata_memo = resume.ResumeDataLoopMemo(metainterp_sd)
self.pendingfields = None # set temporarily to a list, normally by
# heap.py, as we're about to generate a guard
diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py b/rpython/jit/metainterp/optimizeopt/vstring.py
--- a/rpython/jit/metainterp/optimizeopt/vstring.py
+++ b/rpython/jit/metainterp/optimizeopt/vstring.py
@@ -2,9 +2,8 @@
from rpython.jit.metainterp.history import (Const, ConstInt, ConstPtr,
get_const_ptr_for_string, get_const_ptr_for_unicode, REF, INT,
DONT_CHANGE, CONST_NULL)
-from rpython.jit.metainterp.optimizeopt import optimizer
-from rpython.jit.metainterp.optimizeopt.optimizer import CONST_0, CONST_1
-from rpython.jit.metainterp.optimizeopt.optimizer import llhelper, REMOVED
+from rpython.jit.metainterp.optimizeopt.optimizer import (
+ CONST_0, CONST_1, REMOVED, Optimization)
from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
from rpython.jit.metainterp.resoperation import rop, ResOperation
from rpython.jit.metainterp.optimizeopt import info
@@ -47,7 +46,6 @@
# ____________________________________________________________
-
class StrPtrInfo(info.AbstractVirtualPtrInfo):
#_attrs_ = ('length', 'lenbound', 'lgtop', 'mode', '_cached_vinfo', '_is_virtual')
@@ -72,7 +70,7 @@
@specialize.arg(2)
def get_constant_string_spec(self, string_optimizer, mode):
- return None # can't be constant
+ return None # can't be constant
def force_box(self, op, optforce):
if not self.is_virtual():
@@ -196,8 +194,8 @@
def initialize_forced_string(self, op, string_optimizer, targetbox,
offsetbox, mode):
for i in range(len(self._chars)):
- assert not isinstance(targetbox, Const) # ConstPtr never makes sense
- charbox = self.strgetitem(i) # can't be virtual
+ assert not isinstance(targetbox, Const) # ConstPtr never makes sense
+ charbox = self.strgetitem(i) # can't be virtual
if charbox is not None:
op = ResOperation(mode.STRSETITEM, [targetbox,
offsetbox,
@@ -247,7 +245,7 @@
length = vlength.getint()
assert start >= 0
assert length >= 0
- return s1[start : start + length]
+ return s1[start: start + length]
return None
def getstrlen(self, op, string_optimizer, mode):
@@ -353,7 +351,7 @@
charbox = string_optimizer.strgetitem(None, srcbox, srcoffsetbox,
mode)
srcoffsetbox = _int_add(string_optimizer, srcoffsetbox, CONST_1)
- assert not isinstance(targetbox, Const)# ConstPtr never makes sense
+ assert not isinstance(targetbox, Const) # ConstPtr never makes sense
string_optimizer.emit_extra(ResOperation(mode.STRSETITEM,
[targetbox, offsetbox, charbox]))
offsetbox = _int_add(string_optimizer, offsetbox, CONST_1)
@@ -412,7 +410,7 @@
return resbox
-class OptString(optimizer.Optimization):
+class OptString(Optimization):
"Handling of strings and unicodes."
def setup(self):
@@ -444,6 +442,7 @@
def optimize_NEWSTR(self, op):
return self._optimize_NEWSTR(op, mode_string)
+
def optimize_NEWUNICODE(self, op):
return self._optimize_NEWSTR(op, mode_unicode)
@@ -480,6 +479,7 @@
def optimize_STRGETITEM(self, op):
return self._optimize_STRGETITEM(op, mode_string)
+
def optimize_UNICODEGETITEM(self, op):
return self._optimize_STRGETITEM(op, mode_unicode)
@@ -522,6 +522,7 @@
def optimize_STRLEN(self, op):
return self._optimize_STRLEN(op, mode_string)
+
def optimize_UNICODELEN(self, op):
return self._optimize_STRLEN(op, mode_unicode)
@@ -537,6 +538,7 @@
def optimize_STRHASH(self, op):
return self._optimize_STRHASH(op, mode_string)
+
def optimize_UNICODEHASH(self, op):
return self._optimize_STRHASH(op, mode_unicode)
@@ -761,18 +763,15 @@
l1box = i1.getstrlen(arg1, self, mode)
if isinstance(l1box, ConstInt) and l1box.value == 1:
# comparing two single chars
- vchar1 = self.strgetitem(None, arg1, optimizer.CONST_0,
- mode)
- vchar2 = self.strgetitem(None, arg2, optimizer.CONST_0,
- mode)
+ vchar1 = self.strgetitem(None, arg1, CONST_0, mode)
+ vchar2 = self.strgetitem(None, arg2, CONST_0, mode)
seo = self.optimizer.send_extra_operation
op = self.optimizer.replace_op_with(resultop, rop.INT_EQ,
[vchar1, vchar2], descr=DONT_CHANGE)
seo(op)
return True, None
if isinstance(i1, VStringSliceInfo):
- vchar = self.strgetitem(None, arg2, optimizer.CONST_0,
- mode)
+ vchar = self.strgetitem(None, arg2, CONST_0, mode)
do = EffectInfo.OS_STREQ_SLICE_CHAR
return True, self.generate_modified_call(do, [i1.s, i1.start,
i1.lgtop, vchar],
@@ -801,7 +800,7 @@
l2info = self.getintbound(l2box)
if l2info.is_constant():
if l2info.getint() == 1:
- vchar = self.strgetitem(None, arg2, optimizer.CONST_0, mode)
+ vchar = self.strgetitem(None, arg2, CONST_0, mode)
if i1 and i1.is_nonnull():
do = EffectInfo.OS_STREQ_NONNULL_CHAR
else:
@@ -832,8 +831,8 @@
isinstance(l2box, ConstInt) and
l1box.getint() == l2box.getint() == 1):
# comparing two single chars
- char1 = self.strgetitem(None, op.getarg(1), optimizer.CONST_0, mode)
- char2 = self.strgetitem(None, op.getarg(2), optimizer.CONST_0, mode)
+ char1 = self.strgetitem(None, op.getarg(1), CONST_0, mode)
+ char2 = self.strgetitem(None, op.getarg(2), CONST_0, mode)
seo = self.optimizer.send_extra_operation
op = self.replace_op_with(op, rop.INT_SUB, [char1, char2],
descr=DONT_CHANGE)
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -2,7 +2,8 @@
from rpython.jit.metainterp import jitprof
from rpython.jit.metainterp.history import (
Const, ConstInt, ConstPtr, getkind, INT, REF, FLOAT, CONST_NULL,
- AbstractDescr, IntFrontendOp, RefFrontendOp, FloatFrontendOp)
+ AbstractDescr, IntFrontendOp, RefFrontendOp, FloatFrontendOp,
+ new_ref_dict)
from rpython.jit.metainterp.resoperation import rop
from rpython.rlib import rarithmetic, rstack
from rpython.rlib.objectmodel import (we_are_translated, specialize,
@@ -177,7 +178,7 @@
self.cpu = metainterp_sd.cpu
self.consts = []
self.large_ints = {}
- self.refs = self.cpu.ts.new_ref_dict_2()
+ self.refs = new_ref_dict()
self.cached_boxes = {}
self.cached_virtuals = {}
diff --git a/rpython/jit/metainterp/test/test_history.py b/rpython/jit/metainterp/test/test_history.py
--- a/rpython/jit/metainterp/test/test_history.py
+++ b/rpython/jit/metainterp/test/test_history.py
@@ -70,6 +70,30 @@
f.set_position(6519)
assert f.get_position() == 6519
+def fresh_ref():
+ S = lltype.GcStruct('S')
+ s = lltype.malloc(S)
+ return lltype.cast_opaque_ptr(llmemory.GCREF, s)
+
+def duplicate_ref(x):
+ s = x._obj.container._as_ptr()
+ return lltype.cast_opaque_ptr(llmemory.GCREF, s)
+
+def test_ref_dict():
+ d = new_ref_dict()
+ ref1 = fresh_ref()
+ ref2 = fresh_ref()
+ ref3 = fresh_ref()
+ d[ref1] = 123
+ d[ref2] = 456
+ d[ref3] = 789
+ ref1b = duplicate_ref(ref1)
+ ref2b = duplicate_ref(ref2)
+ ref3b = duplicate_ref(ref3)
+ assert d[ref1b] == 123
+ assert d[ref2b] == 456
+ assert d[ref3b] == 789
+
class TestZTranslated(StandaloneTests):
def test_ztranslated_same_constant_float(self):
def fn(args):
diff --git a/rpython/jit/metainterp/test/test_typesystem.py b/rpython/jit/metainterp/test/test_typesystem.py
deleted file mode 100644
--- a/rpython/jit/metainterp/test/test_typesystem.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from rpython.jit.metainterp import typesystem
-from rpython.rtyper.lltypesystem import lltype, llmemory
-
-
-class TypeSystemTests(object):
-
- def test_ref_dict(self):
- d = self.helper.new_ref_dict()
- ref1 = self.fresh_ref()
- ref2 = self.fresh_ref()
- ref3 = self.fresh_ref()
- d[ref1] = 123
- d[ref2] = 456
- d[ref3] = 789
- ref1b = self.duplicate_ref(ref1)
- ref2b = self.duplicate_ref(ref2)
- ref3b = self.duplicate_ref(ref3)
- assert d[ref1b] == 123
- assert d[ref2b] == 456
- assert d[ref3b] == 789
-
-
-class TestLLtype(TypeSystemTests):
- helper = typesystem.llhelper
-
- def fresh_ref(self):
- S = lltype.GcStruct('S')
- s = lltype.malloc(S)
- return lltype.cast_opaque_ptr(llmemory.GCREF, s)
-
- def duplicate_ref(self, x):
- s = x._obj.container._as_ptr()
- return lltype.cast_opaque_ptr(llmemory.GCREF, s)
-
- def null_ref(self):
- return lltype.nullptr(llmemory.GCREF.TO)
diff --git a/rpython/jit/metainterp/typesystem.py b/rpython/jit/metainterp/typesystem.py
--- a/rpython/jit/metainterp/typesystem.py
+++ b/rpython/jit/metainterp/typesystem.py
@@ -19,23 +19,4 @@
cls = llmemory.cast_ptr_to_adr(obj.typeptr)
return history.ConstInt(heaptracker.adr2int(cls))
- # A dict whose keys are refs (like the .value of BoxPtr).
- # It is an r_dict on lltype. Two copies, to avoid conflicts with
- # the value type. Note that NULL is not allowed as a key.
- def new_ref_dict(self):
- return r_dict(rd_eq, rd_hash, simple_hash_eq=True)
-
- def new_ref_dict_2(self):
- return r_dict(rd_eq, rd_hash, simple_hash_eq=True)
-
- def new_ref_dict_3(self):
- return r_dict(rd_eq, rd_hash, simple_hash_eq=True)
-
-def rd_eq(ref1, ref2):
- return ref1 == ref2
-
-def rd_hash(ref):
- assert ref
- return lltype.identityhash(ref)
-
llhelper = LLTypeHelper()
More information about the pypy-commit
mailing list