[llvm-commits] [llvm] r126190 - in /llvm/trunk: lib/CodeGen/VirtRegRewriter.cpp test/CodeGen/X86/2011-02-21-VirtRegRewriter-KillSubReg.ll

Evan Cheng evan.cheng at apple.com
Mon Feb 21 22:59:08 PST 2011


On Feb 21, 2011, at 10:52 PM, Andrew Trick wrote:

> Author: atrick
> Date: Tue Feb 22 00:52:56 2011
> New Revision: 126190
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=126190&view=rev
> Log:
> VirtRegRewriter assertion fix.
> Apparently it's ok for multiple operands to "kill" the same register.

It is?

Evan

> Fixes PR9237.
> 
> Added:
>    llvm/trunk/test/CodeGen/X86/2011-02-21-VirtRegRewriter-KillSubReg.ll
> Modified:
>    llvm/trunk/lib/CodeGen/VirtRegRewriter.cpp
> 
> Modified: llvm/trunk/lib/CodeGen/VirtRegRewriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/VirtRegRewriter.cpp?rev=126190&r1=126189&r2=126190&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/VirtRegRewriter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/VirtRegRewriter.cpp Tue Feb 22 00:52:56 2011
> @@ -478,7 +478,8 @@
>   if (!RegKills[KReg])
>     return;
> 
> -  assert(KillOps[KReg] == KillOp && "invalid superreg kill flags");
> +  assert(KillOps[KReg]->getParent() == KillOp->getParent() &&
> +         "invalid superreg kill flags");
>   KillOps[KReg] = NULL;
>   RegKills.reset(KReg);
> 
> @@ -487,7 +488,8 @@
>   for (const unsigned *SR = TRI->getSubRegisters(KReg); *SR; ++SR) {
>     DEBUG(dbgs() << "  Resurrect subreg " << TRI->getName(*SR) << "\n");
> 
> -    assert(KillOps[*SR] == KillOp && "invalid subreg kill flags");
> +    assert(KillOps[*SR]->getParent() == KillOp->getParent() &&
> +           "invalid subreg kill flags");
>     KillOps[*SR] = NULL;
>     RegKills.reset(*SR);
>   }
> 
> Added: llvm/trunk/test/CodeGen/X86/2011-02-21-VirtRegRewriter-KillSubReg.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2011-02-21-VirtRegRewriter-KillSubReg.ll?rev=126190&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/2011-02-21-VirtRegRewriter-KillSubReg.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/2011-02-21-VirtRegRewriter-KillSubReg.ll Tue Feb 22 00:52:56 2011
> @@ -0,0 +1,50 @@
> +; RUN: llc < %s -O2 -march=x86 -mtriple=i386-pc-linux-gnu -relocation-model=pic | FileCheck %s
> +; PR9237: Assertion in VirtRegRewriter.cpp, ResurrectConfirmedKill
> +;         `KillOps[*SR] == KillOp && "invalid subreg kill flags"'
> +
> +%t = type { i32 }
> +
> +define i32 @foo(%t* %s) nounwind {
> +entry:
> +  br label %if.then735
> +
> +if.then735:
> +  %call747 = call i32 undef(%t* %s, i8* null, i8* undef, i32 128, i8* undef, i32 516) nounwind
> +  br i1 undef, label %if.then751, label %if.then758
> +
> +if.then751:
> +  unreachable
> +
> +if.then758:
> +  %add761 = add i32 %call747, 4
> +  %add763 = add i32 %add761, %call747
> +  %add.ptr768 = getelementptr inbounds [516 x i8]* null, i32 0, i32 %add761
> +  br i1 undef, label %cond.false783, label %cond.true771
> +
> +cond.true771:
> +  %call782 = call i8* @__memmove_chk(i8* %add.ptr768, i8* undef, i32 %call747, i32 undef)
> +  br label %cond.end791
> +
> +; CHECK: calll __memmove_chk
> +cond.false783:
> +  %call.i1035 = call i8* @__memmove_chk(i8* %add.ptr768, i8* undef, i32 %call747, i32 undef) nounwind
> +  br label %cond.end791
> +
> +cond.end791:
> +  %conv801 = trunc i32 %call747 to i8
> +  %add.ptr822.sum = add i32 %call747, 3
> +  %arrayidx833 = getelementptr inbounds [516 x i8]* null, i32 0, i32 %add.ptr822.sum
> +  store i8 %conv801, i8* %arrayidx833, align 1
> +  %cmp841 = icmp eq i8* undef, null
> +  br i1 %cmp841, label %if.end849, label %if.then843
> +
> +if.then843:
> +  unreachable
> +
> +if.end849:
> +  %call921 = call i32 undef(%t* %s, i8* undef, i8* undef, i32 %add763) nounwind
> +  unreachable
> +
> +}
> +
> +declare i8* @__memmove_chk(i8*, i8*, i32, i32) nounwind
> 
> 
> _______________________________________________
> 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