1 //===-- SelectionDAGISel.cpp - Implement the SelectionDAGISel class -------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This implements the SelectionDAGISel class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #define DEBUG_TYPE "isel" 15 #include "ScheduleDAGSDNodes.h" 16 #include "SelectionDAGBuild.h" 17 #include "llvm/CodeGen/SelectionDAGISel.h" 18 #include "llvm/Analysis/AliasAnalysis.h" 19 #include "llvm/Constants.h" 20 #include "llvm/CallingConv.h" 21 #include "llvm/DerivedTypes.h" 22 #include "llvm/Function.h" 23 #include "llvm/GlobalVariable.h" 24 #include "llvm/InlineAsm.h" 25 #include "llvm/Instructions.h" 26 #include "llvm/Intrinsics.h" 27 #include "llvm/IntrinsicInst.h" 28 #include "llvm/CodeGen/FastISel.h" 29 #include "llvm/CodeGen/GCStrategy.h" 30 #include "llvm/CodeGen/GCMetadata.h" 31 #include "llvm/CodeGen/MachineFunction.h" 32 #include "llvm/CodeGen/MachineFrameInfo.h" 33 #include "llvm/CodeGen/MachineInstrBuilder.h" 34 #include "llvm/CodeGen/MachineJumpTableInfo.h" 35 #include "llvm/CodeGen/MachineModuleInfo.h" 36 #include "llvm/CodeGen/MachineRegisterInfo.h" 37 #include "llvm/CodeGen/ScheduleHazardRecognizer.h" 38 #include "llvm/CodeGen/SchedulerRegistry.h" 39 #include "llvm/CodeGen/SelectionDAG.h" 40 #include "llvm/CodeGen/DwarfWriter.h" 41 #include "llvm/Target/TargetRegisterInfo.h" 42 #include "llvm/Target/TargetData.h" 43 #include "llvm/Target/TargetFrameInfo.h" 44 #include "llvm/Target/TargetInstrInfo.h" 45 #include "llvm/Target/TargetLowering.h" 46 #include "llvm/Target/TargetMachine.h" 47 #include "llvm/Target/TargetOptions.h" 48 #include "llvm/Support/Compiler.h" 49 #include "llvm/Support/Debug.h" 50 #include "llvm/Support/MathExtras.h" 51 #include "llvm/Support/Timer.h" 52 #include <algorithm> 53 using namespace llvm; 54 55 static cl::opt<bool> 56 DisableLegalizeTypes("disable-legalize-types", cl::Hidden); 57 static cl::opt<bool> 58 EnableFastISelVerbose("fast-isel-verbose", cl::Hidden, 59 cl::desc("Enable verbose messages in the \"fast\" " 60 "instruction selector")); 61 static cl::opt<bool> 62 EnableFastISelAbort("fast-isel-abort", cl::Hidden, 63 cl::desc("Enable abort calls when \"fast\" instruction fails")); 64 static cl::opt<bool> 65 SchedLiveInCopies("schedule-livein-copies", 66 cl::desc("Schedule copies of livein registers"), 67 cl::init(false)); 68 69 #ifndef NDEBUG 70 static cl::opt<bool> 71 ViewDAGCombine1("view-dag-combine1-dags", cl::Hidden, 72 cl::desc("Pop up a window to show dags before the first " 73 "dag combine pass")); 74 static cl::opt<bool> 75 ViewLegalizeTypesDAGs("view-legalize-types-dags", cl::Hidden, 76 cl::desc("Pop up a window to show dags before legalize types")); 77 static cl::opt<bool> 78 ViewLegalizeDAGs("view-legalize-dags", cl::Hidden, 79 cl::desc("Pop up a window to show dags before legalize")); 80 static cl::opt<bool> 81 ViewDAGCombine2("view-dag-combine2-dags", cl::Hidden, 82 cl::desc("Pop up a window to show dags before the second " 83 "dag combine pass")); 84 static cl::opt<bool> 85 ViewDAGCombineLT("view-dag-combine-lt-dags", cl::Hidden, 86 cl::desc("Pop up a window to show dags before the post legalize types" 87 " dag combine pass")); 88 static cl::opt<bool> 89 ViewISelDAGs("view-isel-dags", cl::Hidden, 90 cl::desc("Pop up a window to show isel dags as they are selected")); 91 static cl::opt<bool> 92 ViewSchedDAGs("view-sched-dags", cl::Hidden, 93 cl::desc("Pop up a window to show sched dags as they are processed")); 94 static cl::opt<bool> 95 ViewSUnitDAGs("view-sunit-dags", cl::Hidden, 96 cl::desc("Pop up a window to show SUnit dags after they are processed")); 97 #else 98 static const bool ViewDAGCombine1 = false, 99 ViewLegalizeTypesDAGs = false, ViewLegalizeDAGs = false, 100 ViewDAGCombine2 = false, 101 ViewDAGCombineLT = false, 102 ViewISelDAGs = false, ViewSchedDAGs = false, 103 ViewSUnitDAGs = false; 104 #endif 105 106 //===---------------------------------------------------------------------===// 107 /// 108 /// RegisterScheduler class - Track the registration of instruction schedulers. 109 /// 110 //===---------------------------------------------------------------------===// 111 MachinePassRegistry RegisterScheduler::Registry; 112 113 //===---------------------------------------------------------------------===// 114 /// 115 /// ISHeuristic command line option for instruction schedulers. 116 /// 117 //===---------------------------------------------------------------------===// 118 static cl::opt<RegisterScheduler::FunctionPassCtor, false, 119 RegisterPassParser<RegisterScheduler> > 120 ISHeuristic("pre-RA-sched", 121 cl::init(&createDefaultScheduler), 122 cl::desc("Instruction schedulers available (before register" 123 " allocation):")); 124 125 static RegisterScheduler 126 defaultListDAGScheduler("default", "Best scheduler for the target", 127 createDefaultScheduler); 128 129 namespace llvm { 130 //===--------------------------------------------------------------------===// 131 /// createDefaultScheduler - This creates an instruction scheduler appropriate 132 /// for the target. 133 ScheduleDAGSDNodes* createDefaultScheduler(SelectionDAGISel *IS, 134 CodeGenOpt::Level OptLevel) { 135 const TargetLowering &TLI = IS->getTargetLowering(); 136 137 if (OptLevel == CodeGenOpt::None) 138 return createFastDAGScheduler(IS, OptLevel); 139 if (TLI.getSchedulingPreference() == TargetLowering::SchedulingForLatency) 140 return createTDListDAGScheduler(IS, OptLevel); 141 assert(TLI.getSchedulingPreference() == 142 TargetLowering::SchedulingForRegPressure && "Unknown sched type!"); 143 return createBURRListDAGScheduler(IS, OptLevel); 144 } 145 } 146 147 // EmitInstrWithCustomInserter - This method should be implemented by targets 148 // that mark instructions with the 'usesCustomDAGSchedInserter' flag. These 149 // instructions are special in various ways, which require special support to 150 // insert. The specified MachineInstr is created but not inserted into any 151 // basic blocks, and the scheduler passes ownership of it to this method. 152 MachineBasicBlock *TargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI, 153 MachineBasicBlock *MBB) const { 154 cerr << "If a target marks an instruction with " 155 << "'usesCustomDAGSchedInserter', it must implement " 156 << "TargetLowering::EmitInstrWithCustomInserter!\n"; 157 abort(); 158 return 0; 159 } 160 161 /// EmitLiveInCopy - Emit a copy for a live in physical register. If the 162 /// physical register has only a single copy use, then coalesced the copy 163 /// if possible. 164 static void EmitLiveInCopy(MachineBasicBlock *MBB, 165 MachineBasicBlock::iterator &InsertPos, 166 unsigned VirtReg, unsigned PhysReg, 167 const TargetRegisterClass *RC, 168 DenseMap<MachineInstr*, unsigned> &CopyRegMap, 169 const MachineRegisterInfo &MRI, 170 const TargetRegisterInfo &TRI, 171 const TargetInstrInfo &TII) { 172 unsigned NumUses = 0; 173 MachineInstr *UseMI = NULL; 174 for (MachineRegisterInfo::use_iterator UI = MRI.use_begin(VirtReg), 175 UE = MRI.use_end(); UI != UE; ++UI) { 176 UseMI = &*UI; 177 if (++NumUses > 1) 178 break; 179 } 180 181 // If the number of uses is not one, or the use is not a move instruction, 182 // don't coalesce. Also, only coalesce away a virtual register to virtual 183 // register copy. 184 bool Coalesced = false; 185 unsigned SrcReg, DstReg, SrcSubReg, DstSubReg; 186 if (NumUses == 1 && 187 TII.isMoveInstr(*UseMI, SrcReg, DstReg, SrcSubReg, DstSubReg) && 188 TargetRegisterInfo::isVirtualRegister(DstReg)) { 189 VirtReg = DstReg; 190 Coalesced = true; 191 } 192 193 // Now find an ideal location to insert the copy. 194 MachineBasicBlock::iterator Pos = InsertPos; 195 while (Pos != MBB->begin()) { 196 MachineInstr *PrevMI = prior(Pos); 197 DenseMap<MachineInstr*, unsigned>::iterator RI = CopyRegMap.find(PrevMI); 198 // copyRegToReg might emit multiple instructions to do a copy. 199 unsigned CopyDstReg = (RI == CopyRegMap.end()) ? 0 : RI->second; 200 if (CopyDstReg && !TRI.regsOverlap(CopyDstReg, PhysReg)) 201 // This is what the BB looks like right now: 202 // r1024 = mov r0 203 // ... 204 // r1 = mov r1024 205 // 206 // We want to insert "r1025 = mov r1". Inserting this copy below the 207 // move to r1024 makes it impossible for that move to be coalesced. 208 // 209 // r1025 = mov r1 210 // r1024 = mov r0 211 // ... 212 // r1 = mov 1024 213 // r2 = mov 1025 214 break; // Woot! Found a good location. 215 --Pos; 216 } 217 218 TII.copyRegToReg(*MBB, Pos, VirtReg, PhysReg, RC, RC); 219 CopyRegMap.insert(std::make_pair(prior(Pos), VirtReg)); 220 if (Coalesced) { 221 if (&*InsertPos == UseMI) ++InsertPos; 222 MBB->erase(UseMI); 223 } 224 } 225 226 /// EmitLiveInCopies - If this is the first basic block in the function, 227 /// and if it has live ins that need to be copied into vregs, emit the 228 /// copies into the block. 229 static void EmitLiveInCopies(MachineBasicBlock *EntryMBB, 230 const MachineRegisterInfo &MRI, 231 const TargetRegisterInfo &TRI, 232 const TargetInstrInfo &TII) { 233 if (SchedLiveInCopies) { 234 // Emit the copies at a heuristically-determined location in the block. 235 DenseMap<MachineInstr*, unsigned> CopyRegMap; 236 MachineBasicBlock::iterator InsertPos = EntryMBB->begin(); 237 for (MachineRegisterInfo::livein_iterator LI = MRI.livein_begin(), 238 E = MRI.livein_end(); LI != E; ++LI) 239 if (LI->second) { 240 const TargetRegisterClass *RC = MRI.getRegClass(LI->second); 241 EmitLiveInCopy(EntryMBB, InsertPos, LI->second, LI->first, 242 RC, CopyRegMap, MRI, TRI, TII); 243 } 244 } else { 245 // Emit the copies into the top of the block. 246 for (MachineRegisterInfo::livein_iterator LI = MRI.livein_begin(), 247 E = MRI.livein_end(); LI != E; ++LI) 248 if (LI->second) { 249 const TargetRegisterClass *RC = MRI.getRegClass(LI->second); 250 TII.copyRegToReg(*EntryMBB, EntryMBB->begin(), 251 LI->second, LI->first, RC, RC); 252 } 253 } 254 } 255 256 //===----------------------------------------------------------------------===// 257 // SelectionDAGISel code 258 //===----------------------------------------------------------------------===// 259 260 SelectionDAGISel::SelectionDAGISel(TargetMachine &tm, CodeGenOpt::Level OL) : 261 FunctionPass(&ID), TM(tm), TLI(*tm.getTargetLowering()), 262 FuncInfo(new FunctionLoweringInfo(TLI)), 263 CurDAG(new SelectionDAG(TLI, *FuncInfo)), 264 SDL(new SelectionDAGLowering(*CurDAG, TLI, *FuncInfo, OL)), 265 GFI(), 266 OptLevel(OL), 267 DAGSize(0) 268 {} 269 270 SelectionDAGISel::~SelectionDAGISel() { 271 delete SDL; 272 delete CurDAG; 273 delete FuncInfo; 274 } 275 276 unsigned SelectionDAGISel::MakeReg(MVT VT) { 277 return RegInfo->createVirtualRegister(TLI.getRegClassFor(VT)); 278 } 279 280 void SelectionDAGISel::getAnalysisUsage(AnalysisUsage &AU) const { 281 AU.addRequired<AliasAnalysis>(); 282 AU.addRequired<GCModuleInfo>(); 283 AU.addRequired<DwarfWriter>(); 284 AU.setPreservesAll(); 285 } 286 287 bool SelectionDAGISel::runOnFunction(Function &Fn) { 288 // Do some sanity-checking on the command-line options. 289 assert((!EnableFastISelVerbose || EnableFastISel) && 290 "-fast-isel-verbose requires -fast-isel"); 291 assert((!EnableFastISelAbort || EnableFastISel) && 292 "-fast-isel-abort requires -fast-isel"); 293 294 // Do not codegen any 'available_externally' functions at all, they have 295 // definitions outside the translation unit. 296 if (Fn.hasAvailableExternallyLinkage()) 297 return false; 298 299 300 // Get alias analysis for load/store combining. 301 AA = &getAnalysis<AliasAnalysis>(); 302 303 TargetMachine &TM = TLI.getTargetMachine(); 304 MF = &MachineFunction::construct(&Fn, TM); 305 const TargetInstrInfo &TII = *TM.getInstrInfo(); 306 const TargetRegisterInfo &TRI = *TM.getRegisterInfo(); 307 308 if (MF->getFunction()->hasGC()) 309 GFI = &getAnalysis<GCModuleInfo>().getFunctionInfo(*MF->getFunction()); 310 else 311 GFI = 0; 312 RegInfo = &MF->getRegInfo(); 313 DOUT << "\n\n\n=== " << Fn.getName() << "\n"; 314 315 MachineModuleInfo *MMI = getAnalysisIfAvailable<MachineModuleInfo>(); 316 DwarfWriter *DW = getAnalysisIfAvailable<DwarfWriter>(); 317 CurDAG->init(*MF, MMI, DW); 318 FuncInfo->set(Fn, *MF, *CurDAG, EnableFastISel); 319 SDL->init(GFI, *AA); 320 321 for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) 322 if (InvokeInst *Invoke = dyn_cast<InvokeInst>(I->getTerminator())) 323 // Mark landing pad. 324 FuncInfo->MBBMap[Invoke->getSuccessor(1)]->setIsLandingPad(); 325 326 SelectAllBasicBlocks(Fn, *MF, MMI, DW, TII); 327 328 // If the first basic block in the function has live ins that need to be 329 // copied into vregs, emit the copies into the top of the block before 330 // emitting the code for the block. 331 EmitLiveInCopies(MF->begin(), *RegInfo, TRI, TII); 332 333 // Add function live-ins to entry block live-in set. 334 for (MachineRegisterInfo::livein_iterator I = RegInfo->livein_begin(), 335 E = RegInfo->livein_end(); I != E; ++I) 336 MF->begin()->addLiveIn(I->first); 337 338 #ifndef NDEBUG 339 assert(FuncInfo->CatchInfoFound.size() == FuncInfo->CatchInfoLost.size() && 340 "Not all catch info was assigned to a landing pad!"); 341 #endif 342 343 FuncInfo->clear(); 344 345 return true; 346 } 347 348 static void copyCatchInfo(BasicBlock *SrcBB, BasicBlock *DestBB, 349 MachineModuleInfo *MMI, FunctionLoweringInfo &FLI) { 350 for (BasicBlock::iterator I = SrcBB->begin(), E = --SrcBB->end(); I != E; ++I) 351 if (EHSelectorInst *EHSel = dyn_cast<EHSelectorInst>(I)) { 352 // Apply the catch info to DestBB. 353 AddCatchInfo(*EHSel, MMI, FLI.MBBMap[DestBB]); 354 #ifndef NDEBUG 355 if (!FLI.MBBMap[SrcBB]->isLandingPad()) 356 FLI.CatchInfoFound.insert(EHSel); 357 #endif 358 } 359 } 360 361 /// IsFixedFrameObjectWithPosOffset - Check if object is a fixed frame object and 362 /// whether object offset >= 0. 363 static bool 364 IsFixedFrameObjectWithPosOffset(MachineFrameInfo *MFI, SDValue Op) { 365 if (!isa<FrameIndexSDNode>(Op)) return false; 366 367 FrameIndexSDNode * FrameIdxNode = dyn_cast<FrameIndexSDNode>(Op); 368 int FrameIdx = FrameIdxNode->getIndex(); 369 return MFI->isFixedObjectIndex(FrameIdx) && 370 MFI->getObjectOffset(FrameIdx) >= 0; 371 } 372 373 /// IsPossiblyOverwrittenArgumentOfTailCall - Check if the operand could 374 /// possibly be overwritten when lowering the outgoing arguments in a tail 375 /// call. Currently the implementation of this call is very conservative and 376 /// assumes all arguments sourcing from FORMAL_ARGUMENTS or a CopyFromReg with 377 /// virtual registers would be overwritten by direct lowering. 378 static bool IsPossiblyOverwrittenArgumentOfTailCall(SDValue Op, 379 MachineFrameInfo *MFI) { 380 RegisterSDNode * OpReg = NULL; 381 if (Op.getOpcode() == ISD::FORMAL_ARGUMENTS || 382 (Op.getOpcode()== ISD::CopyFromReg && 383 (OpReg = dyn_cast<RegisterSDNode>(Op.getOperand(1))) && 384 (OpReg->getReg() >= TargetRegisterInfo::FirstVirtualRegister)) || 385 (Op.getOpcode() == ISD::LOAD && 386 IsFixedFrameObjectWithPosOffset(MFI, Op.getOperand(1))) || 387 (Op.getOpcode() == ISD::MERGE_VALUES && 388 Op.getOperand(Op.getResNo()).getOpcode() == ISD::LOAD && 389 IsFixedFrameObjectWithPosOffset(MFI, Op.getOperand(Op.getResNo()). 390 getOperand(1)))) 391 return true; 392 return false; 393 } 394 395 /// CheckDAGForTailCallsAndFixThem - This Function looks for CALL nodes in the 396 /// DAG and fixes their tailcall attribute operand. 397 static void CheckDAGForTailCallsAndFixThem(SelectionDAG &DAG, 398 const TargetLowering& TLI) { 399 SDNode * Ret = NULL; 400 SDValue Terminator = DAG.getRoot(); 401 402 // Find RET node. 403 if (Terminator.getOpcode() == ISD::RET) { 404 Ret = Terminator.getNode(); 405 } 406 407 // Fix tail call attribute of CALL nodes. 408 for (SelectionDAG::allnodes_iterator BE = DAG.allnodes_begin(), 409 BI = DAG.allnodes_end(); BI != BE; ) { 410 --BI; 411 if (CallSDNode *TheCall = dyn_cast<CallSDNode>(BI)) { 412 SDValue OpRet(Ret, 0); 413 SDValue OpCall(BI, 0); 414 bool isMarkedTailCall = TheCall->isTailCall(); 415 // If CALL node has tail call attribute set to true and the call is not 416 // eligible (no RET or the target rejects) the attribute is fixed to 417 // false. The TargetLowering::IsEligibleForTailCallOptimization function 418 // must correctly identify tail call optimizable calls. 419 if (!isMarkedTailCall) continue; 420 if (Ret==NULL || 421 !TLI.IsEligibleForTailCallOptimization(TheCall, OpRet, DAG)) { 422 // Not eligible. Mark CALL node as non tail call. Note that we 423 // can modify the call node in place since calls are not CSE'd. 424 TheCall->setNotTailCall(); 425 } else { 426 // Look for tail call clobbered arguments. Emit a series of 427 // copyto/copyfrom virtual register nodes to protect them. 428 SmallVector<SDValue, 32> Ops; 429 SDValue Chain = TheCall->getChain(), InFlag; 430 Ops.push_back(Chain); 431 Ops.push_back(TheCall->getCallee()); 432 for (unsigned i = 0, e = TheCall->getNumArgs(); i != e; ++i) { 433 SDValue Arg = TheCall->getArg(i); 434 bool isByVal = TheCall->getArgFlags(i).isByVal(); 435 MachineFunction &MF = DAG.getMachineFunction(); 436 MachineFrameInfo *MFI = MF.getFrameInfo(); 437 if (!isByVal && 438 IsPossiblyOverwrittenArgumentOfTailCall(Arg, MFI)) { 439 MVT VT = Arg.getValueType(); 440 unsigned VReg = MF.getRegInfo(). 441 createVirtualRegister(TLI.getRegClassFor(VT)); 442 Chain = DAG.getCopyToReg(Chain, Arg.getDebugLoc(), 443 VReg, Arg, InFlag); 444 InFlag = Chain.getValue(1); 445 Arg = DAG.getCopyFromReg(Chain, Arg.getDebugLoc(), 446 VReg, VT, InFlag); 447 Chain = Arg.getValue(1); 448 InFlag = Arg.getValue(2); 449 } 450 Ops.push_back(Arg); 451 Ops.push_back(TheCall->getArgFlagsVal(i)); 452 } 453 // Link in chain of CopyTo/CopyFromReg. 454 Ops[0] = Chain; 455 DAG.UpdateNodeOperands(OpCall, Ops.begin(), Ops.size()); 456 } 457 } 458 } 459 } 460 461 void SelectionDAGISel::SelectBasicBlock(BasicBlock *LLVMBB, 462 BasicBlock::iterator Begin, 463 BasicBlock::iterator End) { 464 SDL->setCurrentBasicBlock(BB); 465 466 // Lower all of the non-terminator instructions. 467 for (BasicBlock::iterator I = Begin; I != End; ++I) 468 if (!isa<TerminatorInst>(I)) 469 SDL->visit(*I); 470 471 // Ensure that all instructions which are used outside of their defining 472 // blocks are available as virtual registers. Invoke is handled elsewhere. 473 for (BasicBlock::iterator I = Begin; I != End; ++I) 474 if (!isa<PHINode>(I) && !isa<InvokeInst>(I)) 475 SDL->CopyToExportRegsIfNeeded(I); 476 477 // Handle PHI nodes in successor blocks. 478 if (End == LLVMBB->end()) { 479 HandlePHINodesInSuccessorBlocks(LLVMBB); 480 481 // Lower the terminator after the copies are emitted. 482 SDL->visit(*LLVMBB->getTerminator()); 483 } 484 485 // Make sure the root of the DAG is up-to-date. 486 CurDAG->setRoot(SDL->getControlRoot()); 487 488 // Check whether calls in this block are real tail calls. Fix up CALL nodes 489 // with correct tailcall attribute so that the target can rely on the tailcall 490 // attribute indicating whether the call is really eligible for tail call 491 // optimization. 492 if (PerformTailCallOpt) 493 CheckDAGForTailCallsAndFixThem(*CurDAG, TLI); 494 495 // Final step, emit the lowered DAG as machine code. 496 CodeGenAndEmitDAG(); 497 SDL->clear(); 498 } 499 500 void SelectionDAGISel::ComputeLiveOutVRegInfo() { 501 SmallPtrSet<SDNode*, 128> VisitedNodes; 502 SmallVector<SDNode*, 128> Worklist; 503 504 Worklist.push_back(CurDAG->getRoot().getNode()); 505 506 APInt Mask; 507 APInt KnownZero; 508 APInt KnownOne; 509 510 while (!Worklist.empty()) { 511 SDNode *N = Worklist.back(); 512 Worklist.pop_back(); 513 514 // If we've already seen this node, ignore it. 515 if (!VisitedNodes.insert(N)) 516 continue; 517 518 // Otherwise, add all chain operands to the worklist. 519 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) 520 if (N->getOperand(i).getValueType() == MVT::Other) 521 Worklist.push_back(N->getOperand(i).getNode()); 522 523 // If this is a CopyToReg with a vreg dest, process it. 524 if (N->getOpcode() != ISD::CopyToReg) 525 continue; 526 527 unsigned DestReg = cast<RegisterSDNode>(N->getOperand(1))->getReg(); 528 if (!TargetRegisterInfo::isVirtualRegister(DestReg)) 529 continue; 530 531 // Ignore non-scalar or non-integer values. 532 SDValue Src = N->getOperand(2); 533 MVT SrcVT = Src.getValueType(); 534 if (!SrcVT.isInteger() || SrcVT.isVector()) 535 continue; 536 537 unsigned NumSignBits = CurDAG->ComputeNumSignBits(Src); 538 Mask = APInt::getAllOnesValue(SrcVT.getSizeInBits()); 539 CurDAG->ComputeMaskedBits(Src, Mask, KnownZero, KnownOne); 540 541 // Only install this information if it tells us something. 542 if (NumSignBits != 1 || KnownZero != 0 || KnownOne != 0) { 543 DestReg -= TargetRegisterInfo::FirstVirtualRegister; 544 FunctionLoweringInfo &FLI = CurDAG->getFunctionLoweringInfo(); 545 if (DestReg >= FLI.LiveOutRegInfo.size()) 546 FLI.LiveOutRegInfo.resize(DestReg+1); 547 FunctionLoweringInfo::LiveOutInfo &LOI = FLI.LiveOutRegInfo[DestReg]; 548 LOI.NumSignBits = NumSignBits; 549 LOI.KnownOne = KnownOne; 550 LOI.KnownZero = KnownZero; 551 } 552 } 553 } 554 555 void SelectionDAGISel::CodeGenAndEmitDAG() { 556 std::string GroupName; 557 if (TimePassesIsEnabled) 558 GroupName = "Instruction Selection and Scheduling"; 559 std::string BlockName; 560 if (ViewDAGCombine1 || ViewLegalizeTypesDAGs || ViewLegalizeDAGs || 561 ViewDAGCombine2 || ViewDAGCombineLT || ViewISelDAGs || ViewSchedDAGs || 562 ViewSUnitDAGs) 563 BlockName = CurDAG->getMachineFunction().getFunction()->getName() + ':' + 564 BB->getBasicBlock()->getName(); 565 566 DOUT << "Initial selection DAG:\n"; 567 DEBUG(CurDAG->dump()); 568 569 if (ViewDAGCombine1) CurDAG->viewGraph("dag-combine1 input for " + BlockName); 570 571 // Run the DAG combiner in pre-legalize mode. 572 if (TimePassesIsEnabled) { 573 NamedRegionTimer T("DAG Combining 1", GroupName); 574 CurDAG->Combine(Unrestricted, *AA, OptLevel); 575 } else { 576 CurDAG->Combine(Unrestricted, *AA, OptLevel); 577 } 578 579 DOUT << "Optimized lowered selection DAG:\n"; 580 DEBUG(CurDAG->dump()); 581 582 // Second step, hack on the DAG until it only uses operations and types that 583 // the target supports. 584 if (!DisableLegalizeTypes) { 585 if (ViewLegalizeTypesDAGs) CurDAG->viewGraph("legalize-types input for " + 586 BlockName); 587 588 bool Changed; 589 if (TimePassesIsEnabled) { 590 NamedRegionTimer T("Type Legalization", GroupName); 591 Changed = CurDAG->LegalizeTypes(); 592 } else { 593 Changed = CurDAG->LegalizeTypes(); 594 } 595 596 DOUT << "Type-legalized selection DAG:\n"; 597 DEBUG(CurDAG->dump()); 598 599 if (Changed) { 600 if (ViewDAGCombineLT) 601 CurDAG->viewGraph("dag-combine-lt input for " + BlockName); 602 603 // Run the DAG combiner in post-type-legalize mode. 604 if (TimePassesIsEnabled) { 605 NamedRegionTimer T("DAG Combining after legalize types", GroupName); 606 CurDAG->Combine(NoIllegalTypes, *AA, OptLevel); 607 } else { 608 CurDAG->Combine(NoIllegalTypes, *AA, OptLevel); 609 } 610 611 DOUT << "Optimized type-legalized selection DAG:\n"; 612 DEBUG(CurDAG->dump()); 613 } 614 615 if (TimePassesIsEnabled) { 616 NamedRegionTimer T("Vector Legalization", GroupName); 617 Changed = CurDAG->LegalizeVectors(); 618 } else { 619 Changed = CurDAG->LegalizeVectors(); 620 } 621 622 if (Changed) { 623 if (TimePassesIsEnabled) { 624 NamedRegionTimer T("Type Legalization 2", GroupName); 625 Changed = CurDAG->LegalizeTypes(); 626 } else { 627 Changed = CurDAG->LegalizeTypes(); 628 } 629 630 if (ViewDAGCombineLT) 631 CurDAG->viewGraph("dag-combine-lv input for " + BlockName); 632 633 // Run the DAG combiner in post-type-legalize mode. 634 if (TimePassesIsEnabled) { 635 NamedRegionTimer T("DAG Combining after legalize vectors", GroupName); 636 CurDAG->Combine(NoIllegalOperations, *AA, OptLevel); 637 } else { 638 CurDAG->Combine(NoIllegalOperations, *AA, OptLevel); 639 } 640 641 DOUT << "Optimized vector-legalized selection DAG:\n"; 642 DEBUG(CurDAG->dump()); 643 } 644 } 645 646 if (ViewLegalizeDAGs) CurDAG->viewGraph("legalize input for " + BlockName); 647 648 if (TimePassesIsEnabled) { 649 NamedRegionTimer T("DAG Legalization", GroupName); 650 CurDAG->Legalize(DisableLegalizeTypes, OptLevel); 651 } else { 652 CurDAG->Legalize(DisableLegalizeTypes, OptLevel); 653 } 654 655 DOUT << "Legalized selection DAG:\n"; 656 DEBUG(CurDAG->dump()); 657 658 if (ViewDAGCombine2) CurDAG->viewGraph("dag-combine2 input for " + BlockName); 659 660 // Run the DAG combiner in post-legalize mode. 661 if (TimePassesIsEnabled) { 662 NamedRegionTimer T("DAG Combining 2", GroupName); 663 CurDAG->Combine(NoIllegalOperations, *AA, OptLevel); 664 } else { 665 CurDAG->Combine(NoIllegalOperations, *AA, OptLevel); 666 } 667 668 DOUT << "Optimized legalized selection DAG:\n"; 669 DEBUG(CurDAG->dump()); 670 671 if (ViewISelDAGs) CurDAG->viewGraph("isel input for " + BlockName); 672 673 if (OptLevel != CodeGenOpt::None) 674 ComputeLiveOutVRegInfo(); 675 676 // Third, instruction select all of the operations to machine code, adding the 677 // code to the MachineBasicBlock. 678 if (TimePassesIsEnabled) { 679 NamedRegionTimer T("Instruction Selection", GroupName); 680 InstructionSelect(); 681 } else { 682 InstructionSelect(); 683 } 684 685 DOUT << "Selected selection DAG:\n"; 686 DEBUG(CurDAG->dump()); 687 688 if (ViewSchedDAGs) CurDAG->viewGraph("scheduler input for " + BlockName); 689 690 // Schedule machine code. 691 ScheduleDAGSDNodes *Scheduler = CreateScheduler(); 692 if (TimePassesIsEnabled) { 693 NamedRegionTimer T("Instruction Scheduling", GroupName); 694 Scheduler->Run(CurDAG, BB, BB->end()); 695 } else { 696 Scheduler->Run(CurDAG, BB, BB->end()); 697 } 698 699 if (ViewSUnitDAGs) Scheduler->viewGraph(); 700 701 // Emit machine code to BB. This can change 'BB' to the last block being 702 // inserted into. 703 if (TimePassesIsEnabled) { 704 NamedRegionTimer T("Instruction Creation", GroupName); 705 BB = Scheduler->EmitSchedule(); 706 } else { 707 BB = Scheduler->EmitSchedule(); 708 } 709 710 // Free the scheduler state. 711 if (TimePassesIsEnabled) { 712 NamedRegionTimer T("Instruction Scheduling Cleanup", GroupName); 713 delete Scheduler; 714 } else { 715 delete Scheduler; 716 } 717 718 DOUT << "Selected machine code:\n"; 719 DEBUG(BB->dump()); 720 } 721 722 void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, 723 MachineFunction &MF, 724 MachineModuleInfo *MMI, 725 DwarfWriter *DW, 726 const TargetInstrInfo &TII) { 727 // Initialize the Fast-ISel state, if needed. 728 FastISel *FastIS = 0; 729 if (EnableFastISel) 730 FastIS = TLI.createFastISel(MF, MMI, DW, 731 FuncInfo->ValueMap, 732 FuncInfo->MBBMap, 733 FuncInfo->StaticAllocaMap 734 #ifndef NDEBUG 735 , FuncInfo->CatchInfoLost 736 #endif 737 ); 738 739 // Iterate over all basic blocks in the function. 740 for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) { 741 BasicBlock *LLVMBB = &*I; 742 BB = FuncInfo->MBBMap[LLVMBB]; 743 744 BasicBlock::iterator const Begin = LLVMBB->begin(); 745 BasicBlock::iterator const End = LLVMBB->end(); 746 BasicBlock::iterator BI = Begin; 747 748 // Lower any arguments needed in this block if this is the entry block. 749 bool SuppressFastISel = false; 750 if (LLVMBB == &Fn.getEntryBlock()) { 751 LowerArguments(LLVMBB); 752 753 // If any of the arguments has the byval attribute, forgo 754 // fast-isel in the entry block. 755 if (FastIS) { 756 unsigned j = 1; 757 for (Function::arg_iterator I = Fn.arg_begin(), E = Fn.arg_end(); 758 I != E; ++I, ++j) 759 if (Fn.paramHasAttr(j, Attribute::ByVal)) { 760 if (EnableFastISelVerbose || EnableFastISelAbort) 761 cerr << "FastISel skips entry block due to byval argument\n"; 762 SuppressFastISel = true; 763 break; 764 } 765 } 766 } 767 768 if (MMI && BB->isLandingPad()) { 769 // Add a label to mark the beginning of the landing pad. Deletion of the 770 // landing pad can thus be detected via the MachineModuleInfo. 771 unsigned LabelID = MMI->addLandingPad(BB); 772 773 const TargetInstrDesc &II = TII.get(TargetInstrInfo::EH_LABEL); 774 BuildMI(BB, SDL->getCurDebugLoc(), II).addImm(LabelID); 775 776 // Mark exception register as live in. 777 unsigned Reg = TLI.getExceptionAddressRegister(); 778 if (Reg) BB->addLiveIn(Reg); 779 780 // Mark exception selector register as live in. 781 Reg = TLI.getExceptionSelectorRegister(); 782 if (Reg) BB->addLiveIn(Reg); 783 784 // FIXME: Hack around an exception handling flaw (PR1508): the personality 785 // function and list of typeids logically belong to the invoke (or, if you 786 // like, the basic block containing the invoke), and need to be associated 787 // with it in the dwarf exception handling tables. Currently however the 788 // information is provided by an intrinsic (eh.selector) that can be moved 789 // to unexpected places by the optimizers: if the unwind edge is critical, 790 // then breaking it can result in the intrinsics being in the successor of 791 // the landing pad, not the landing pad itself. This results in exceptions 792 // not being caught because no typeids are associated with the invoke. 793 // This may not be the only way things can go wrong, but it is the only way 794 // we try to work around for the moment. 795 BranchInst *Br = dyn_cast<BranchInst>(LLVMBB->getTerminator()); 796 797 if (Br && Br->isUnconditional()) { // Critical edge? 798 BasicBlock::iterator I, E; 799 for (I = LLVMBB->begin(), E = --LLVMBB->end(); I != E; ++I) 800 if (isa<EHSelectorInst>(I)) 801 break; 802 803 if (I == E) 804 // No catch info found - try to extract some from the successor. 805 copyCatchInfo(Br->getSuccessor(0), LLVMBB, MMI, *FuncInfo); 806 } 807 } 808 809 // Before doing SelectionDAG ISel, see if FastISel has been requested. 810 if (FastIS && !SuppressFastISel) { 811 // Emit code for any incoming arguments. This must happen before 812 // beginning FastISel on the entry block. 813 if (LLVMBB == &Fn.getEntryBlock()) { 814 CurDAG->setRoot(SDL->getControlRoot()); 815 CodeGenAndEmitDAG(); 816 SDL->clear(); 817 } 818 FastIS->startNewBlock(BB); 819 // Do FastISel on as many instructions as possible. 820 for (; BI != End; ++BI) { 821 // Just before the terminator instruction, insert instructions to 822 // feed PHI nodes in successor blocks. 823 if (isa<TerminatorInst>(BI)) 824 if (!HandlePHINodesInSuccessorBlocksFast(LLVMBB, FastIS)) { 825 if (EnableFastISelVerbose || EnableFastISelAbort) { 826 cerr << "FastISel miss: "; 827 BI->dump(); 828 } 829 if (EnableFastISelAbort) 830 assert(0 && "FastISel didn't handle a PHI in a successor"); 831 break; 832 } 833 834 // First try normal tablegen-generated "fast" selection. 835 if (FastIS->SelectInstruction(BI)) 836 continue; 837 838 // Next, try calling the target to attempt to handle the instruction. 839 if (FastIS->TargetSelectInstruction(BI)) 840 continue; 841 842 // Then handle certain instructions as single-LLVM-Instruction blocks. 843 if (isa<CallInst>(BI)) { 844 if (EnableFastISelVerbose || EnableFastISelAbort) { 845 cerr << "FastISel missed call: "; 846 BI->dump(); 847 } 848 849 if (BI->getType() != Type::VoidTy) { 850 unsigned &R = FuncInfo->ValueMap[BI]; 851 if (!R) 852 R = FuncInfo->CreateRegForValue(BI); 853 } 854 855 SDL->setCurDebugLoc(FastIS->getCurDebugLoc()); 856 SelectBasicBlock(LLVMBB, BI, next(BI)); 857 // If the instruction was codegen'd with multiple blocks, 858 // inform the FastISel object where to resume inserting. 859 FastIS->setCurrentBlock(BB); 860 continue; 861 } 862 863 // Otherwise, give up on FastISel for the rest of the block. 864 // For now, be a little lenient about non-branch terminators. 865 if (!isa<TerminatorInst>(BI) || isa<BranchInst>(BI)) { 866 if (EnableFastISelVerbose || EnableFastISelAbort) { 867 cerr << "FastISel miss: "; 868 BI->dump(); 869 } 870 if (EnableFastISelAbort) 871 // The "fast" selector couldn't handle something and bailed. 872 // For the purpose of debugging, just abort. 873 assert(0 && "FastISel didn't select the entire block"); 874 } 875 break; 876 } 877 } 878 879 // Run SelectionDAG instruction selection on the remainder of the block 880 // not handled by FastISel. If FastISel is not run, this is the entire 881 // block. 882 if (BI != End) { 883 // If FastISel is run and it has known DebugLoc then use it. 884 if (FastIS && !FastIS->getCurDebugLoc().isUnknown()) 885 SDL->setCurDebugLoc(FastIS->getCurDebugLoc()); 886 SelectBasicBlock(LLVMBB, BI, End); 887 } 888 889 FinishBasicBlock(); 890 } 891 892 delete FastIS; 893 } 894 895 void 896 SelectionDAGISel::FinishBasicBlock() { 897 898 DOUT << "Target-post-processed machine code:\n"; 899 DEBUG(BB->dump()); 900 901 DOUT << "Total amount of phi nodes to update: " 902 << SDL->PHINodesToUpdate.size() << "\n"; 903 DEBUG(for (unsigned i = 0, e = SDL->PHINodesToUpdate.size(); i != e; ++i) 904 DOUT << "Node " << i << " : (" << SDL->PHINodesToUpdate[i].first 905 << ", " << SDL->PHINodesToUpdate[i].second << ")\n";); 906 907 // Next, now that we know what the last MBB the LLVM BB expanded is, update 908 // PHI nodes in successors. 909 if (SDL->SwitchCases.empty() && 910 SDL->JTCases.empty() && 911 SDL->BitTestCases.empty()) { 912 for (unsigned i = 0, e = SDL->PHINodesToUpdate.size(); i != e; ++i) { 913 MachineInstr *PHI = SDL->PHINodesToUpdate[i].first; 914 assert(PHI->getOpcode() == TargetInstrInfo::PHI && 915 "This is not a machine PHI node that we are updating!"); 916 PHI->addOperand(MachineOperand::CreateReg(SDL->PHINodesToUpdate[i].second, 917 false)); 918 PHI->addOperand(MachineOperand::CreateMBB(BB)); 919 } 920 SDL->PHINodesToUpdate.clear(); 921 return; 922 } 923 924 for (unsigned i = 0, e = SDL->BitTestCases.size(); i != e; ++i) { 925 // Lower header first, if it wasn't already lowered 926 if (!SDL->BitTestCases[i].Emitted) { 927 // Set the current basic block to the mbb we wish to insert the code into 928 BB = SDL->BitTestCases[i].Parent; 929 SDL->setCurrentBasicBlock(BB); 930 // Emit the code 931 SDL->visitBitTestHeader(SDL->BitTestCases[i]); 932 CurDAG->setRoot(SDL->getRoot()); 933 CodeGenAndEmitDAG(); 934 SDL->clear(); 935 } 936 937 for (unsigned j = 0, ej = SDL->BitTestCases[i].Cases.size(); j != ej; ++j) { 938 // Set the current basic block to the mbb we wish to insert the code into 939 BB = SDL->BitTestCases[i].Cases[j].ThisBB; 940 SDL->setCurrentBasicBlock(BB); 941 // Emit the code 942 if (j+1 != ej) 943 SDL->visitBitTestCase(SDL->BitTestCases[i].Cases[j+1].ThisBB, 944 SDL->BitTestCases[i].Reg, 945 SDL->BitTestCases[i].Cases[j]); 946 else 947 SDL->visitBitTestCase(SDL->BitTestCases[i].Default, 948 SDL->BitTestCases[i].Reg, 949 SDL->BitTestCases[i].Cases[j]); 950 951 952 CurDAG->setRoot(SDL->getRoot()); 953 CodeGenAndEmitDAG(); 954 SDL->clear(); 955 } 956 957 // Update PHI Nodes 958 for (unsigned pi = 0, pe = SDL->PHINodesToUpdate.size(); pi != pe; ++pi) { 959 MachineInstr *PHI = SDL->PHINodesToUpdate[pi].first; 960 MachineBasicBlock *PHIBB = PHI->getParent(); 961 assert(PHI->getOpcode() == TargetInstrInfo::PHI && 962 "This is not a machine PHI node that we are updating!"); 963 // This is "default" BB. We have two jumps to it. From "header" BB and 964 // from last "case" BB. 965 if (PHIBB == SDL->BitTestCases[i].Default) { 966 PHI->addOperand(MachineOperand::CreateReg(SDL->PHINodesToUpdate[pi].second, 967 false)); 968 PHI->addOperand(MachineOperand::CreateMBB(SDL->BitTestCases[i].Parent)); 969 PHI->addOperand(MachineOperand::CreateReg(SDL->PHINodesToUpdate[pi].second, 970 false)); 971 PHI->addOperand(MachineOperand::CreateMBB(SDL->BitTestCases[i].Cases. 972 back().ThisBB)); 973 } 974 // One of "cases" BB. 975 for (unsigned j = 0, ej = SDL->BitTestCases[i].Cases.size(); 976 j != ej; ++j) { 977 MachineBasicBlock* cBB = SDL->BitTestCases[i].Cases[j].ThisBB; 978 if (cBB->succ_end() != 979 std::find(cBB->succ_begin(),cBB->succ_end(), PHIBB)) { 980 PHI->addOperand(MachineOperand::CreateReg(SDL->PHINodesToUpdate[pi].second, 981 false)); 982 PHI->addOperand(MachineOperand::CreateMBB(cBB)); 983 } 984 } 985 } 986 } 987 SDL->BitTestCases.clear(); 988 989 // If the JumpTable record is filled in, then we need to emit a jump table. 990 // Updating the PHI nodes is tricky in this case, since we need to determine 991 // whether the PHI is a successor of the range check MBB or the jump table MBB 992 for (unsigned i = 0, e = SDL->JTCases.size(); i != e; ++i) { 993 // Lower header first, if it wasn't already lowered 994 if (!SDL->JTCases[i].first.Emitted) { 995 // Set the current basic block to the mbb we wish to insert the code into 996 BB = SDL->JTCases[i].first.HeaderBB; 997 SDL->setCurrentBasicBlock(BB); 998 // Emit the code 999 SDL->visitJumpTableHeader(SDL->JTCases[i].second, SDL->JTCases[i].first); 1000 CurDAG->setRoot(SDL->getRoot()); 1001 CodeGenAndEmitDAG(); 1002 SDL->clear(); 1003 } 1004 1005 // Set the current basic block to the mbb we wish to insert the code into 1006 BB = SDL->JTCases[i].second.MBB; 1007 SDL->setCurrentBasicBlock(BB); 1008 // Emit the code 1009 SDL->visitJumpTable(SDL->JTCases[i].second); 1010 CurDAG->setRoot(SDL->getRoot()); 1011 CodeGenAndEmitDAG(); 1012 SDL->clear(); 1013 1014 // Update PHI Nodes 1015 for (unsigned pi = 0, pe = SDL->PHINodesToUpdate.size(); pi != pe; ++pi) { 1016 MachineInstr *PHI = SDL->PHINodesToUpdate[pi].first; 1017 MachineBasicBlock *PHIBB = PHI->getParent(); 1018 assert(PHI->getOpcode() == TargetInstrInfo::PHI && 1019 "This is not a machine PHI node that we are updating!"); 1020 // "default" BB. We can go there only from header BB. 1021 if (PHIBB == SDL->JTCases[i].second.Default) { 1022 PHI->addOperand(MachineOperand::CreateReg(SDL->PHINodesToUpdate[pi].second, 1023 false)); 1024 PHI->addOperand(MachineOperand::CreateMBB(SDL->JTCases[i].first.HeaderBB)); 1025 } 1026 // JT BB. Just iterate over successors here 1027 if (BB->succ_end() != std::find(BB->succ_begin(),BB->succ_end(), PHIBB)) { 1028 PHI->addOperand(MachineOperand::CreateReg(SDL->PHINodesToUpdate[pi].second, 1029 false)); 1030 PHI->addOperand(MachineOperand::CreateMBB(BB)); 1031 } 1032 } 1033 } 1034 SDL->JTCases.clear(); 1035 1036 // If the switch block involved a branch to one of the actual successors, we 1037 // need to update PHI nodes in that block. 1038 for (unsigned i = 0, e = SDL->PHINodesToUpdate.size(); i != e; ++i) { 1039 MachineInstr *PHI = SDL->PHINodesToUpdate[i].first; 1040 assert(PHI->getOpcode() == TargetInstrInfo::PHI && 1041 "This is not a machine PHI node that we are updating!"); 1042 if (BB->isSuccessor(PHI->getParent())) { 1043 PHI->addOperand(MachineOperand::CreateReg(SDL->PHINodesToUpdate[i].second, 1044 false)); 1045 PHI->addOperand(MachineOperand::CreateMBB(BB)); 1046 } 1047 } 1048 1049 // If we generated any switch lowering information, build and codegen any 1050 // additional DAGs necessary. 1051 for (unsigned i = 0, e = SDL->SwitchCases.size(); i != e; ++i) { 1052 // Set the current basic block to the mbb we wish to insert the code into 1053 BB = SDL->SwitchCases[i].ThisBB; 1054 SDL->setCurrentBasicBlock(BB); 1055 1056 // Emit the code 1057 SDL->visitSwitchCase(SDL->SwitchCases[i]); 1058 CurDAG->setRoot(SDL->getRoot()); 1059 CodeGenAndEmitDAG(); 1060 SDL->clear(); 1061 1062 // Handle any PHI nodes in successors of this chunk, as if we were coming 1063 // from the original BB before switch expansion. Note that PHI nodes can 1064 // occur multiple times in PHINodesToUpdate. We have to be very careful to 1065 // handle them the right number of times. 1066 while ((BB = SDL->SwitchCases[i].TrueBB)) { // Handle LHS and RHS. 1067 for (MachineBasicBlock::iterator Phi = BB->begin(); 1068 Phi != BB->end() && Phi->getOpcode() == TargetInstrInfo::PHI; ++Phi){ 1069 // This value for this PHI node is recorded in PHINodesToUpdate, get it. 1070 for (unsigned pn = 0; ; ++pn) { 1071 assert(pn != SDL->PHINodesToUpdate.size() && 1072 "Didn't find PHI entry!"); 1073 if (SDL->PHINodesToUpdate[pn].first == Phi) { 1074 Phi->addOperand(MachineOperand::CreateReg(SDL->PHINodesToUpdate[pn]. 1075 second, false)); 1076 Phi->addOperand(MachineOperand::CreateMBB(SDL->SwitchCases[i].ThisBB)); 1077 break; 1078 } 1079 } 1080 } 1081 1082 // Don't process RHS if same block as LHS. 1083 if (BB == SDL->SwitchCases[i].FalseBB) 1084 SDL->SwitchCases[i].FalseBB = 0; 1085 1086 // If we haven't handled the RHS, do so now. Otherwise, we're done. 1087 SDL->SwitchCases[i].TrueBB = SDL->SwitchCases[i].FalseBB; 1088 SDL->SwitchCases[i].FalseBB = 0; 1089 } 1090 assert(SDL->SwitchCases[i].TrueBB == 0 && SDL->SwitchCases[i].FalseBB == 0); 1091 } 1092 SDL->SwitchCases.clear(); 1093 1094 SDL->PHINodesToUpdate.clear(); 1095 } 1096 1097 1098 /// Create the scheduler. If a specific scheduler was specified 1099 /// via the SchedulerRegistry, use it, otherwise select the 1100 /// one preferred by the target. 1101 /// 1102 ScheduleDAGSDNodes *SelectionDAGISel::CreateScheduler() { 1103 RegisterScheduler::FunctionPassCtor Ctor = RegisterScheduler::getDefault(); 1104 1105 if (!Ctor) { 1106 Ctor = ISHeuristic; 1107 RegisterScheduler::setDefault(Ctor); 1108 } 1109 1110 return Ctor(this, OptLevel); 1111 } 1112 1113 ScheduleHazardRecognizer *SelectionDAGISel::CreateTargetHazardRecognizer() { 1114 return new ScheduleHazardRecognizer(); 1115 } 1116 1117 //===----------------------------------------------------------------------===// 1118 // Helper functions used by the generated instruction selector. 1119 //===----------------------------------------------------------------------===// 1120 // Calls to these methods are generated by tblgen. 1121 1122 /// CheckAndMask - The isel is trying to match something like (and X, 255). If 1123 /// the dag combiner simplified the 255, we still want to match. RHS is the 1124 /// actual value in the DAG on the RHS of an AND, and DesiredMaskS is the value 1125 /// specified in the .td file (e.g. 255). 1126 bool SelectionDAGISel::CheckAndMask(SDValue LHS, ConstantSDNode *RHS, 1127 int64_t DesiredMaskS) const { 1128 const APInt &ActualMask = RHS->getAPIntValue(); 1129 const APInt &DesiredMask = APInt(LHS.getValueSizeInBits(), DesiredMaskS); 1130 1131 // If the actual mask exactly matches, success! 1132 if (ActualMask == DesiredMask) 1133 return true; 1134 1135 // If the actual AND mask is allowing unallowed bits, this doesn't match. 1136 if (ActualMask.intersects(~DesiredMask)) 1137 return false; 1138 1139 // Otherwise, the DAG Combiner may have proven that the value coming in is 1140 // either already zero or is not demanded. Check for known zero input bits. 1141 APInt NeededMask = DesiredMask & ~ActualMask; 1142 if (CurDAG->MaskedValueIsZero(LHS, NeededMask)) 1143 return true; 1144 1145 // TODO: check to see if missing bits are just not demanded. 1146 1147 // Otherwise, this pattern doesn't match. 1148 return false; 1149 } 1150 1151 /// CheckOrMask - The isel is trying to match something like (or X, 255). If 1152 /// the dag combiner simplified the 255, we still want to match. RHS is the 1153 /// actual value in the DAG on the RHS of an OR, and DesiredMaskS is the value 1154 /// specified in the .td file (e.g. 255). 1155 bool SelectionDAGISel::CheckOrMask(SDValue LHS, ConstantSDNode *RHS, 1156 int64_t DesiredMaskS) const { 1157 const APInt &ActualMask = RHS->getAPIntValue(); 1158 const APInt &DesiredMask = APInt(LHS.getValueSizeInBits(), DesiredMaskS); 1159 1160 // If the actual mask exactly matches, success! 1161 if (ActualMask == DesiredMask) 1162 return true; 1163 1164 // If the actual AND mask is allowing unallowed bits, this doesn't match. 1165 if (ActualMask.intersects(~DesiredMask)) 1166 return false; 1167 1168 // Otherwise, the DAG Combiner may have proven that the value coming in is 1169 // either already zero or is not demanded. Check for known zero input bits. 1170 APInt NeededMask = DesiredMask & ~ActualMask; 1171 1172 APInt KnownZero, KnownOne; 1173 CurDAG->ComputeMaskedBits(LHS, NeededMask, KnownZero, KnownOne); 1174 1175 // If all the missing bits in the or are already known to be set, match! 1176 if ((NeededMask & KnownOne) == NeededMask) 1177 return true; 1178 1179 // TODO: check to see if missing bits are just not demanded. 1180 1181 // Otherwise, this pattern doesn't match. 1182 return false; 1183 } 1184 1185 1186 /// SelectInlineAsmMemoryOperands - Calls to this are automatically generated 1187 /// by tblgen. Others should not call it. 1188 void SelectionDAGISel:: 1189 SelectInlineAsmMemoryOperands(std::vector<SDValue> &Ops) { 1190 std::vector<SDValue> InOps; 1191 std::swap(InOps, Ops); 1192 1193 Ops.push_back(InOps[0]); // input chain. 1194 Ops.push_back(InOps[1]); // input asm string. 1195 1196 unsigned i = 2, e = InOps.size(); 1197 if (InOps[e-1].getValueType() == MVT::Flag) 1198 --e; // Don't process a flag operand if it is here. 1199 1200 while (i != e) { 1201 unsigned Flags = cast<ConstantSDNode>(InOps[i])->getZExtValue(); 1202 if ((Flags & 7) != 4 /*MEM*/) { 1203 // Just skip over this operand, copying the operands verbatim. 1204 Ops.insert(Ops.end(), InOps.begin()+i, 1205 InOps.begin()+i+InlineAsm::getNumOperandRegisters(Flags) + 1); 1206 i += InlineAsm::getNumOperandRegisters(Flags) + 1; 1207 } else { 1208 assert(InlineAsm::getNumOperandRegisters(Flags) == 1 && 1209 "Memory operand with multiple values?"); 1210 // Otherwise, this is a memory operand. Ask the target to select it. 1211 std::vector<SDValue> SelOps; 1212 if (SelectInlineAsmMemoryOperand(InOps[i+1], 'm', SelOps)) { 1213 cerr << "Could not match memory address. Inline asm failure!\n"; 1214 exit(1); 1215 } 1216 1217 // Add this to the output node. 1218 MVT IntPtrTy = CurDAG->getTargetLoweringInfo().getPointerTy(); 1219 Ops.push_back(CurDAG->getTargetConstant(4/*MEM*/ | (SelOps.size()<< 3), 1220 IntPtrTy)); 1221 Ops.insert(Ops.end(), SelOps.begin(), SelOps.end()); 1222 i += 2; 1223 } 1224 } 1225 1226 // Add the flag input back if present. 1227 if (e != InOps.size()) 1228 Ops.push_back(InOps.back()); 1229 } 1230 1231 /// findFlagUse - Return use of MVT::Flag value produced by the specified 1232 /// SDNode. 1233 /// 1234 static SDNode *findFlagUse(SDNode *N) { 1235 unsigned FlagResNo = N->getNumValues()-1; 1236 for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) { 1237 SDUse &Use = I.getUse(); 1238 if (Use.getResNo() == FlagResNo) 1239 return Use.getUser(); 1240 } 1241 return NULL; 1242 } 1243 1244 /// findNonImmUse - Return true if "Use" is a non-immediate use of "Def". 1245 /// This function recursively traverses up the operand chain, ignoring 1246 /// certain nodes. 1247 static bool findNonImmUse(SDNode *Use, SDNode* Def, SDNode *ImmedUse, 1248 SDNode *Root, 1249 SmallPtrSet<SDNode*, 16> &Visited) { 1250 if (Use->getNodeId() < Def->getNodeId() || 1251 !Visited.insert(Use)) 1252 return false; 1253 1254 for (unsigned i = 0, e = Use->getNumOperands(); i != e; ++i) { 1255 SDNode *N = Use->getOperand(i).getNode(); 1256 if (N == Def) { 1257 if (Use == ImmedUse || Use == Root) 1258 continue; // We are not looking for immediate use. 1259 assert(N != Root); 1260 return true; 1261 } 1262 1263 // Traverse up the operand chain. 1264 if (findNonImmUse(N, Def, ImmedUse, Root, Visited)) 1265 return true; 1266 } 1267 return false; 1268 } 1269 1270 /// isNonImmUse - Start searching from Root up the DAG to check is Def can 1271 /// be reached. Return true if that's the case. However, ignore direct uses 1272 /// by ImmedUse (which would be U in the example illustrated in 1273 /// IsLegalAndProfitableToFold) and by Root (which can happen in the store 1274 /// case). 1275 /// FIXME: to be really generic, we should allow direct use by any node 1276 /// that is being folded. But realisticly since we only fold loads which 1277 /// have one non-chain use, we only need to watch out for load/op/store 1278 /// and load/op/cmp case where the root (store / cmp) may reach the load via 1279 /// its chain operand. 1280 static inline bool isNonImmUse(SDNode *Root, SDNode *Def, SDNode *ImmedUse) { 1281 SmallPtrSet<SDNode*, 16> Visited; 1282 return findNonImmUse(Root, Def, ImmedUse, Root, Visited); 1283 } 1284 1285 /// IsLegalAndProfitableToFold - Returns true if the specific operand node N of 1286 /// U can be folded during instruction selection that starts at Root and 1287 /// folding N is profitable. 1288 bool SelectionDAGISel::IsLegalAndProfitableToFold(SDNode *N, SDNode *U, 1289 SDNode *Root) const { 1290 if (OptLevel == CodeGenOpt::None) return false; 1291 1292 // If Root use can somehow reach N through a path that that doesn't contain 1293 // U then folding N would create a cycle. e.g. In the following 1294 // diagram, Root can reach N through X. If N is folded into into Root, then 1295 // X is both a predecessor and a successor of U. 1296 // 1297 // [N*] // 1298 // ^ ^ // 1299 // / \ // 1300 // [U*] [X]? // 1301 // ^ ^ // 1302 // \ / // 1303 // \ / // 1304 // [Root*] // 1305 // 1306 // * indicates nodes to be folded together. 1307 // 1308 // If Root produces a flag, then it gets (even more) interesting. Since it 1309 // will be "glued" together with its flag use in the scheduler, we need to 1310 // check if it might reach N. 1311 // 1312 // [N*] // 1313 // ^ ^ // 1314 // / \ // 1315 // [U*] [X]? // 1316 // ^ ^ // 1317 // \ \ // 1318 // \ | // 1319 // [Root*] | // 1320 // ^ | // 1321 // f | // 1322 // | / // 1323 // [Y] / // 1324 // ^ / // 1325 // f / // 1326 // | / // 1327 // [FU] // 1328 // 1329 // If FU (flag use) indirectly reaches N (the load), and Root folds N 1330 // (call it Fold), then X is a predecessor of FU and a successor of 1331 // Fold. But since Fold and FU are flagged together, this will create 1332 // a cycle in the scheduling graph. 1333 1334 MVT VT = Root->getValueType(Root->getNumValues()-1); 1335 while (VT == MVT::Flag) { 1336 SDNode *FU = findFlagUse(Root); 1337 if (FU == NULL) 1338 break; 1339 Root = FU; 1340 VT = Root->getValueType(Root->getNumValues()-1); 1341 } 1342 1343 return !isNonImmUse(Root, N, U); 1344 } 1345 1346 1347 char SelectionDAGISel::ID = 0; 1348