[pypy-svn] r79869 - in pypy/trunk/pypy: config jit/backend/llsupport jit/metainterp jit/metainterp/optimizeopt jit/metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Tue Dec 7 17:18:48 CET 2010
Author: arigo
Date: Tue Dec 7 17:18:46 2010
New Revision: 79869
Modified:
pypy/trunk/pypy/config/pypyoption.py
pypy/trunk/pypy/config/translationoption.py
pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
pypy/trunk/pypy/jit/metainterp/optimizeopt/__init__.py
pypy/trunk/pypy/jit/metainterp/pyjitpl.py
pypy/trunk/pypy/jit/metainterp/test/test_compile.py
pypy/trunk/pypy/jit/metainterp/test/test_fficall.py
pypy/trunk/pypy/jit/metainterp/test/test_optimizefficall.py
pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py
pypy/trunk/pypy/jit/metainterp/warmspot.py
Log:
Add a config option "jit_ffi", which is True only if we use the pypy
module _ffi (and in some tests). Enable or disable OptFfiCall based
on that.
Modified: pypy/trunk/pypy/config/pypyoption.py
==============================================================================
--- pypy/trunk/pypy/config/pypyoption.py (original)
+++ pypy/trunk/pypy/config/pypyoption.py Tue Dec 7 17:18:46 2010
@@ -76,6 +76,7 @@
"_rawffi": [("objspace.usemodules.struct", True)],
"cpyext": [("translation.secondaryentrypoints", "cpyext"),
("translation.shared", sys.platform == "win32")],
+ "_ffi": [("translation.jit_ffi", True)],
}
module_import_dependencies = {
Modified: pypy/trunk/pypy/config/translationoption.py
==============================================================================
--- pypy/trunk/pypy/config/translationoption.py (original)
+++ pypy/trunk/pypy/config/translationoption.py Tue Dec 7 17:18:46 2010
@@ -117,6 +117,7 @@
ChoiceOption("jit_profiler", "integrate profiler support into the JIT",
["off", "oprofile"],
default="off"),
+ BoolOption("jit_ffi", "optimize libffi calls", default=False),
# misc
BoolOption("verbose", "Print extra information", default=False),
Modified: pypy/trunk/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/trunk/pypy/jit/backend/llsupport/llmodel.py Tue Dec 7 17:18:46 2010
@@ -17,7 +17,6 @@
from pypy.jit.backend.llsupport.descr import get_call_descr
from pypy.jit.backend.llsupport.descr import BaseIntCallDescr, GcPtrCallDescr
from pypy.jit.backend.llsupport.descr import FloatCallDescr, VoidCallDescr
-from pypy.jit.backend.llsupport.ffisupport import get_call_descr_dynamic
from pypy.jit.backend.llsupport.asmmemmgr import AsmMemoryManager
from pypy.rpython.annlowlevel import cast_instance_to_base_ptr
@@ -247,7 +246,9 @@
return get_call_descr(self.gc_ll_descr, ARGS, RESULT, extrainfo)
def calldescrof_dynamic(self, ffi_args, ffi_result, extrainfo=None):
- return get_call_descr_dynamic(ffi_args, ffi_result, extrainfo)
+ from pypy.jit.backend.llsupport import ffisupport
+ return ffisupport.get_call_descr_dynamic(ffi_args, ffi_result,
+ extrainfo)
def get_overflow_error(self):
ovf_vtable = self.cast_adr_to_int(self._ovf_error_vtable)
Modified: pypy/trunk/pypy/jit/metainterp/optimizeopt/__init__.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizeopt/__init__.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizeopt/__init__.py Tue Dec 7 17:18:46 2010
@@ -3,7 +3,6 @@
from pypy.jit.metainterp.optimizeopt.intbounds import OptIntBounds
from pypy.jit.metainterp.optimizeopt.virtualize import OptVirtualize
from pypy.jit.metainterp.optimizeopt.heap import OptHeap
-from pypy.jit.metainterp.optimizeopt.fficall import OptFfiCall
from pypy.jit.metainterp.optimizeopt.string import OptString
def optimize_loop_1(metainterp_sd, loop, virtuals=True):
@@ -17,6 +16,10 @@
OptVirtualize(),
OptString(),
OptHeap(),
+ ]
+ if metainterp_sd.jit_ffi:
+ from pypy.jit.metainterp.optimizeopt.fficall import OptFfiCall
+ optimizations = optimizations + [
OptFfiCall(),
]
optimizer = Optimizer(metainterp_sd, loop, optimizations, virtuals)
Modified: pypy/trunk/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/trunk/pypy/jit/metainterp/pyjitpl.py Tue Dec 7 17:18:46 2010
@@ -1216,7 +1216,8 @@
logger_ops = None
def __init__(self, cpu, options,
- ProfilerClass=EmptyProfiler, warmrunnerdesc=None):
+ ProfilerClass=EmptyProfiler, warmrunnerdesc=None,
+ jit_ffi=True):
self.cpu = cpu
self.stats = self.cpu.stats
self.options = options
@@ -1226,6 +1227,7 @@
self.profiler = ProfilerClass()
self.profiler.cpu = cpu
self.warmrunnerdesc = warmrunnerdesc
+ self.jit_ffi = jit_ffi
backendmodule = self.cpu.__module__
backendmodule = backendmodule.split('.')[-2]
Modified: pypy/trunk/pypy/jit/metainterp/test/test_compile.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_compile.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_compile.py Tue Dec 7 17:18:46 2010
@@ -54,6 +54,7 @@
stats = Stats()
profiler = jitprof.EmptyProfiler()
warmrunnerdesc = None
+ jit_ffi = False
def log(self, msg, event_kind=None):
pass
Modified: pypy/trunk/pypy/jit/metainterp/test/test_fficall.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_fficall.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_fficall.py Tue Dec 7 17:18:46 2010
@@ -40,6 +40,6 @@
n += 1
return res
#
- res = self.meta_interp(f, [0])
+ res = self.meta_interp(f, [0], jit_ffi=True)
return res
Modified: pypy/trunk/pypy/jit/metainterp/test/test_optimizefficall.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_optimizefficall.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_optimizefficall.py Tue Dec 7 17:18:46 2010
@@ -31,6 +31,7 @@
class TestFfiCall(BaseTestOptimizeOpt, LLtypeMixin):
+ jit_ffi = True
class namespace:
cpu = LLtypeMixin.cpu
Modified: pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py Tue Dec 7 17:18:46 2010
@@ -28,11 +28,12 @@
class FakeMetaInterpStaticData(object):
- def __init__(self, cpu):
+ def __init__(self, cpu, jit_ffi=False):
self.cpu = cpu
self.profiler = EmptyProfiler()
self.options = Fake()
self.globaldata = Fake()
+ self.jit_ffi = jit_ffi
def test_store_final_boxes_in_guard():
from pypy.jit.metainterp.compile import ResumeGuardDescr
@@ -227,6 +228,7 @@
return sorted(boxes, key=lambda box: _kind2count[box.type])
class BaseTestOptimizeOpt(BaseTest):
+ jit_ffi = False
def invent_fail_descr(self, fail_args):
if fail_args is None:
@@ -261,7 +263,7 @@
loop.token.specnodes = self.unpack_specnodes(spectext)
#
self.loop = loop
- metainterp_sd = FakeMetaInterpStaticData(self.cpu)
+ metainterp_sd = FakeMetaInterpStaticData(self.cpu, self.jit_ffi)
if hasattr(self, 'vrefinfo'):
metainterp_sd.virtualref_info = self.vrefinfo
if hasattr(self, 'callinfocollection'):
Modified: pypy/trunk/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/warmspot.py (original)
+++ pypy/trunk/pypy/jit/metainterp/warmspot.py Tue Dec 7 17:18:46 2010
@@ -144,7 +144,8 @@
class WarmRunnerDesc(object):
def __init__(self, translator, policy=None, backendopt=True, CPUClass=None,
- optimizer=None, ProfilerClass=EmptyProfiler, **kwds):
+ optimizer=None, ProfilerClass=EmptyProfiler,
+ jit_ffi=None, **kwds):
pyjitpl._warmrunnerdesc = self # this is a global for debugging only!
self.set_translator(translator)
self.memory_manager = memmgr.MemoryManager()
@@ -162,7 +163,7 @@
elif self.opt.listops:
self.prejit_optimizations_minimal_inline(policy, graphs)
- self.build_meta_interp(ProfilerClass)
+ self.build_meta_interp(ProfilerClass, jit_ffi)
self.make_args_specifications()
#
from pypy.jit.metainterp.virtualref import VirtualRefInfo
@@ -280,11 +281,14 @@
translate_support_code, gcdescr=self.gcdescr)
self.cpu = cpu
- def build_meta_interp(self, ProfilerClass):
+ def build_meta_interp(self, ProfilerClass, jit_ffi=None):
+ if jit_ffi is None:
+ jit_ffi = self.translator.config.translation.jit_ffi
self.metainterp_sd = MetaInterpStaticData(self.cpu,
self.opt,
ProfilerClass=ProfilerClass,
- warmrunnerdesc=self)
+ warmrunnerdesc=self,
+ jit_ffi=jit_ffi)
def make_virtualizable_infos(self):
vinfos = {}
More information about the Pypy-commit
mailing list