[llvm] r214336 - SimplifyCFG: Avoid miscompilations due to removed lifetime intrinsics.
Tom Stellard
tom at stellard.net
Tue Mar 17 15:57:28 PDT 2015
On Thu, Mar 12, 2015 at 08:58:31PM -0400, Tom Stellard wrote:
> On Fri, Mar 13, 2015 at 01:42:09AM +0100, Björn Steinbrink wrote:
> > Hi Tom,
> > Hi Rafael,
> >
> > Can we get this into 3.5.2? The rust compiler emits lifetime intrinsics
> > and without this patch the optimized code is broken.
> >
>
> This looks OK to me, we don't really have a code owner for this, so I'm
> cc'ing Chris.
>
Merged into release_35 as r232544.
-Tom
> > Cheers,
> > Björn
> >
> > On 2014.07.30 21:04:00 -0000, Rafael Espindola wrote:
> > > Author: rafael
> > > Date: Wed Jul 30 16:04:00 2014
> > > New Revision: 214336
> > >
> > > URL: http://llvm.org/viewvc/llvm-project?rev=214336&view=rev
> > > Log:
> > > SimplifyCFG: Avoid miscompilations due to removed lifetime intrinsics.
> > >
> > > The lifetime intrinsics need some work in order to make it clear which
> > > optimizations are or are not valid.
> > >
> > > For now dropping this optimization avoids a miscompilation.
> > >
> > > Patch by Bj?rn Steinbrink.
> > >
> > > Modified:
> > > llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
> > > llvm/trunk/test/Transforms/SimplifyCFG/lifetime.ll
> > >
> > > Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
> > > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=214336&r1=214335&r2=214336&view=diff
> > > ==============================================================================
> > > --- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original)
> > > +++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Wed Jul 30 16:04:00 2014
> > > @@ -4008,7 +4008,7 @@ bool SimplifyCFGOpt::SimplifyUncondBranc
> > > return true;
> > >
> > > // If the Terminator is the only non-phi instruction, simplify the block.
> > > - BasicBlock::iterator I = BB->getFirstNonPHIOrDbgOrLifetime();
> > > + BasicBlock::iterator I = BB->getFirstNonPHIOrDbg();
> > > if (I->isTerminator() && BB != &BB->getParent()->getEntryBlock() &&
> > > TryToSimplifyUncondBranchFromEmptyBlock(BB))
> > > return true;
> > >
> > > Modified: llvm/trunk/test/Transforms/SimplifyCFG/lifetime.ll
> > > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/lifetime.ll?rev=214336&r1=214335&r2=214336&view=diff
> > > ==============================================================================
> > > --- llvm/trunk/test/Transforms/SimplifyCFG/lifetime.ll (original)
> > > +++ llvm/trunk/test/Transforms/SimplifyCFG/lifetime.ll Wed Jul 30 16:04:00 2014
> > > @@ -1,11 +1,11 @@
> > > ; RUN: opt < %s -simplifycfg -S | FileCheck %s
> > >
> > > -; Test that a lifetime intrinsic doesn't prevent us from simplifying this.
> > > +; Test that a lifetime intrinsic isn't removed because that would change semantics
> > >
> > > ; CHECK: foo
> > > ; CHECK: entry:
> > > -; CHECK-NOT: bb0:
> > > -; CHECK-NOT: bb1:
> > > +; CHECK: bb0:
> > > +; CHECK: bb1:
> > > ; CHECK: ret
> > > define void @foo(i1 %x) {
> > > entry:
> > >
> > >
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list