From: Lang Hames Date: Wed, 10 Oct 2012 06:39:48 +0000 (+0000) Subject: My earlier "fix" for PBQP (see r165201) was incorrect. The real issue was that X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=8a8cf9617cdc735f0425e828bb7a6f401c0cf0f6;p=oota-llvm.git My earlier "fix" for PBQP (see r165201) was incorrect. The real issue was that checkRegMaskInterference only initializes the bitmask on the first interference. This fixes PR14027 and (re)fixes PR13945. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165608 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/RegAllocPBQP.cpp b/lib/CodeGen/RegAllocPBQP.cpp index f2473681a5d..984aab2a7a8 100644 --- a/lib/CodeGen/RegAllocPBQP.cpp +++ b/lib/CodeGen/RegAllocPBQP.cpp @@ -218,7 +218,7 @@ std::auto_ptr PBQPBuilder::build(MachineFunction *mf, LiveInterval *vregLI = &LIS->getInterval(vreg); // Record any overlaps with regmask operands. - BitVector regMaskOverlaps(tri->getNumRegs()); + BitVector regMaskOverlaps; LIS->checkRegMaskInterference(*vregLI, regMaskOverlaps); // Compute an initial allowed set for the current vreg. @@ -231,7 +231,7 @@ std::auto_ptr PBQPBuilder::build(MachineFunction *mf, continue; // vregLI crosses a regmask operand that clobbers preg. - if (!regMaskOverlaps.empty() && regMaskOverlaps.test(preg)) + if (!regMaskOverlaps.empty() && !regMaskOverlaps.test(preg)) continue; // vregLI overlaps fixed regunit interference.