Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r69970:3d19219df4dd Date: 2014-03-15 09:25 +0100 http://bitbucket.org/pypy/pypy/changeset/3d19219df4dd/
Log: merge heads diff --git a/lib_pypy/_sqlite3.py b/lib_pypy/_sqlite3.py --- a/lib_pypy/_sqlite3.py +++ b/lib_pypy/_sqlite3.py @@ -38,6 +38,7 @@ if sys.version_info[0] >= 3: StandardError = Exception + cmp = lambda x, y: (x > y) - (x < y) long = int xrange = range basestring = unicode = str diff --git a/pypy/module/cpyext/test/test_cpyext.py b/pypy/module/cpyext/test/test_cpyext.py --- a/pypy/module/cpyext/test/test_cpyext.py +++ b/pypy/module/cpyext/test/test_cpyext.py @@ -64,6 +64,8 @@ kwds["libraries"] = [api_library] # '%s' undefined; assuming extern returning int kwds["compile_extra"] = ["/we4013"] + # prevent linking with python27.lib + kwds["compile_extra"].append("/DPy_BUILD_CORE") elif sys.platform == 'darwin': kwds["link_files"] = [str(api_library + '.dylib')] else: diff --git a/pypy/module/micronumpy/concrete.py b/pypy/module/micronumpy/concrete.py --- a/pypy/module/micronumpy/concrete.py +++ b/pypy/module/micronumpy/concrete.py @@ -368,13 +368,10 @@ class ConcreteArray(ConcreteArrayNotOwning): def __init__(self, shape, dtype, order, strides, backstrides, storage=lltype.nullptr(RAW_STORAGE)): - null_storage = lltype.nullptr(RAW_STORAGE) + if storage == lltype.nullptr(RAW_STORAGE): + storage = dtype.itemtype.malloc(support.product(shape) * dtype.elsize) ConcreteArrayNotOwning.__init__(self, shape, dtype, order, strides, backstrides, - null_storage) - if storage == lltype.nullptr(RAW_STORAGE): - self.storage = dtype.itemtype.malloc(self.size) - else: - self.storage = storage + storage) def __del__(self): free_raw_storage(self.storage, track_allocation=False) 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 @@ -93,6 +93,11 @@ # possible aliasing). self.clear() self._lazy_setfield = None + if optheap.postponed_op: + for a in op.getarglist(): + if a is optheap.postponed_op.result: + optheap.emit_postponed_op() + break optheap.next_optimization.propagate_forward(op) if not can_cache: return @@ -179,6 +184,9 @@ def flush(self): self.force_all_lazy_setfields_and_arrayitems() + self.emit_postponed_op() + + def emit_postponed_op(self): if self.postponed_op: postponed_op = self.postponed_op self.postponed_op = None @@ -227,10 +235,7 @@ def emit_operation(self, op): self.emitting_operation(op) - if self.postponed_op: - postponed_op = self.postponed_op - self.postponed_op = None - self.next_optimization.propagate_forward(postponed_op) + self.emit_postponed_op() if (op.is_comparison() or op.getopnum() == rop.CALL_MAY_FORCE or op.is_ovf()): self.postponed_op = op diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py @@ -1660,6 +1660,16 @@ """ self.optimize_loop(ops, ops) + def test_setfield_int_eq_result(self): + # test that the setfield_gc does not end up before int_eq + ops = """ + [p1, i1, i2] + i3 = int_eq(i1, i2) + setfield_gc(p1, i3, descr=valuedescr) + jump(p1, i1, i2) + """ + self.optimize_loop(ops, ops) + def test_duplicate_setfield_aliasing(self): # a case where aliasing issues (and not enough cleverness) mean # that we fail to remove any setfield_gc @@ -5433,7 +5443,6 @@ jump(i0) """ self.optimize_loop(ops, expected) - - + class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin): pass diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py @@ -1,14 +1,15 @@ import py from rpython.rlib.objectmodel import instantiate +from rpython.jit.metainterp import compile, resume +from rpython.jit.metainterp.history import AbstractDescr, ConstInt, BoxInt, TreeLoop +from rpython.jit.metainterp.optimize import InvalidLoop +from rpython.jit.metainterp.optimizeopt import build_opt_chain from rpython.jit.metainterp.optimizeopt.test.test_util import ( LLtypeMixin, BaseTest, convert_old_style_to_targets) -from rpython.jit.metainterp.optimizeopt import build_opt_chain -from rpython.jit.metainterp.optimize import InvalidLoop -from rpython.jit.metainterp.history import AbstractDescr, ConstInt, BoxInt -from rpython.jit.metainterp.history import TreeLoop -from rpython.jit.metainterp import compile, resume +from rpython.jit.metainterp.optimizeopt.test.test_optimizebasic import \ + FakeMetaInterpStaticData from rpython.jit.metainterp.resoperation import rop, opname, oparity -from rpython.jit.metainterp.optimizeopt.test.test_optimizebasic import FakeMetaInterpStaticData + def test_build_opt_chain(): def check(chain, expected_names): @@ -40,7 +41,6 @@ class BaseTestWithUnroll(BaseTest): - enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll" def optimize_loop(self, ops, expected, expected_preamble=None, @@ -93,8 +93,8 @@ def raises(self, e, fn, *args): return py.test.raises(e, fn, *args).value + class OptimizeOptTest(BaseTestWithUnroll): - def setup_method(self, meth=None): class FailDescr(compile.ResumeGuardDescr): oparse = None @@ -130,7 +130,6 @@ self.namespace.pop('fdescr', None) self.namespace.pop('fdescr2', None) - def test_simple(self): ops = """ [] @@ -974,7 +973,6 @@ """ self.optimize_loop(ops, expected, preamble) - # ---------- def test_virtual_1(self): @@ -1252,7 +1250,6 @@ """ self.optimize_loop(ops, expected, preamble) - def test_virtual_constant_isnonnull(self): ops = """ [i0] @@ -2789,8 +2786,7 @@ p2 = new_with_vtable(ConstClass(node_vtable)) jump(p2) """ - self.raises(InvalidLoop, self.optimize_loop, - ops, "crash!") + self.raises(InvalidLoop, self.optimize_loop, ops, "crash!") def test_invalid_loop_2(self): ops = """ @@ -2801,8 +2797,7 @@ escape(p2) # prevent it from staying Virtual jump(p2) """ - self.raises(InvalidLoop, self.optimize_loop, - ops, "crash!") + self.raises(InvalidLoop, self.optimize_loop, ops, "crash!") def test_invalid_loop_3(self): ops = """ @@ -2824,8 +2819,7 @@ guard_value(p2, ConstPtr(myptr)) [] jump(p2) """ - exc = self.raises(InvalidLoop, self.optimize_loop, - ops, "crash!") + exc = self.raises(InvalidLoop, self.optimize_loop, ops, "crash!") if exc: assert "node" in exc.msg @@ -3151,7 +3145,6 @@ """ self.optimize_loop(ops, expected) - def test_int_and_or_with_zero(self): ops = """ [i0, i1] @@ -5107,7 +5100,6 @@ """ self.optimize_loop(ops, expected) - def test_division_nonneg(self): py.test.skip("harder") # this is how an app-level division turns into right now @@ -5444,7 +5436,6 @@ """ self.optimize_loop(ops, ops, ops) - def test_mul_ovf(self): ops = """ [i0, i1] @@ -5591,7 +5582,6 @@ def is_integer_bounded(self): return False - for n in ('inst_w_seq', 'inst_index', 'inst_w_list', 'inst_length', 'inst_start', 'inst_step'): self.namespace[n] = FakeDescr(n) @@ -5847,7 +5837,7 @@ self.optimize_loop(ops, optops, preamble) # check with replacing 'str' with 'unicode' everywhere def r(s): - return s.replace('str','unicode').replace('s"', 'u"') + return s.replace('str', 'unicode').replace('s"', 'u"') self.optimize_loop(r(ops), r(optops), r(preamble)) def test_newstr_1(self): @@ -6277,7 +6267,7 @@ if isinstance(value, calldescrtype): extra = value.get_extra_info() if (extra and isinstance(extra, effectinfotype) and - extra.oopspecindex == oopspecindex): + extra.oopspecindex == oopspecindex): # returns 0 for 'func' in this test return value, 0 raise AssertionError("not found: oopspecindex=%d" % @@ -7395,7 +7385,6 @@ """ self.optimize_loop(ops, expected, expected_short=short) - def test_loopinvariant_constant_strgetitem(self): ops = """ [p0] @@ -7454,7 +7443,7 @@ """ self.optimize_loop(ops, expected, expected_short=short) - def test_propagate_virtual_arryalen(self): + def test_propagate_virtual_arraylen(self): ops = """ [p0] p404 = new_array(2, descr=arraydescr) @@ -7831,7 +7820,6 @@ """ self.optimize_loop(ops, expected) - def test_setarrayitem_followed_by_arraycopy(self): ops = """ [p1, p2] @@ -8124,7 +8112,6 @@ """ self.optimize_loop(ops, expected) - def test_issue1080_infinitie_loop_simple(self): ops = """ [p69] @@ -8149,8 +8136,7 @@ guard_value(p1, ConstPtr(myptr)) [] jump(p1) """ - self.raises(InvalidLoop, self.optimize_loop, - ops, ops) + self.raises(InvalidLoop, self.optimize_loop, ops, ops) def test_licm_boxed_opaque_getitem(self): ops = """ @@ -8225,8 +8211,7 @@ guard_value(p1, ConstPtr(myptr)) [] jump(p1) """ - self.raises(InvalidLoop, self.optimize_loop, - ops, ops) + self.raises(InvalidLoop, self.optimize_loop, ops, ops) def test_cond_call_with_a_constant(self): ops = """ @@ -8253,6 +8238,16 @@ """ self.optimize_loop(ops, expected) + def test_hippyvm_unroll_bug(self): + ops = """ + [p0, i1, i2] + i3 = int_add(i1, 1) + i4 = int_eq(i3, i2) + setfield_gc(p0, i4, descr=valuedescr) + jump(p0, i3, i2) + """ + self.optimize_loop(ops, ops) + + class TestLLtype(OptimizeOptTest, LLtypeMixin): pass - diff --git a/rpython/translator/platform/windows.py b/rpython/translator/platform/windows.py --- a/rpython/translator/platform/windows.py +++ b/rpython/translator/platform/windows.py @@ -369,32 +369,21 @@ for rule in rules: m.rule(*rule) - objects = ' $(OBJECTS)' - create_obj_response_file = [] - if len(' '.join(rel_ofiles)) > 4000: - # cmd.exe has a limit of ~4000 characters before a command line is too long. - # Use a response file instead, at the cost of making the Makefile very ugly. - for i in range(len(rel_ofiles) - 1): - create_obj_response_file.append('echo %s >> obj_names.rsp' % \ - rel_ofiles[i]) - # use cmd /c for the last one so that the file is flushed - create_obj_response_file.append('cmd /c echo %s >> obj_names.rsp' % \ - rel_ofiles[-1]) - objects = ' @obj_names.rsp' if self.version < 80: m.rule('$(TARGET)', '$(OBJECTS)', - create_obj_response_file + [\ - '$(CC_LINK) /nologo $(LDFLAGS) $(LDFLAGSEXTRA)' + objects + ' /out:$@ $(LIBDIRS) $(LIBS)', + [ '$(CC_LINK) /nologo $(LDFLAGS) $(LDFLAGSEXTRA) /out:$@' +\ + ' $(LIBDIRS) $(LIBS) @<<\n$(OBJECTS)\n<<', ]) else: m.rule('$(TARGET)', '$(OBJECTS)', - create_obj_response_file + [\ - '$(CC_LINK) /nologo $(LDFLAGS) $(LDFLAGSEXTRA)' + objects + ' $(LINKFILES) /out:$@ $(LIBDIRS) $(LIBS) /MANIFEST /MANIFESTFILE:$*.manifest', + [ '$(CC_LINK) /nologo $(LDFLAGS) $(LDFLAGSEXTRA)' + \ + ' $(LINKFILES) /out:$@ $(LIBDIRS) $(LIBS) /MANIFEST' + \ + ' /MANIFESTFILE:$*.manifest @<<\n$(OBJECTS)\n<<', 'mt.exe -nologo -manifest $*.manifest -outputresource:$@;1', ]) m.rule('debugmode_$(TARGET)', '$(OBJECTS)', - create_obj_response_file + [\ - '$(CC_LINK) /nologo /DEBUG $(LDFLAGS) $(LDFLAGSEXTRA)' + objects + ' $(LINKFILES) /out:$@ $(LIBDIRS) $(LIBS)', + [ '$(CC_LINK) /nologo /DEBUG $(LDFLAGS) $(LDFLAGSEXTRA)' + \ + ' $(LINKFILES) /out:$@ $(LIBDIRS) $(LIBS) @<<\n$(OBJECTS)\n<<', ]) if shared: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit