[pypy-commit] pypy ppc-vsx-support: moved setup_once for the vector extension, debug_print when NotAVectorizableLoop is raised

plan_rich pypy.commits at gmail.com
Thu Aug 4 06:45:47 EDT 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: ppc-vsx-support
Changeset: r86011:613b2a914410
Date: 2016-08-04 12:44 +0200
http://bitbucket.org/pypy/pypy/changeset/613b2a914410/

Log:	moved setup_once for the vector extension, debug_print when
	NotAVectorizableLoop is raised

diff --git a/rpython/jit/backend/llsupport/vector_ext.py b/rpython/jit/backend/llsupport/vector_ext.py
--- a/rpython/jit/backend/llsupport/vector_ext.py
+++ b/rpython/jit/backend/llsupport/vector_ext.py
@@ -8,6 +8,9 @@
         failnbail_transformation)
 from rpython.jit.metainterp.jitexc import NotAVectorizeableLoop
 from rpython.rlib.objectmodel import we_are_translated
+from rpython.rtyper.lltypesystem.lloperation import llop
+from rpython.rtyper.lltypesystem import lltype
+from rpython.rlib.debug import debug_print
 
 class TypeRestrict(object):
     ANY_TYPE = '\x00'
@@ -192,11 +195,11 @@
                 continue
             curvecinfo = forwarded_vecinfo(arg)
             if curvecinfo.bytesize != bytesize:
-                raise NotAVectorizeableLoop("op match size first type failed %d != %d" % \
-                        (curvecinfo.bytesize != bytesize))
+                debug_print("op match size first type failed")
+                raise NotAVectorizeableLoop
             if curvecinfo.datatype != datatype:
-                raise NotAVectorizeableLoop("op match size first type failed (datatype). %s != %s" % \
-                        (curvecinfo.datatype != datatype))
+                debug_print("op match size first type failed (datatype)")
+                raise NotAVectorizeableLoop
         return None
 
 TR_ANY = TypeRestrict()
diff --git a/rpython/jit/metainterp/jitexc.py b/rpython/jit/metainterp/jitexc.py
--- a/rpython/jit/metainterp/jitexc.py
+++ b/rpython/jit/metainterp/jitexc.py
@@ -62,10 +62,8 @@
             self.red_int, self.red_ref, self.red_float)
 
 class NotAVectorizeableLoop(JitException):
-    def __init__(self, msg="<empty>"):
-        self.msg = msg
     def __str__(self):
-        return 'NotAVectorizeableLoop(%s)' % self.msg
+        return 'NotAVectorizeableLoop()'
 
 class NotAProfitableLoop(JitException):
     def __str__(self):
diff --git a/rpython/jit/metainterp/optimizeopt/vector.py b/rpython/jit/metainterp/optimizeopt/vector.py
--- a/rpython/jit/metainterp/optimizeopt/vector.py
+++ b/rpython/jit/metainterp/optimizeopt/vector.py
@@ -26,6 +26,7 @@
 from rpython.rlib.objectmodel import we_are_translated
 from rpython.rlib.debug import debug_print, debug_start, debug_stop
 from rpython.rlib.jit import Counters
+from rpython.rtyper.lltypesystem.lloperation import llop
 from rpython.rtyper.lltypesystem import lltype, rffi
 from rpython.jit.backend.llsupport.symbolic import (WORD as INT_WORD,
         SIZEOF_FLOAT as FLOAT_WORD)
@@ -146,9 +147,8 @@
         #
         info.label_op = loop.label
         return info, loop.finaloplist(jitcell_token=jitcell_token, reset_label_token=False)
-    except NotAVectorizeableLoop as e:
+    except NotAVectorizeableLoop:
         debug_stop("vec-opt-loop")
-        debug_print("failed to vectorize loop. reason: %s" % e.msg)
         # vectorization is not possible
         return loop_info, version.loop.finaloplist()
     except NotAProfitableLoop:
@@ -160,8 +160,6 @@
         debug_stop("vec-opt-loop")
         debug_print("failed to vectorize loop. THIS IS A FATAL ERROR!")
         if we_are_translated():
-            from rpython.rtyper.lltypesystem import lltype
-            from rpython.rtyper.lltypesystem.lloperation import llop
             llop.debug_print_traceback(lltype.Void)
         else:
             raise
@@ -230,12 +228,17 @@
         self.linear_find_smallest_type(loop)
         byte_count = self.smallest_type_bytes
         vsize = self.vector_ext.vec_size()
-        if vsize == 0 or byte_count == 0 or loop.label.getopnum() != rop.LABEL:
-            # stop, there is no chance to vectorize this trace
+        # stop, there is no chance to vectorize this trace
             # we cannot optimize normal traces (if there is no label)
-            raise NotAVectorizeableLoop("vsize %d byte_count %d not label? %d" % \
-                    (vsize, byte_count, loop.label.getopnum() != rop.LABEL))
-
+        if vsize == 0:
+            debug_print("vector size is zero")
+            raise NotAVectorizeableLoop
+        if byte_count == 0:
+            debug_print("could not find smallest type")
+            raise NotAVectorizeableLoop
+        if loop.label.getopnum() != rop.LABEL:
+            debug_print("not a loop, can only vectorize loops")
+            raise NotAVectorizeableLoop
         # find index guards and move to the earliest position
         graph = self.analyse_index_calculations(loop)
         if graph is not None:
@@ -432,7 +435,8 @@
             intersecting edges.
         """
         if len(self.packset.packs) == 0:
-            raise NotAVectorizeableLoop("packset is empty")
+            debug_print("packset is empty")
+            raise NotAVectorizeableLoop
         i = 0
         j = 0
         end_ij = len(self.packset.packs)
@@ -664,7 +668,8 @@
                 if forward and origin_pack.is_accumulating():
                     # in this case the splitted accumulator must
                     # be combined. This case is not supported
-                    raise NotAVectorizeableLoop("splitted accum must be flushed here (not supported)")
+                    debug_print("splitted accum must be flushed here (not supported)")
+                    raise NotAVectorizeableLoop
                 #
                 if self.contains_pair(lnode, rnode):
                     return None
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1857,7 +1857,8 @@
             self.jitlog.setup_once()
             debug_print(self.jit_starting_line)
             self.cpu.setup_once()
-            self.cpu.vector_ext.setup_once(self.cpu.assembler)
+            if self.cpu.vector_ext:
+                self.cpu.vector_ext.setup_once(self.cpu.assembler)
             if not self.profiler.initialized:
                 self.profiler.start()
                 self.profiler.initialized = True


More information about the pypy-commit mailing list