[pypy-commit] pypy s390x-backend: zero_array nearly passing, on some runs it still fails

plan_rich pypy.commits at gmail.com
Mon Dec 28 11:55:11 EST 2015


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r81459:7ff79cde4286
Date: 2015-12-28 17:54 +0100
http://bitbucket.org/pypy/pypy/changeset/7ff79cde4286/

Log:	zero_array nearly passing, on some runs it still fails

diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -65,6 +65,7 @@
     def execute_operations(self, inputargs, operations, result_type):
         looptoken = JitCellToken()
         self.cpu.compile_loop(inputargs, operations, looptoken)
+        #import pdb; pdb.set_trace()
         args = []
         for box in inputargs:
             if box.type == 'i':
@@ -5005,12 +5006,12 @@
             addr = llmemory.cast_ptr_to_adr(a)
             a_int = heaptracker.adr2int(addr)
             a_ref = lltype.cast_opaque_ptr(llmemory.GCREF, a)
-            for (start, length) in [(0,100)]:#3, (49, 49), (1, 98),
-                                    #(15, 9), (10, 10), (47, 0),
-                                    #(0, 4)]:
+            for (start, length) in [(0,100), (49, 49), (1, 98),
+                                    (15, 9), (10, 10), (47, 0),
+                                    (0, 4)]:
                 for cls1 in [ConstInt, InputArgInt]:
-                    for cls2 in [ConstInt]:#[ConstInt, InputArgInt]:
-                        print 'a_ref:', a_ref
+                    for cls2 in [ConstInt, InputArgInt]:
+                        print 'ptr:', hex(rffi.cast(lltype.Signed, a_ref))
                         print 'a_int:', a_int
                         print 'of:', OF
                         print 'start:', cls1.__name__, start
@@ -5048,6 +5049,9 @@
 
                         scalebox = ConstInt(arraydescr.itemsize)
                         inputargs, oplist = self._get_operation_list(ops,'void')
+                        print("input:", inputargs)
+                        for op in oplist:
+                            print(op)
                         self.execute_operations(inputargs, oplist, 'void')
                         assert len(a) == 100
                         for i in range(100):
diff --git a/rpython/jit/backend/zarch/opassembler.py b/rpython/jit/backend/zarch/opassembler.py
--- a/rpython/jit/backend/zarch/opassembler.py
+++ b/rpython/jit/backend/zarch/opassembler.py
@@ -900,7 +900,7 @@
             self.mc.AGHI(base_loc, ofs_loc)
         else:
             self.mc.AGR(base_loc, ofs_loc)
-        if ofs_loc.is_imm():
+        if startindex_loc.is_imm():
             self.mc.AGHI(base_loc, startindex_loc)
         else:
             self.mc.AGR(base_loc, startindex_loc)
diff --git a/rpython/jit/backend/zarch/regalloc.py b/rpython/jit/backend/zarch/regalloc.py
--- a/rpython/jit/backend/zarch/regalloc.py
+++ b/rpython/jit/backend/zarch/regalloc.py
@@ -157,7 +157,9 @@
         self.temp_boxes.append(box)
         return reg
 
-    def ensure_even_odd_pair(self, var, bind_first=True, must_exist=True, load_loc_odd=True):
+    def ensure_even_odd_pair(self, var, bind_first=True,
+                             must_exist=True, load_loc_odd=True,
+                             move_regs=True):
         self._check_type(var)
         prev_loc = self.loc(var, must_exist=must_exist)
         var2 = TempVar()
@@ -169,7 +171,7 @@
         else:
             loc, loc2 = self.force_allocate_reg_pair(var2, var, self.temp_boxes)
         assert loc.is_even() and loc2.is_odd()
-        if prev_loc is not loc2:
+        if move_regs and prev_loc is not loc2:
             if load_loc_odd:
                 self.assembler.regalloc_mov(prev_loc, loc2)
             else:
@@ -910,12 +912,14 @@
               bind_first=True, must_exist=False, load_loc_odd=False)
         tempvar = TempInt()
         self.rm.temp_boxes.append(tempvar)
-        pad_byte, _ = self.rm.ensure_even_odd_pair(tempvar, bind_first=True, must_exist=False)
+        pad_byte, _ = self.rm.ensure_even_odd_pair(tempvar,
+                              bind_first=True, must_exist=False, move_regs=False)
         startindex_loc = self.ensure_reg_or_16bit_imm(op.getarg(1))
 
         length_box = op.getarg(2)
-        length_loc = self.rm.ensure_reg(length_box, force_in_reg=True,
-                                        selected_reg=length_loc)
+        ll = self.rm.loc(length_box)
+        if length_loc is not ll:
+            self.assembler.regalloc_mov(ll, length_loc)
         ofs_loc = self.ensure_reg_or_16bit_imm(ConstInt(ofs))
         return [base_loc, startindex_loc, length_loc, ofs_loc, imm(itemsize), pad_byte]
 


More information about the pypy-commit mailing list