From: Chad Rosier Date: Mon, 24 Nov 2014 18:57:58 +0000 (+0000) Subject: [AArch64] Fix clobber computation in A57LoadBalancing pass. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=6b3c567613204e01dc74452a4d37f7706548ddee;p=oota-llvm.git [AArch64] Fix clobber computation in A57LoadBalancing pass. Extremely difficult to reproduce, so no test case included. PR21637 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222677 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp b/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp index 2503764a852..d4c742bb449 100644 --- a/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp +++ b/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp @@ -481,10 +481,16 @@ int AArch64A57FPLoadBalancing::scavengeRegister(Chain *G, Color C, RS.forward(I); AvailableRegs &= RS.getRegsAvailable(TRI->getRegClass(RegClassID)); - // Remove any registers clobbered by a regmask. + // Remove any registers clobbered by a regmask or any def register that is + // immediately dead. for (auto J : I->operands()) { if (J.isRegMask()) AvailableRegs.clearBitsNotInMask(J.getRegMask()); + + if (J.isReg() && J.isDef() && AvailableRegs[J.getReg()]) { + assert(J.isDead() && "Non-dead def should have been removed by now!"); + AvailableRegs.reset(J.getReg()); + } } }