Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Apr 2013 18:58:39 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r249817 - head/contrib/llvm/lib/Transforms/Vectorize
Message-ID:  <201304231858.r3NIwdTM050757@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304231858.r3NIwdTM050757>