Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Dec 2014 14:54:27 +0000
From:      Steven Hartland <steven@multiplay.co.uk>
To:        Dimitry Andric <dim@FreeBSD.org>, src-committers@freebsd.org,  svn-src-all@freebsd.org, svn-src-stable@freebsd.org,  svn-src-stable-10@freebsd.org
Subject:   Re: svn commit: r275742 - in stable: 10/contrib/llvm/lib/Transforms/Vectorize 10/sys/sys 9/contrib/llvm/lib/Transforms/Vectorize 9/sys/sys
Message-ID:  <548DA4A3.8020000@freebsd.org>
In-Reply-To: <201412131214.sBDCESwJ033037@svn.freebsd.org>
References:  <201412131214.sBDCESwJ033037@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Sounds nasty, is this something that only effects stable/10 or does it 
also effects 10.1-RELEASE?

On 13/12/2014 12:14, Dimitry Andric wrote:
> Author: dim
> Date: Sat Dec 13 12:14:26 2014
> New Revision: 275742
> URL: https://svnweb.freebsd.org/changeset/base/275742
>
> Log:
>    MFC r275633:
>    
>    Pull in r223171 from upstream llvm trunk (by Michael Zolotukhin):
>    
>      PR21302. Vectorize only bottom-tested loops.
>    
>      rdar://problem/18886083
>    
>    This fixes a bug in the llvm vectorizer, which could sometimes cause
>    vectorized loops to perform an additional iteration, leading to possible
>    buffer overruns.  Symptoms of this, which are usually segfaults, were
>    first noticed when building gcc ports, here:
>    
>    https://lists.freebsd.org/pipermail/freebsd-ports/2014-September/095466.html
>    https://lists.freebsd.org/pipermail/freebsd-toolchain/2014-September/001211.html
>    
>    Since this fix is very important for ports, bump __FreeBSD_version to
>    make it easier for port maintainers to test whether the fix has been
>    applied.
>    
>    Upstream PR:	http://llvm.org/PR21302
>
> Modified:
>    stable/10/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
>    stable/10/sys/sys/param.h
> Directory Properties:
>    stable/10/   (props changed)
>
> Changes in other areas also in this revision:
> Modified:
>    stable/9/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
>    stable/9/sys/sys/param.h
> Directory Properties:
>    stable/9/contrib/llvm/   (props changed)
>    stable/9/sys/   (props changed)
>
> Modified: stable/10/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
> ==============================================================================
> --- stable/10/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp	Sat Dec 13 04:50:14 2014	(r275741)
> +++ stable/10/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp	Sat Dec 13 12:14:26 2014	(r275742)
> @@ -2864,6 +2864,14 @@ bool LoopVectorizationLegality::canVecto
>     if (!TheLoop->getExitingBlock())
>       return false;
>   
> +  // We only handle bottom-tested loops, i.e. loop in which the condition is
> +  // checked at the end of each iteration. With that we can assume that all
> +  // instructions in the loop are executed the same number of times.
> +  if (TheLoop->getExitingBlock() != TheLoop->getLoopLatch()) {
> +    DEBUG(dbgs() << "LV: loop control flow is not understood by vectorizer\n");
> +    return false;
> +  }
> +
>     // We need to have a loop header.
>     DEBUG(dbgs() << "LV: Found a loop: " <<
>           TheLoop->getHeader()->getName() << '\n');
>
> Modified: stable/10/sys/sys/param.h
> ==============================================================================
> --- stable/10/sys/sys/param.h	Sat Dec 13 04:50:14 2014	(r275741)
> +++ stable/10/sys/sys/param.h	Sat Dec 13 12:14:26 2014	(r275742)
> @@ -58,7 +58,7 @@
>    *		in the range 5 to 9.
>    */
>   #undef __FreeBSD_version
> -#define __FreeBSD_version 1001503	/* Master, propagated to newvers */
> +#define __FreeBSD_version 1001504	/* Master, propagated to newvers */
>   
>   /*
>    * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
>




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