[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