diff options
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp b/llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp index 330237fc10b..a95476b9118 100644 --- a/llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp +++ b/llvm/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp @@ -315,7 +315,7 @@ bool AArch64A57FPLoadBalancing::runOnMachineFunction(MachineFunction &F) { return false; bool Changed = false; - DEBUG(dbgs() << "***** AArch64A57FPLoadBalancing *****\n"); + LLVM_DEBUG(dbgs() << "***** AArch64A57FPLoadBalancing *****\n"); MRI = &F.getRegInfo(); TRI = F.getRegInfo().getTargetRegisterInfo(); @@ -330,7 +330,8 @@ bool AArch64A57FPLoadBalancing::runOnMachineFunction(MachineFunction &F) { bool AArch64A57FPLoadBalancing::runOnBasicBlock(MachineBasicBlock &MBB) { bool Changed = false; - DEBUG(dbgs() << "Running on MBB: " << MBB << " - scanning instructions...\n"); + LLVM_DEBUG(dbgs() << "Running on MBB: " << MBB + << " - scanning instructions...\n"); // First, scan the basic block producing a set of chains. @@ -343,7 +344,8 @@ bool AArch64A57FPLoadBalancing::runOnBasicBlock(MachineBasicBlock &MBB) { for (auto &MI : MBB) scanInstruction(&MI, Idx++, ActiveChains, AllChains); - DEBUG(dbgs() << "Scan complete, "<< AllChains.size() << " chains created.\n"); + LLVM_DEBUG(dbgs() << "Scan complete, " << AllChains.size() + << " chains created.\n"); // Group the chains into disjoint sets based on their liveness range. This is // a poor-man's version of graph coloring. Ideally we'd create an interference @@ -360,7 +362,7 @@ bool AArch64A57FPLoadBalancing::runOnBasicBlock(MachineBasicBlock &MBB) { for (auto &J : AllChains) if (I != J && I->rangeOverlapsWith(*J)) EC.unionSets(I.get(), J.get()); - DEBUG(dbgs() << "Created " << EC.getNumClasses() << " disjoint sets.\n"); + LLVM_DEBUG(dbgs() << "Created " << EC.getNumClasses() << " disjoint sets.\n"); // Now we assume that every member of an equivalence class interferes // with every other member of that class, and with no members of other classes. @@ -440,7 +442,7 @@ bool AArch64A57FPLoadBalancing::colorChainSet(std::vector<Chain*> GV, MachineBasicBlock &MBB, int &Parity) { bool Changed = false; - DEBUG(dbgs() << "colorChainSet(): #sets=" << GV.size() << "\n"); + LLVM_DEBUG(dbgs() << "colorChainSet(): #sets=" << GV.size() << "\n"); // Sort by descending size order so that we allocate the most important // sets first. @@ -470,16 +472,18 @@ bool AArch64A57FPLoadBalancing::colorChainSet(std::vector<Chain*> GV, // But if we really don't care, use the chain's preferred color. C = G->getPreferredColor(); - DEBUG(dbgs() << " - Parity=" << Parity << ", Color=" - << ColorNames[(int)C] << "\n"); + LLVM_DEBUG(dbgs() << " - Parity=" << Parity + << ", Color=" << ColorNames[(int)C] << "\n"); // If we'll need a fixup FMOV, don't bother. Testing has shown that this // happens infrequently and when it does it has at least a 50% chance of // slowing code down instead of speeding it up. if (G->requiresFixup() && C != G->getPreferredColor()) { C = G->getPreferredColor(); - DEBUG(dbgs() << " - " << G->str() << " - not worthwhile changing; " - "color remains " << ColorNames[(int)C] << "\n"); + LLVM_DEBUG(dbgs() << " - " << G->str() + << " - not worthwhile changing; " + "color remains " + << ColorNames[(int)C] << "\n"); } Changed |= colorChain(G, C, MBB); @@ -528,17 +532,17 @@ int AArch64A57FPLoadBalancing::scavengeRegister(Chain *G, Color C, bool AArch64A57FPLoadBalancing::colorChain(Chain *G, Color C, MachineBasicBlock &MBB) { bool Changed = false; - DEBUG(dbgs() << " - colorChain(" << G->str() << ", " - << ColorNames[(int)C] << ")\n"); + LLVM_DEBUG(dbgs() << " - colorChain(" << G->str() << ", " + << ColorNames[(int)C] << ")\n"); // Try and obtain a free register of the right class. Without a register // to play with we cannot continue. int Reg = scavengeRegister(G, C, MBB); if (Reg == -1) { - DEBUG(dbgs() << "Scavenging (thus coloring) failed!\n"); + LLVM_DEBUG(dbgs() << "Scavenging (thus coloring) failed!\n"); return false; } - DEBUG(dbgs() << " - Scavenged register: " << printReg(Reg, TRI) << "\n"); + LLVM_DEBUG(dbgs() << " - Scavenged register: " << printReg(Reg, TRI) << "\n"); std::map<unsigned, unsigned> Substs; for (MachineInstr &I : *G) { @@ -586,11 +590,11 @@ bool AArch64A57FPLoadBalancing::colorChain(Chain *G, Color C, assert(Substs.size() == 0 && "No substitutions should be left active!"); if (G->getKill()) { - DEBUG(dbgs() << " - Kill instruction seen.\n"); + LLVM_DEBUG(dbgs() << " - Kill instruction seen.\n"); } else { // We didn't have a kill instruction, but we didn't seem to need to change // the destination register anyway. - DEBUG(dbgs() << " - Destination register not changed.\n"); + LLVM_DEBUG(dbgs() << " - Destination register not changed.\n"); } return Changed; } @@ -611,8 +615,8 @@ void AArch64A57FPLoadBalancing::scanInstruction( // unit. unsigned DestReg = MI->getOperand(0).getReg(); - DEBUG(dbgs() << "New chain started for register " << printReg(DestReg, TRI) - << " at " << *MI); + LLVM_DEBUG(dbgs() << "New chain started for register " + << printReg(DestReg, TRI) << " at " << *MI); auto G = llvm::make_unique<Chain>(MI, Idx, getColor(DestReg)); ActiveChains[DestReg] = G.get(); @@ -631,8 +635,8 @@ void AArch64A57FPLoadBalancing::scanInstruction( maybeKillChain(MI->getOperand(0), Idx, ActiveChains); if (ActiveChains.find(AccumReg) != ActiveChains.end()) { - DEBUG(dbgs() << "Chain found for accumulator register " - << printReg(AccumReg, TRI) << " in MI " << *MI); + LLVM_DEBUG(dbgs() << "Chain found for accumulator register " + << printReg(AccumReg, TRI) << " in MI " << *MI); // For simplicity we only chain together sequences of MULs/MLAs where the // accumulator register is killed on each instruction. This means we don't @@ -641,7 +645,7 @@ void AArch64A57FPLoadBalancing::scanInstruction( // FIXME: We could extend to handle the non-kill cases for more coverage. if (MI->getOperand(3).isKill()) { // Add to chain. - DEBUG(dbgs() << "Instruction was successfully added to chain.\n"); + LLVM_DEBUG(dbgs() << "Instruction was successfully added to chain.\n"); ActiveChains[AccumReg]->add(MI, Idx, getColor(DestReg)); // Handle cases where the destination is not the same as the accumulator. if (DestReg != AccumReg) { @@ -651,13 +655,14 @@ void AArch64A57FPLoadBalancing::scanInstruction( return; } - DEBUG(dbgs() << "Cannot add to chain because accumulator operand wasn't " - << "marked <kill>!\n"); + LLVM_DEBUG( + dbgs() << "Cannot add to chain because accumulator operand wasn't " + << "marked <kill>!\n"); maybeKillChain(MI->getOperand(3), Idx, ActiveChains); } - DEBUG(dbgs() << "Creating new chain for dest register " - << printReg(DestReg, TRI) << "\n"); + LLVM_DEBUG(dbgs() << "Creating new chain for dest register " + << printReg(DestReg, TRI) << "\n"); auto G = llvm::make_unique<Chain>(MI, Idx, getColor(DestReg)); ActiveChains[DestReg] = G.get(); AllChains.push_back(std::move(G)); @@ -685,8 +690,8 @@ maybeKillChain(MachineOperand &MO, unsigned Idx, // If this is a KILL of a current chain, record it. if (MO.isKill() && ActiveChains.find(MO.getReg()) != ActiveChains.end()) { - DEBUG(dbgs() << "Kill seen for chain " << printReg(MO.getReg(), TRI) - << "\n"); + LLVM_DEBUG(dbgs() << "Kill seen for chain " << printReg(MO.getReg(), TRI) + << "\n"); ActiveChains[MO.getReg()]->setKill(MI, Idx, /*Immutable=*/MO.isTied()); } ActiveChains.erase(MO.getReg()); @@ -696,8 +701,8 @@ maybeKillChain(MachineOperand &MO, unsigned Idx, for (auto I = ActiveChains.begin(), E = ActiveChains.end(); I != E;) { if (MO.clobbersPhysReg(I->first)) { - DEBUG(dbgs() << "Kill (regmask) seen for chain " - << printReg(I->first, TRI) << "\n"); + LLVM_DEBUG(dbgs() << "Kill (regmask) seen for chain " + << printReg(I->first, TRI) << "\n"); I->second->setKill(MI, Idx, /*Immutable=*/true); ActiveChains.erase(I++); } else |