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>