Author: Armin Rigo <[email protected]>
Branch: int-test-is-zero
Changeset: r98065:56ea3adf27c4
Date: 2019-11-16 13:44 +0100
http://bitbucket.org/pypy/pypy/changeset/56ea3adf27c4/
Log: Make the usage of INT_TEST_xxx conditional on the backend
diff --git a/rpython/jit/backend/llgraph/runner.py
b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -333,6 +333,7 @@
vector_ext.enable(16, accum=True)
vector_ext.setup_once = lambda asm: asm
load_supported_factors = (1,2,4,8)
+ supports_int_test_instructions = True
assembler = None
def __init__(self, rtyper, stats=None, *ignored_args, **kwds):
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -20,6 +20,7 @@
supports_singlefloats = False
supports_guard_gc_type = False
supports_load_effective_address = False
+ supports_int_test_instructions = False
propagate_exception_descr = None
diff --git a/rpython/jit/backend/x86/runner.py
b/rpython/jit/backend/x86/runner.py
--- a/rpython/jit/backend/x86/runner.py
+++ b/rpython/jit/backend/x86/runner.py
@@ -17,6 +17,7 @@
supports_floats = True
supports_singlefloats = True
supports_load_effective_address = True
+ supports_int_test_instructions = True
dont_keepalive_stuff = False # for tests
with_threads = False
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py
b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -646,15 +646,16 @@
elif info == INFO_NULL:
self.make_constant_int(op, not expect_nonnull)
else:
- box = get_box_replacement(box)
- box1 = self.optimizer.as_operation(box)
- if box1 is not None and box1.getopnum() == rop.INT_AND:
- if expect_nonnull:
- opnum = rop.INT_TEST_IS_TRUE
- else:
- opnum = rop.INT_TEST_IS_ZERO
- args = [box1.getarg(0), box1.getarg(1)]
- op = self.replace_op_with(op, opnum, args=args)
+ if self.optimizer.cpu.supports_int_test_instructions:
+ box = get_box_replacement(box)
+ box1 = self.optimizer.as_operation(box)
+ if box1 is not None and box1.getopnum() == rop.INT_AND:
+ if expect_nonnull:
+ opnum = rop.INT_TEST_IS_TRUE
+ else:
+ opnum = rop.INT_TEST_IS_ZERO
+ args = [box1.getarg(0), box1.getarg(1)]
+ op = self.replace_op_with(op, opnum, args=args)
return self.emit(op)
def optimize_INT_IS_TRUE(self, op):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit