svn commit: r249817 - head/contrib/llvm/lib/Transforms/Vectorize

Dimitry Andric dim at FreeBSD.org
Tue Apr 23 18:58:40 UTC 2013


Author: dim
Date: Tue Apr 23 18:58:39 2013
New Revision: 249817
URL: http://svnweb.freebsd.org/changeset/base/249817

Log:
  Pull in r180121 from upstream llvm trunk:
  
    LoopVectorizer: Fix 15830. When scalarizing and unrolling stores make
    sure that the order in which the elements are scalarized is the same
    as the original order.
    This fixes a miscompilation in FreeBSD's regex library.
  
  This should fix lib/libc/regex/regcomp.c at -O3 with clang 3.3 r178860
  on CPUs with SSE.  Before this change, the vectorizer could incorrectly
  rearrange the second loop in computejumps(), leading to possibly invalid
  entries in the re_gets::charjump table.
  
  The net result was that for example "sed s/@CC@/foo/" failed to work
  correctly, leading to trouble with many configure scripts.

Modified:
  head/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Modified: head/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
==============================================================================
--- head/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp	Tue Apr 23 18:30:33 2013	(r249816)
+++ head/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp	Tue Apr 23 18:58:39 2013	(r249817)
@@ -1040,10 +1040,10 @@ void InnerLoopVectorizer::scalarizeInstr
   // Create a new entry in the WidenMap and initialize it to Undef or Null.
   VectorParts &VecResults = WidenMap.splat(Instr, UndefVec);
 
-  // For each scalar that we create:
-  for (unsigned Width = 0; Width < VF; ++Width) {
-    // For each vector unroll 'part':
-    for (unsigned Part = 0; Part < UF; ++Part) {
+  // For each vector unroll 'part':
+  for (unsigned Part = 0; Part < UF; ++Part) {
+    // For each scalar that we create:
+    for (unsigned Width = 0; Width < VF; ++Width) {
       Instruction *Cloned = Instr->clone();
       if (!IsVoidRetTy)
         Cloned->setName(Instr->getName() + ".cloned");


More information about the svn-src-head mailing list