[llvm-commits] [llvm] r140429 - in /llvm/trunk: lib/CodeGen/MachineVerifier.cpp test/CodeGen/X86/segmented-stacks.ll

Andrew Trick atrick at apple.com
Fri Sep 23 17:21:37 PDT 2011


Thank you!  Dominance matters.

Now don't we need to either prohibit predicating returns or force if-conversion to split the block.

rdar://problem/10023639

-Andy

On Sep 23, 2011, at 3:45 PM, Jakob Stoklund Olesen wrote:

> Author: stoklund
> Date: Fri Sep 23 17:45:39 2011
> New Revision: 140429
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=140429&view=rev
> Log:
> Verify that terminators follow non-terminators.
> 
> This exposes a -segmented-stacks bug.
> 
> Modified:
>    llvm/trunk/lib/CodeGen/MachineVerifier.cpp
>    llvm/trunk/test/CodeGen/X86/segmented-stacks.ll
> 
> Modified: llvm/trunk/lib/CodeGen/MachineVerifier.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineVerifier.cpp?rev=140429&r1=140428&r2=140429&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineVerifier.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineVerifier.cpp Fri Sep 23 17:45:39 2011
> @@ -72,6 +72,8 @@
>     typedef DenseSet<unsigned> RegSet;
>     typedef DenseMap<unsigned, const MachineInstr*> RegMap;
> 
> +    const MachineInstr *FirstTerminator;
> +
>     BitVector regsReserved;
>     RegSet regsLive;
>     RegVector regsDefined, regsDead, regsKilled;
> @@ -389,6 +391,8 @@
> 
> void
> MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
> +  FirstTerminator = 0;
> +
>   // Count the number of landing pad successors.
>   SmallPtrSet<MachineBasicBlock*, 4> LandingPadSuccs;
>   for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(),
> @@ -570,6 +574,15 @@
>     }
>   }
> 
> +  // Ensure non-terminators don't follow terminators.
> +  if (MCID.isTerminator()) {
> +    if (!FirstTerminator)
> +      FirstTerminator = MI;
> +  } else if (FirstTerminator) {
> +    report("Non-terminator instruction after the first terminator", MI);
> +    *OS << "First terminator was:\t" << *FirstTerminator;
> +  }
> +
>   StringRef ErrorInfo;
>   if (!TII->verifyInstruction(MI, ErrorInfo))
>     report(ErrorInfo.data(), MI);
> 
> Modified: llvm/trunk/test/CodeGen/X86/segmented-stacks.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/segmented-stacks.ll?rev=140429&r1=140428&r2=140429&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/segmented-stacks.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/segmented-stacks.ll Fri Sep 23 17:45:39 2011
> @@ -1,5 +1,8 @@
> ; RUN: llc < %s -mtriple=i686-linux -segmented-stacks | FileCheck %s -check-prefix=X32
> ; RUN: llc < %s -mtriple=x86_64-linux  -segmented-stacks | FileCheck %s -check-prefix=X64
> +;
> +; X86FrameLowering::adjustForSegmentedStacks is inserting code after a RET.
> +; XFAIL: *
> 
> ; Just to prevent the alloca from being optimized away
> declare void @dummy_use(i32*, i32)
> 
> 
> _______________________________________________
> 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