PPCISelDAGToDAG.cpp revision 34167215a8da717b21e44f1b834dc34d15279bf1
1//===-- PPCISelDAGToDAG.cpp - PPC --pattern matching inst selector --------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by Chris Lattner and is distributed under 6// the University of Illinois Open Source License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines a pattern matching instruction selector for PowerPC, 11// converting from a legalized dag to a PPC dag. 12// 13//===----------------------------------------------------------------------===// 14 15#include "PPC.h" 16#include "PPCTargetMachine.h" 17#include "PPCISelLowering.h" 18#include "llvm/CodeGen/MachineInstrBuilder.h" 19#include "llvm/CodeGen/MachineFunction.h" 20#include "llvm/CodeGen/SSARegMap.h" 21#include "llvm/CodeGen/SelectionDAG.h" 22#include "llvm/CodeGen/SelectionDAGISel.h" 23#include "llvm/Target/TargetOptions.h" 24#include "llvm/ADT/Statistic.h" 25#include "llvm/Constants.h" 26#include "llvm/GlobalValue.h" 27#include "llvm/Support/Debug.h" 28#include "llvm/Support/MathExtras.h" 29#include <iostream> 30#include <set> 31using namespace llvm; 32 33namespace { 34 Statistic<> FrameOff("ppc-codegen", "Number of frame idx offsets collapsed"); 35 36 //===--------------------------------------------------------------------===// 37 /// PPCDAGToDAGISel - PPC specific code to select PPC machine 38 /// instructions for SelectionDAG operations. 39 /// 40 class PPCDAGToDAGISel : public SelectionDAGISel { 41 PPCTargetLowering PPCLowering; 42 unsigned GlobalBaseReg; 43 public: 44 PPCDAGToDAGISel(TargetMachine &TM) 45 : SelectionDAGISel(PPCLowering), PPCLowering(TM) {} 46 47 virtual bool runOnFunction(Function &Fn) { 48 // Make sure we re-emit a set of the global base reg if necessary 49 GlobalBaseReg = 0; 50 return SelectionDAGISel::runOnFunction(Fn); 51 } 52 53 /// getI32Imm - Return a target constant with the specified value, of type 54 /// i32. 55 inline SDOperand getI32Imm(unsigned Imm) { 56 return CurDAG->getTargetConstant(Imm, MVT::i32); 57 } 58 59 /// getGlobalBaseReg - insert code into the entry mbb to materialize the PIC 60 /// base register. Return the virtual register that holds this value. 61 SDOperand getGlobalBaseReg(); 62 63 // Select - Convert the specified operand from a target-independent to a 64 // target-specific node if it hasn't already been changed. 65 void Select(SDOperand &Result, SDOperand Op); 66 67 SDNode *SelectBitfieldInsert(SDNode *N); 68 69 /// SelectCC - Select a comparison of the specified values with the 70 /// specified condition code, returning the CR# of the expression. 71 SDOperand SelectCC(SDOperand LHS, SDOperand RHS, ISD::CondCode CC); 72 73 /// SelectAddrImm - Returns true if the address N can be represented by 74 /// a base register plus a signed 16-bit displacement [r+imm]. 75 bool SelectAddrImm(SDOperand N, SDOperand &Disp, SDOperand &Base); 76 77 /// SelectAddrIdx - Given the specified addressed, check to see if it can be 78 /// represented as an indexed [r+r] operation. Returns false if it can 79 /// be represented by [r+imm], which are preferred. 80 bool SelectAddrIdx(SDOperand N, SDOperand &Base, SDOperand &Index); 81 82 /// SelectAddrIdxOnly - Given the specified addressed, force it to be 83 /// represented as an indexed [r+r] operation. 84 bool SelectAddrIdxOnly(SDOperand N, SDOperand &Base, SDOperand &Index); 85 86 SDOperand BuildSDIVSequence(SDNode *N); 87 SDOperand BuildUDIVSequence(SDNode *N); 88 89 /// InstructionSelectBasicBlock - This callback is invoked by 90 /// SelectionDAGISel when it has created a SelectionDAG for us to codegen. 91 virtual void InstructionSelectBasicBlock(SelectionDAG &DAG); 92 93 virtual const char *getPassName() const { 94 return "PowerPC DAG->DAG Pattern Instruction Selection"; 95 } 96 97// Include the pieces autogenerated from the target description. 98#include "PPCGenDAGISel.inc" 99 100private: 101 SDOperand SelectADD_PARTS(SDOperand Op); 102 SDOperand SelectSUB_PARTS(SDOperand Op); 103 SDOperand SelectSETCC(SDOperand Op); 104 SDOperand SelectCALL(SDOperand Op); 105 }; 106} 107 108/// InstructionSelectBasicBlock - This callback is invoked by 109/// SelectionDAGISel when it has created a SelectionDAG for us to codegen. 110void PPCDAGToDAGISel::InstructionSelectBasicBlock(SelectionDAG &DAG) { 111 DEBUG(BB->dump()); 112 113 // The selection process is inherently a bottom-up recursive process (users 114 // select their uses before themselves). Given infinite stack space, we 115 // could just start selecting on the root and traverse the whole graph. In 116 // practice however, this causes us to run out of stack space on large basic 117 // blocks. To avoid this problem, select the entry node, then all its uses, 118 // iteratively instead of recursively. 119 std::vector<SDOperand> Worklist; 120 Worklist.push_back(DAG.getEntryNode()); 121 122 // Note that we can do this in the PPC target (scanning forward across token 123 // chain edges) because no nodes ever get folded across these edges. On a 124 // target like X86 which supports load/modify/store operations, this would 125 // have to be more careful. 126 while (!Worklist.empty()) { 127 SDOperand Node = Worklist.back(); 128 Worklist.pop_back(); 129 130 // Chose from the least deep of the top two nodes. 131 if (!Worklist.empty() && 132 Worklist.back().Val->getNodeDepth() < Node.Val->getNodeDepth()) 133 std::swap(Worklist.back(), Node); 134 135 if ((Node.Val->getOpcode() >= ISD::BUILTIN_OP_END && 136 Node.Val->getOpcode() < PPCISD::FIRST_NUMBER) || 137 CodeGenMap.count(Node)) continue; 138 139 for (SDNode::use_iterator UI = Node.Val->use_begin(), 140 E = Node.Val->use_end(); UI != E; ++UI) { 141 // Scan the values. If this use has a value that is a token chain, add it 142 // to the worklist. 143 SDNode *User = *UI; 144 for (unsigned i = 0, e = User->getNumValues(); i != e; ++i) 145 if (User->getValueType(i) == MVT::Other) { 146 Worklist.push_back(SDOperand(User, i)); 147 break; 148 } 149 } 150 151 // Finally, legalize this node. 152 SDOperand Dummy; 153 Select(Dummy, Node); 154 } 155 156 // Select target instructions for the DAG. 157 DAG.setRoot(SelectRoot(DAG.getRoot())); 158 CodeGenMap.clear(); 159 DAG.RemoveDeadNodes(); 160 161 // Emit machine code to BB. 162 ScheduleAndEmitDAG(DAG); 163} 164 165/// getGlobalBaseReg - Output the instructions required to put the 166/// base address to use for accessing globals into a register. 167/// 168SDOperand PPCDAGToDAGISel::getGlobalBaseReg() { 169 if (!GlobalBaseReg) { 170 // Insert the set of GlobalBaseReg into the first MBB of the function 171 MachineBasicBlock &FirstMBB = BB->getParent()->front(); 172 MachineBasicBlock::iterator MBBI = FirstMBB.begin(); 173 SSARegMap *RegMap = BB->getParent()->getSSARegMap(); 174 // FIXME: when we get to LP64, we will need to create the appropriate 175 // type of register here. 176 GlobalBaseReg = RegMap->createVirtualRegister(PPC::GPRCRegisterClass); 177 BuildMI(FirstMBB, MBBI, PPC::MovePCtoLR, 0, PPC::LR); 178 BuildMI(FirstMBB, MBBI, PPC::MFLR, 1, GlobalBaseReg); 179 } 180 return CurDAG->getRegister(GlobalBaseReg, MVT::i32); 181} 182 183 184// isIntImmediate - This method tests to see if a constant operand. 185// If so Imm will receive the 32 bit value. 186static bool isIntImmediate(SDNode *N, unsigned& Imm) { 187 if (N->getOpcode() == ISD::Constant) { 188 Imm = cast<ConstantSDNode>(N)->getValue(); 189 return true; 190 } 191 return false; 192} 193 194// isRunOfOnes - Returns true iff Val consists of one contiguous run of 1s with 195// any number of 0s on either side. The 1s are allowed to wrap from LSB to 196// MSB, so 0x000FFF0, 0x0000FFFF, and 0xFF0000FF are all runs. 0x0F0F0000 is 197// not, since all 1s are not contiguous. 198static bool isRunOfOnes(unsigned Val, unsigned &MB, unsigned &ME) { 199 if (isShiftedMask_32(Val)) { 200 // look for the first non-zero bit 201 MB = CountLeadingZeros_32(Val); 202 // look for the first zero bit after the run of ones 203 ME = CountLeadingZeros_32((Val - 1) ^ Val); 204 return true; 205 } else { 206 Val = ~Val; // invert mask 207 if (isShiftedMask_32(Val)) { 208 // effectively look for the first zero bit 209 ME = CountLeadingZeros_32(Val) - 1; 210 // effectively look for the first one bit after the run of zeros 211 MB = CountLeadingZeros_32((Val - 1) ^ Val) + 1; 212 return true; 213 } 214 } 215 // no run present 216 return false; 217} 218 219// isRotateAndMask - Returns true if Mask and Shift can be folded into a rotate 220// and mask opcode and mask operation. 221static bool isRotateAndMask(SDNode *N, unsigned Mask, bool IsShiftMask, 222 unsigned &SH, unsigned &MB, unsigned &ME) { 223 // Don't even go down this path for i64, since different logic will be 224 // necessary for rldicl/rldicr/rldimi. 225 if (N->getValueType(0) != MVT::i32) 226 return false; 227 228 unsigned Shift = 32; 229 unsigned Indeterminant = ~0; // bit mask marking indeterminant results 230 unsigned Opcode = N->getOpcode(); 231 if (N->getNumOperands() != 2 || 232 !isIntImmediate(N->getOperand(1).Val, Shift) || (Shift > 31)) 233 return false; 234 235 if (Opcode == ISD::SHL) { 236 // apply shift left to mask if it comes first 237 if (IsShiftMask) Mask = Mask << Shift; 238 // determine which bits are made indeterminant by shift 239 Indeterminant = ~(0xFFFFFFFFu << Shift); 240 } else if (Opcode == ISD::SRL) { 241 // apply shift right to mask if it comes first 242 if (IsShiftMask) Mask = Mask >> Shift; 243 // determine which bits are made indeterminant by shift 244 Indeterminant = ~(0xFFFFFFFFu >> Shift); 245 // adjust for the left rotate 246 Shift = 32 - Shift; 247 } else { 248 return false; 249 } 250 251 // if the mask doesn't intersect any Indeterminant bits 252 if (Mask && !(Mask & Indeterminant)) { 253 SH = Shift; 254 // make sure the mask is still a mask (wrap arounds may not be) 255 return isRunOfOnes(Mask, MB, ME); 256 } 257 return false; 258} 259 260// isOpcWithIntImmediate - This method tests to see if the node is a specific 261// opcode and that it has a immediate integer right operand. 262// If so Imm will receive the 32 bit value. 263static bool isOpcWithIntImmediate(SDNode *N, unsigned Opc, unsigned& Imm) { 264 return N->getOpcode() == Opc && isIntImmediate(N->getOperand(1).Val, Imm); 265} 266 267// isIntImmediate - This method tests to see if a constant operand. 268// If so Imm will receive the 32 bit value. 269static bool isIntImmediate(SDOperand N, unsigned& Imm) { 270 if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N)) { 271 Imm = (unsigned)CN->getSignExtended(); 272 return true; 273 } 274 return false; 275} 276 277/// SelectBitfieldInsert - turn an or of two masked values into 278/// the rotate left word immediate then mask insert (rlwimi) instruction. 279/// Returns true on success, false if the caller still needs to select OR. 280/// 281/// Patterns matched: 282/// 1. or shl, and 5. or and, and 283/// 2. or and, shl 6. or shl, shr 284/// 3. or shr, and 7. or shr, shl 285/// 4. or and, shr 286SDNode *PPCDAGToDAGISel::SelectBitfieldInsert(SDNode *N) { 287 bool IsRotate = false; 288 unsigned TgtMask = 0xFFFFFFFF, InsMask = 0xFFFFFFFF, SH = 0; 289 unsigned Value; 290 291 SDOperand Op0 = N->getOperand(0); 292 SDOperand Op1 = N->getOperand(1); 293 294 unsigned Op0Opc = Op0.getOpcode(); 295 unsigned Op1Opc = Op1.getOpcode(); 296 297 // Verify that we have the correct opcodes 298 if (ISD::SHL != Op0Opc && ISD::SRL != Op0Opc && ISD::AND != Op0Opc) 299 return false; 300 if (ISD::SHL != Op1Opc && ISD::SRL != Op1Opc && ISD::AND != Op1Opc) 301 return false; 302 303 // Generate Mask value for Target 304 if (isIntImmediate(Op0.getOperand(1), Value)) { 305 switch(Op0Opc) { 306 case ISD::SHL: TgtMask <<= Value; break; 307 case ISD::SRL: TgtMask >>= Value; break; 308 case ISD::AND: TgtMask &= Value; break; 309 } 310 } else { 311 return 0; 312 } 313 314 // Generate Mask value for Insert 315 if (!isIntImmediate(Op1.getOperand(1), Value)) 316 return 0; 317 318 switch(Op1Opc) { 319 case ISD::SHL: 320 SH = Value; 321 InsMask <<= SH; 322 if (Op0Opc == ISD::SRL) IsRotate = true; 323 break; 324 case ISD::SRL: 325 SH = Value; 326 InsMask >>= SH; 327 SH = 32-SH; 328 if (Op0Opc == ISD::SHL) IsRotate = true; 329 break; 330 case ISD::AND: 331 InsMask &= Value; 332 break; 333 } 334 335 // If both of the inputs are ANDs and one of them has a logical shift by 336 // constant as its input, make that AND the inserted value so that we can 337 // combine the shift into the rotate part of the rlwimi instruction 338 bool IsAndWithShiftOp = false; 339 if (Op0Opc == ISD::AND && Op1Opc == ISD::AND) { 340 if (Op1.getOperand(0).getOpcode() == ISD::SHL || 341 Op1.getOperand(0).getOpcode() == ISD::SRL) { 342 if (isIntImmediate(Op1.getOperand(0).getOperand(1), Value)) { 343 SH = Op1.getOperand(0).getOpcode() == ISD::SHL ? Value : 32 - Value; 344 IsAndWithShiftOp = true; 345 } 346 } else if (Op0.getOperand(0).getOpcode() == ISD::SHL || 347 Op0.getOperand(0).getOpcode() == ISD::SRL) { 348 if (isIntImmediate(Op0.getOperand(0).getOperand(1), Value)) { 349 std::swap(Op0, Op1); 350 std::swap(TgtMask, InsMask); 351 SH = Op1.getOperand(0).getOpcode() == ISD::SHL ? Value : 32 - Value; 352 IsAndWithShiftOp = true; 353 } 354 } 355 } 356 357 // Verify that the Target mask and Insert mask together form a full word mask 358 // and that the Insert mask is a run of set bits (which implies both are runs 359 // of set bits). Given that, Select the arguments and generate the rlwimi 360 // instruction. 361 unsigned MB, ME; 362 if (((TgtMask & InsMask) == 0) && isRunOfOnes(InsMask, MB, ME)) { 363 bool fullMask = (TgtMask ^ InsMask) == 0xFFFFFFFF; 364 bool Op0IsAND = Op0Opc == ISD::AND; 365 // Check for rotlwi / rotrwi here, a special case of bitfield insert 366 // where both bitfield halves are sourced from the same value. 367 if (IsRotate && fullMask && 368 N->getOperand(0).getOperand(0) == N->getOperand(1).getOperand(0)) { 369 SDOperand Tmp; 370 Select(Tmp, N->getOperand(0).getOperand(0)); 371 Op0 = CurDAG->getTargetNode(PPC::RLWINM, MVT::i32, Tmp, 372 getI32Imm(SH), getI32Imm(0), getI32Imm(31)); 373 return Op0.Val; 374 } 375 SDOperand Tmp1, Tmp2; 376 Select(Tmp1, ((Op0IsAND && fullMask) ? Op0.getOperand(0) : Op0)); 377 Select(Tmp2, (IsAndWithShiftOp ? Op1.getOperand(0).getOperand(0) 378 : Op1.getOperand(0))); 379 Op0 = CurDAG->getTargetNode(PPC::RLWIMI, MVT::i32, Tmp1, Tmp2, 380 getI32Imm(SH), getI32Imm(MB), getI32Imm(ME)); 381 return Op0.Val; 382 } 383 return 0; 384} 385 386/// SelectAddrImm - Returns true if the address N can be represented by 387/// a base register plus a signed 16-bit displacement [r+imm]. 388bool PPCDAGToDAGISel::SelectAddrImm(SDOperand N, SDOperand &Disp, 389 SDOperand &Base) { 390 if (N.getOpcode() == ISD::ADD) { 391 unsigned imm = 0; 392 if (isIntImmediate(N.getOperand(1), imm) && isInt16(imm)) { 393 Disp = getI32Imm(imm & 0xFFFF); 394 if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N.getOperand(0))) { 395 Base = CurDAG->getTargetFrameIndex(FI->getIndex(), MVT::i32); 396 } else { 397 Base = N.getOperand(0); 398 } 399 return true; // [r+i] 400 } else if (N.getOperand(1).getOpcode() == PPCISD::Lo) { 401 // Match LOAD (ADD (X, Lo(G))). 402 assert(!cast<ConstantSDNode>(N.getOperand(1).getOperand(1))->getValue() 403 && "Cannot handle constant offsets yet!"); 404 Disp = N.getOperand(1).getOperand(0); // The global address. 405 assert(Disp.getOpcode() == ISD::TargetGlobalAddress || 406 Disp.getOpcode() == ISD::TargetConstantPool); 407 Base = N.getOperand(0); 408 return true; // [&g+r] 409 } 410 return false; // [r+r] 411 } 412 Disp = getI32Imm(0); 413 if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N)) 414 Base = CurDAG->getTargetFrameIndex(FI->getIndex(), MVT::i32); 415 else 416 Base = N; 417 return true; // [r+0] 418} 419 420/// SelectAddrIdx - Given the specified addressed, check to see if it can be 421/// represented as an indexed [r+r] operation. Returns false if it can 422/// be represented by [r+imm], which are preferred. 423bool PPCDAGToDAGISel::SelectAddrIdx(SDOperand N, SDOperand &Base, 424 SDOperand &Index) { 425 // Check to see if we can represent this as an [r+imm] address instead, 426 // which will fail if the address is more profitably represented as an 427 // [r+r] address. 428 if (SelectAddrImm(N, Base, Index)) 429 return false; 430 431 if (N.getOpcode() == ISD::ADD) { 432 Base = N.getOperand(0); 433 Index = N.getOperand(1); 434 return true; 435 } 436 437 Base = CurDAG->getRegister(PPC::R0, MVT::i32); 438 Index = N; 439 return true; 440} 441 442/// SelectAddrIdxOnly - Given the specified addressed, force it to be 443/// represented as an indexed [r+r] operation. 444bool PPCDAGToDAGISel::SelectAddrIdxOnly(SDOperand N, SDOperand &Base, 445 SDOperand &Index) { 446 if (N.getOpcode() == ISD::ADD) { 447 Base = N.getOperand(0); 448 Index = N.getOperand(1); 449 return true; 450 } 451 452 Base = CurDAG->getRegister(PPC::R0, MVT::i32); 453 Index = N; 454 return true; 455} 456 457/// SelectCC - Select a comparison of the specified values with the specified 458/// condition code, returning the CR# of the expression. 459SDOperand PPCDAGToDAGISel::SelectCC(SDOperand LHS, SDOperand RHS, 460 ISD::CondCode CC) { 461 // Always select the LHS. 462 Select(LHS, LHS); 463 464 // Use U to determine whether the SETCC immediate range is signed or not. 465 if (MVT::isInteger(LHS.getValueType())) { 466 bool U = ISD::isUnsignedIntSetCC(CC); 467 unsigned Imm; 468 if (isIntImmediate(RHS, Imm) && 469 ((U && isUInt16(Imm)) || (!U && isInt16(Imm)))) 470 return CurDAG->getTargetNode(U ? PPC::CMPLWI : PPC::CMPWI, MVT::i32, 471 LHS, getI32Imm(Imm & 0xFFFF)); 472 Select(RHS, RHS); 473 return CurDAG->getTargetNode(U ? PPC::CMPLW : PPC::CMPW, MVT::i32, 474 LHS, RHS); 475 } else if (LHS.getValueType() == MVT::f32) { 476 Select(RHS, RHS); 477 return CurDAG->getTargetNode(PPC::FCMPUS, MVT::i32, LHS, RHS); 478 } else { 479 Select(RHS, RHS); 480 return CurDAG->getTargetNode(PPC::FCMPUD, MVT::i32, LHS, RHS); 481 } 482} 483 484/// getBCCForSetCC - Returns the PowerPC condition branch mnemonic corresponding 485/// to Condition. 486static unsigned getBCCForSetCC(ISD::CondCode CC) { 487 switch (CC) { 488 default: assert(0 && "Unknown condition!"); abort(); 489 case ISD::SETOEQ: // FIXME: This is incorrect see PR642. 490 case ISD::SETEQ: return PPC::BEQ; 491 case ISD::SETONE: // FIXME: This is incorrect see PR642. 492 case ISD::SETNE: return PPC::BNE; 493 case ISD::SETOLT: // FIXME: This is incorrect see PR642. 494 case ISD::SETULT: 495 case ISD::SETLT: return PPC::BLT; 496 case ISD::SETOLE: // FIXME: This is incorrect see PR642. 497 case ISD::SETULE: 498 case ISD::SETLE: return PPC::BLE; 499 case ISD::SETOGT: // FIXME: This is incorrect see PR642. 500 case ISD::SETUGT: 501 case ISD::SETGT: return PPC::BGT; 502 case ISD::SETOGE: // FIXME: This is incorrect see PR642. 503 case ISD::SETUGE: 504 case ISD::SETGE: return PPC::BGE; 505 506 case ISD::SETO: return PPC::BUN; 507 case ISD::SETUO: return PPC::BNU; 508 } 509 return 0; 510} 511 512/// getCRIdxForSetCC - Return the index of the condition register field 513/// associated with the SetCC condition, and whether or not the field is 514/// treated as inverted. That is, lt = 0; ge = 0 inverted. 515static unsigned getCRIdxForSetCC(ISD::CondCode CC, bool& Inv) { 516 switch (CC) { 517 default: assert(0 && "Unknown condition!"); abort(); 518 case ISD::SETOLT: // FIXME: This is incorrect see PR642. 519 case ISD::SETULT: 520 case ISD::SETLT: Inv = false; return 0; 521 case ISD::SETOGE: // FIXME: This is incorrect see PR642. 522 case ISD::SETUGE: 523 case ISD::SETGE: Inv = true; return 0; 524 case ISD::SETOGT: // FIXME: This is incorrect see PR642. 525 case ISD::SETUGT: 526 case ISD::SETGT: Inv = false; return 1; 527 case ISD::SETOLE: // FIXME: This is incorrect see PR642. 528 case ISD::SETULE: 529 case ISD::SETLE: Inv = true; return 1; 530 case ISD::SETOEQ: // FIXME: This is incorrect see PR642. 531 case ISD::SETEQ: Inv = false; return 2; 532 case ISD::SETONE: // FIXME: This is incorrect see PR642. 533 case ISD::SETNE: Inv = true; return 2; 534 case ISD::SETO: Inv = true; return 3; 535 case ISD::SETUO: Inv = false; return 3; 536 } 537 return 0; 538} 539 540 541SDOperand PPCDAGToDAGISel::SelectADD_PARTS(SDOperand Op) { 542 SDNode *N = Op.Val; 543 SDOperand LHSL, LHSH; 544 Select(LHSL, N->getOperand(0)); 545 Select(LHSH, N->getOperand(1)); 546 547 unsigned Imm; 548 bool ME = false, ZE = false; 549 if (isIntImmediate(N->getOperand(3), Imm)) { 550 ME = (signed)Imm == -1; 551 ZE = Imm == 0; 552 } 553 554 std::vector<SDOperand> Result; 555 SDOperand CarryFromLo, Tmp; 556 if (isIntImmediate(N->getOperand(2), Imm) && 557 ((signed)Imm >= -32768 || (signed)Imm < 32768)) { 558 // Codegen the low 32 bits of the add. Interestingly, there is no 559 // shifted form of add immediate carrying. 560 CarryFromLo = CurDAG->getTargetNode(PPC::ADDIC, MVT::i32, MVT::Flag, 561 LHSL, getI32Imm(Imm)); 562 } else { 563 Select(Tmp, N->getOperand(2)); 564 CarryFromLo = CurDAG->getTargetNode(PPC::ADDC, MVT::i32, MVT::Flag, 565 LHSL, Tmp); 566 } 567 CarryFromLo = CarryFromLo.getValue(1); 568 569 // Codegen the high 32 bits, adding zero, minus one, or the full value 570 // along with the carry flag produced by addc/addic. 571 SDOperand ResultHi; 572 if (ZE) 573 ResultHi = CurDAG->getTargetNode(PPC::ADDZE, MVT::i32, LHSH, CarryFromLo); 574 else if (ME) 575 ResultHi = CurDAG->getTargetNode(PPC::ADDME, MVT::i32, LHSH, CarryFromLo); 576 else { 577 Select(Tmp, N->getOperand(3)); 578 ResultHi = CurDAG->getTargetNode(PPC::ADDE, MVT::i32, LHSH, 579 Tmp, CarryFromLo); 580 } 581 Result.push_back(CarryFromLo.getValue(0)); 582 Result.push_back(ResultHi); 583 584 CodeGenMap[Op.getValue(0)] = Result[0]; 585 CodeGenMap[Op.getValue(1)] = Result[1]; 586 return Result[Op.ResNo]; 587} 588SDOperand PPCDAGToDAGISel::SelectSUB_PARTS(SDOperand Op) { 589 SDNode *N = Op.Val; 590 SDOperand LHSL, LHSH, RHSL, RHSH; 591 Select(LHSL, N->getOperand(0)); 592 Select(LHSH, N->getOperand(1)); 593 Select(RHSL, N->getOperand(2)); 594 Select(RHSH, N->getOperand(3)); 595 596 std::vector<SDOperand> Result; 597 Result.push_back(CurDAG->getTargetNode(PPC::SUBFC, MVT::i32, MVT::Flag, 598 RHSL, LHSL)); 599 Result.push_back(CurDAG->getTargetNode(PPC::SUBFE, MVT::i32, RHSH, LHSH, 600 Result[0].getValue(1))); 601 CodeGenMap[Op.getValue(0)] = Result[0]; 602 CodeGenMap[Op.getValue(1)] = Result[1]; 603 return Result[Op.ResNo]; 604} 605 606SDOperand PPCDAGToDAGISel::SelectSETCC(SDOperand Op) { 607 SDNode *N = Op.Val; 608 unsigned Imm; 609 ISD::CondCode CC = cast<CondCodeSDNode>(N->getOperand(2))->get(); 610 if (isIntImmediate(N->getOperand(1), Imm)) { 611 // We can codegen setcc op, imm very efficiently compared to a brcond. 612 // Check for those cases here. 613 // setcc op, 0 614 if (Imm == 0) { 615 SDOperand Op; 616 Select(Op, N->getOperand(0)); 617 switch (CC) { 618 default: break; 619 case ISD::SETEQ: 620 Op = CurDAG->getTargetNode(PPC::CNTLZW, MVT::i32, Op); 621 return CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32, Op, getI32Imm(27), 622 getI32Imm(5), getI32Imm(31)); 623 case ISD::SETNE: { 624 SDOperand AD = CurDAG->getTargetNode(PPC::ADDIC, MVT::i32, MVT::Flag, 625 Op, getI32Imm(~0U)); 626 return CurDAG->SelectNodeTo(N, PPC::SUBFE, MVT::i32, AD, Op, 627 AD.getValue(1)); 628 } 629 case ISD::SETLT: 630 return CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32, Op, getI32Imm(1), 631 getI32Imm(31), getI32Imm(31)); 632 case ISD::SETGT: { 633 SDOperand T = CurDAG->getTargetNode(PPC::NEG, MVT::i32, Op); 634 T = CurDAG->getTargetNode(PPC::ANDC, MVT::i32, T, Op);; 635 return CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32, T, getI32Imm(1), 636 getI32Imm(31), getI32Imm(31)); 637 } 638 } 639 } else if (Imm == ~0U) { // setcc op, -1 640 SDOperand Op; 641 Select(Op, N->getOperand(0)); 642 switch (CC) { 643 default: break; 644 case ISD::SETEQ: 645 Op = CurDAG->getTargetNode(PPC::ADDIC, MVT::i32, MVT::Flag, 646 Op, getI32Imm(1)); 647 return CurDAG->SelectNodeTo(N, PPC::ADDZE, MVT::i32, 648 CurDAG->getTargetNode(PPC::LI, MVT::i32, 649 getI32Imm(0)), 650 Op.getValue(1)); 651 case ISD::SETNE: { 652 Op = CurDAG->getTargetNode(PPC::NOR, MVT::i32, Op, Op); 653 SDOperand AD = CurDAG->getTargetNode(PPC::ADDIC, MVT::i32, MVT::Flag, 654 Op, getI32Imm(~0U)); 655 return CurDAG->SelectNodeTo(N, PPC::SUBFE, MVT::i32, AD, Op, 656 AD.getValue(1)); 657 } 658 case ISD::SETLT: { 659 SDOperand AD = CurDAG->getTargetNode(PPC::ADDI, MVT::i32, Op, 660 getI32Imm(1)); 661 SDOperand AN = CurDAG->getTargetNode(PPC::AND, MVT::i32, AD, Op); 662 return CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32, AN, getI32Imm(1), 663 getI32Imm(31), getI32Imm(31)); 664 } 665 case ISD::SETGT: 666 Op = CurDAG->getTargetNode(PPC::RLWINM, MVT::i32, Op, getI32Imm(1), 667 getI32Imm(31), getI32Imm(31)); 668 return CurDAG->SelectNodeTo(N, PPC::XORI, MVT::i32, Op, getI32Imm(1)); 669 } 670 } 671 } 672 673 bool Inv; 674 unsigned Idx = getCRIdxForSetCC(CC, Inv); 675 SDOperand CCReg = SelectCC(N->getOperand(0), N->getOperand(1), CC); 676 SDOperand IntCR; 677 678 // Force the ccreg into CR7. 679 SDOperand CR7Reg = CurDAG->getRegister(PPC::CR7, MVT::i32); 680 681 SDOperand InFlag(0, 0); // Null incoming flag value. 682 CCReg = CurDAG->getCopyToReg(CurDAG->getEntryNode(), CR7Reg, CCReg, 683 InFlag).getValue(1); 684 685 if (TLI.getTargetMachine().getSubtarget<PPCSubtarget>().isGigaProcessor()) 686 IntCR = CurDAG->getTargetNode(PPC::MFOCRF, MVT::i32, CR7Reg, CCReg); 687 else 688 IntCR = CurDAG->getTargetNode(PPC::MFCR, MVT::i32, CCReg); 689 690 if (!Inv) { 691 return CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32, IntCR, 692 getI32Imm((32-(3-Idx)) & 31), 693 getI32Imm(31), getI32Imm(31)); 694 } else { 695 SDOperand Tmp = 696 CurDAG->getTargetNode(PPC::RLWINM, MVT::i32, IntCR, 697 getI32Imm((32-(3-Idx)) & 31), 698 getI32Imm(31),getI32Imm(31)); 699 return CurDAG->SelectNodeTo(N, PPC::XORI, MVT::i32, Tmp, getI32Imm(1)); 700 } 701} 702 703/// isCallCompatibleAddress - Return true if the specified 32-bit value is 704/// representable in the immediate field of a Bx instruction. 705static bool isCallCompatibleAddress(ConstantSDNode *C) { 706 int Addr = C->getValue(); 707 if (Addr & 3) return false; // Low 2 bits are implicitly zero. 708 return (Addr << 6 >> 6) == Addr; // Top 6 bits have to be sext of immediate. 709} 710 711SDOperand PPCDAGToDAGISel::SelectCALL(SDOperand Op) { 712 SDNode *N = Op.Val; 713 SDOperand Chain; 714 Select(Chain, N->getOperand(0)); 715 716 unsigned CallOpcode; 717 std::vector<SDOperand> CallOperands; 718 719 if (GlobalAddressSDNode *GASD = 720 dyn_cast<GlobalAddressSDNode>(N->getOperand(1))) { 721 CallOpcode = PPC::BL; 722 CallOperands.push_back(N->getOperand(1)); 723 } else if (ExternalSymbolSDNode *ESSDN = 724 dyn_cast<ExternalSymbolSDNode>(N->getOperand(1))) { 725 CallOpcode = PPC::BL; 726 CallOperands.push_back(N->getOperand(1)); 727 } else if (isa<ConstantSDNode>(N->getOperand(1)) && 728 isCallCompatibleAddress(cast<ConstantSDNode>(N->getOperand(1)))) { 729 ConstantSDNode *C = cast<ConstantSDNode>(N->getOperand(1)); 730 CallOpcode = PPC::BLA; 731 CallOperands.push_back(getI32Imm((int)C->getValue() >> 2)); 732 } else { 733 // Copy the callee address into the CTR register. 734 SDOperand Callee; 735 Select(Callee, N->getOperand(1)); 736 Chain = CurDAG->getTargetNode(PPC::MTCTR, MVT::Other, Callee, Chain); 737 738 // Copy the callee address into R12 on darwin. 739 SDOperand R12 = CurDAG->getRegister(PPC::R12, MVT::i32); 740 Chain = CurDAG->getNode(ISD::CopyToReg, MVT::Other, Chain, R12, Callee); 741 742 CallOperands.push_back(R12); 743 CallOpcode = PPC::BCTRL; 744 } 745 746 unsigned GPR_idx = 0, FPR_idx = 0; 747 static const unsigned GPR[] = { 748 PPC::R3, PPC::R4, PPC::R5, PPC::R6, 749 PPC::R7, PPC::R8, PPC::R9, PPC::R10, 750 }; 751 static const unsigned FPR[] = { 752 PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7, 753 PPC::F8, PPC::F9, PPC::F10, PPC::F11, PPC::F12, PPC::F13 754 }; 755 756 SDOperand InFlag; // Null incoming flag value. 757 758 for (unsigned i = 2, e = N->getNumOperands(); i != e; ++i) { 759 unsigned DestReg = 0; 760 MVT::ValueType RegTy = N->getOperand(i).getValueType(); 761 if (RegTy == MVT::i32) { 762 assert(GPR_idx < 8 && "Too many int args"); 763 DestReg = GPR[GPR_idx++]; 764 } else { 765 assert(MVT::isFloatingPoint(N->getOperand(i).getValueType()) && 766 "Unpromoted integer arg?"); 767 assert(FPR_idx < 13 && "Too many fp args"); 768 DestReg = FPR[FPR_idx++]; 769 } 770 771 if (N->getOperand(i).getOpcode() != ISD::UNDEF) { 772 SDOperand Val; 773 Select(Val, N->getOperand(i)); 774 Chain = CurDAG->getCopyToReg(Chain, DestReg, Val, InFlag); 775 InFlag = Chain.getValue(1); 776 CallOperands.push_back(CurDAG->getRegister(DestReg, RegTy)); 777 } 778 } 779 780 // Finally, once everything is in registers to pass to the call, emit the 781 // call itself. 782 if (InFlag.Val) 783 CallOperands.push_back(InFlag); // Strong dep on register copies. 784 else 785 CallOperands.push_back(Chain); // Weak dep on whatever occurs before 786 Chain = CurDAG->getTargetNode(CallOpcode, MVT::Other, MVT::Flag, 787 CallOperands); 788 789 std::vector<SDOperand> CallResults; 790 791 // If the call has results, copy the values out of the ret val registers. 792 switch (N->getValueType(0)) { 793 default: assert(0 && "Unexpected ret value!"); 794 case MVT::Other: break; 795 case MVT::i32: 796 if (N->getValueType(1) == MVT::i32) { 797 Chain = CurDAG->getCopyFromReg(Chain, PPC::R4, MVT::i32, 798 Chain.getValue(1)).getValue(1); 799 CallResults.push_back(Chain.getValue(0)); 800 Chain = CurDAG->getCopyFromReg(Chain, PPC::R3, MVT::i32, 801 Chain.getValue(2)).getValue(1); 802 CallResults.push_back(Chain.getValue(0)); 803 } else { 804 Chain = CurDAG->getCopyFromReg(Chain, PPC::R3, MVT::i32, 805 Chain.getValue(1)).getValue(1); 806 CallResults.push_back(Chain.getValue(0)); 807 } 808 break; 809 case MVT::f32: 810 case MVT::f64: 811 Chain = CurDAG->getCopyFromReg(Chain, PPC::F1, N->getValueType(0), 812 Chain.getValue(1)).getValue(1); 813 CallResults.push_back(Chain.getValue(0)); 814 break; 815 } 816 817 CallResults.push_back(Chain); 818 for (unsigned i = 0, e = CallResults.size(); i != e; ++i) 819 CodeGenMap[Op.getValue(i)] = CallResults[i]; 820 return CallResults[Op.ResNo]; 821} 822 823// Select - Convert the specified operand from a target-independent to a 824// target-specific node if it hasn't already been changed. 825void PPCDAGToDAGISel::Select(SDOperand &Result, SDOperand Op) { 826 SDNode *N = Op.Val; 827 if (N->getOpcode() >= ISD::BUILTIN_OP_END && 828 N->getOpcode() < PPCISD::FIRST_NUMBER) { 829 Result = Op; 830 return; // Already selected. 831 } 832 833 // If this has already been converted, use it. 834 std::map<SDOperand, SDOperand>::iterator CGMI = CodeGenMap.find(Op); 835 if (CGMI != CodeGenMap.end()) { 836 Result = CGMI->second; 837 return; 838 } 839 840 switch (N->getOpcode()) { 841 default: break; 842 case ISD::ADD_PARTS: 843 Result = SelectADD_PARTS(Op); 844 return; 845 case ISD::SUB_PARTS: 846 Result = SelectSUB_PARTS(Op); 847 return; 848 case ISD::SETCC: 849 Result = SelectSETCC(Op); 850 return; 851 case PPCISD::CALL: 852 Result = SelectCALL(Op); 853 return; 854 case PPCISD::GlobalBaseReg: 855 Result = getGlobalBaseReg(); 856 return; 857 858 case ISD::FrameIndex: { 859 int FI = cast<FrameIndexSDNode>(N)->getIndex(); 860 if (N->hasOneUse()) { 861 Result = CurDAG->SelectNodeTo(N, PPC::ADDI, MVT::i32, 862 CurDAG->getTargetFrameIndex(FI, MVT::i32), 863 getI32Imm(0)); 864 return; 865 } 866 Result = CodeGenMap[Op] = 867 CurDAG->getTargetNode(PPC::ADDI, MVT::i32, 868 CurDAG->getTargetFrameIndex(FI, MVT::i32), 869 getI32Imm(0)); 870 return; 871 } 872 case ISD::SDIV: { 873 // FIXME: since this depends on the setting of the carry flag from the srawi 874 // we should really be making notes about that for the scheduler. 875 // FIXME: It sure would be nice if we could cheaply recognize the 876 // srl/add/sra pattern the dag combiner will generate for this as 877 // sra/addze rather than having to handle sdiv ourselves. oh well. 878 unsigned Imm; 879 if (isIntImmediate(N->getOperand(1), Imm)) { 880 SDOperand N0; 881 Select(N0, N->getOperand(0)); 882 if ((signed)Imm > 0 && isPowerOf2_32(Imm)) { 883 SDOperand Op = 884 CurDAG->getTargetNode(PPC::SRAWI, MVT::i32, MVT::Flag, 885 N0, getI32Imm(Log2_32(Imm))); 886 Result = CurDAG->SelectNodeTo(N, PPC::ADDZE, MVT::i32, 887 Op.getValue(0), Op.getValue(1)); 888 } else if ((signed)Imm < 0 && isPowerOf2_32(-Imm)) { 889 SDOperand Op = 890 CurDAG->getTargetNode(PPC::SRAWI, MVT::i32, MVT::Flag, 891 N0, getI32Imm(Log2_32(-Imm))); 892 SDOperand PT = 893 CurDAG->getTargetNode(PPC::ADDZE, MVT::i32, Op.getValue(0), 894 Op.getValue(1)); 895 Result = CurDAG->SelectNodeTo(N, PPC::NEG, MVT::i32, PT); 896 } 897 return; 898 } 899 900 // Other cases are autogenerated. 901 break; 902 } 903 case ISD::AND: { 904 unsigned Imm, Imm2; 905 // If this is an and of a value rotated between 0 and 31 bits and then and'd 906 // with a mask, emit rlwinm 907 if (isIntImmediate(N->getOperand(1), Imm) && (isShiftedMask_32(Imm) || 908 isShiftedMask_32(~Imm))) { 909 SDOperand Val; 910 unsigned SH, MB, ME; 911 if (isRotateAndMask(N->getOperand(0).Val, Imm, false, SH, MB, ME)) { 912 Select(Val, N->getOperand(0).getOperand(0)); 913 } else if (Imm == 0) { 914 // AND X, 0 -> 0, not "rlwinm 32". 915 Select(Result, N->getOperand(1)); 916 return ; 917 } else { 918 Select(Val, N->getOperand(0)); 919 isRunOfOnes(Imm, MB, ME); 920 SH = 0; 921 } 922 Result = CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32, Val, 923 getI32Imm(SH), getI32Imm(MB), 924 getI32Imm(ME)); 925 return; 926 } 927 // ISD::OR doesn't get all the bitfield insertion fun. 928 // (and (or x, c1), c2) where isRunOfOnes(~(c1^c2)) is a bitfield insert 929 if (isIntImmediate(N->getOperand(1), Imm) && 930 N->getOperand(0).getOpcode() == ISD::OR && 931 isIntImmediate(N->getOperand(0).getOperand(1), Imm2)) { 932 unsigned MB, ME; 933 Imm = ~(Imm^Imm2); 934 if (isRunOfOnes(Imm, MB, ME)) { 935 SDOperand Tmp1, Tmp2; 936 Select(Tmp1, N->getOperand(0).getOperand(0)); 937 Select(Tmp2, N->getOperand(0).getOperand(1)); 938 Result = CurDAG->getTargetNode(PPC::RLWIMI, MVT::i32, Tmp1, Tmp2, 939 getI32Imm(0), getI32Imm(MB), 940 getI32Imm(ME)); 941 return; 942 } 943 } 944 945 // Other cases are autogenerated. 946 break; 947 } 948 case ISD::OR: 949 if (SDNode *I = SelectBitfieldInsert(N)) { 950 Result = CodeGenMap[Op] = SDOperand(I, 0); 951 return; 952 } 953 954 // Other cases are autogenerated. 955 break; 956 case ISD::SHL: { 957 unsigned Imm, SH, MB, ME; 958 if (isOpcWithIntImmediate(N->getOperand(0).Val, ISD::AND, Imm) && 959 isRotateAndMask(N, Imm, true, SH, MB, ME)) { 960 SDOperand Val; 961 Select(Val, N->getOperand(0).getOperand(0)); 962 Result = CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32, 963 Val, getI32Imm(SH), getI32Imm(MB), 964 getI32Imm(ME)); 965 return; 966 } 967 968 // Other cases are autogenerated. 969 break; 970 } 971 case ISD::SRL: { 972 unsigned Imm, SH, MB, ME; 973 if (isOpcWithIntImmediate(N->getOperand(0).Val, ISD::AND, Imm) && 974 isRotateAndMask(N, Imm, true, SH, MB, ME)) { 975 SDOperand Val; 976 Select(Val, N->getOperand(0).getOperand(0)); 977 Result = CurDAG->SelectNodeTo(N, PPC::RLWINM, MVT::i32, 978 Val, getI32Imm(SH & 0x1F), getI32Imm(MB), 979 getI32Imm(ME)); 980 return; 981 } 982 983 // Other cases are autogenerated. 984 break; 985 } 986 case ISD::SELECT_CC: { 987 ISD::CondCode CC = cast<CondCodeSDNode>(N->getOperand(4))->get(); 988 989 // handle the setcc cases here. select_cc lhs, 0, 1, 0, cc 990 if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N->getOperand(1))) 991 if (ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N->getOperand(2))) 992 if (ConstantSDNode *N3C = dyn_cast<ConstantSDNode>(N->getOperand(3))) 993 if (N1C->isNullValue() && N3C->isNullValue() && 994 N2C->getValue() == 1ULL && CC == ISD::SETNE) { 995 SDOperand LHS; 996 Select(LHS, N->getOperand(0)); 997 SDOperand Tmp = 998 CurDAG->getTargetNode(PPC::ADDIC, MVT::i32, MVT::Flag, 999 LHS, getI32Imm(~0U)); 1000 Result = CurDAG->SelectNodeTo(N, PPC::SUBFE, MVT::i32, Tmp, LHS, 1001 Tmp.getValue(1)); 1002 return; 1003 } 1004 1005 SDOperand CCReg = SelectCC(N->getOperand(0), N->getOperand(1), CC); 1006 unsigned BROpc = getBCCForSetCC(CC); 1007 1008 bool isFP = MVT::isFloatingPoint(N->getValueType(0)); 1009 unsigned SelectCCOp; 1010 if (MVT::isInteger(N->getValueType(0))) 1011 SelectCCOp = PPC::SELECT_CC_Int; 1012 else if (N->getValueType(0) == MVT::f32) 1013 SelectCCOp = PPC::SELECT_CC_F4; 1014 else 1015 SelectCCOp = PPC::SELECT_CC_F8; 1016 SDOperand N2, N3; 1017 Select(N2, N->getOperand(2)); 1018 Select(N3, N->getOperand(3)); 1019 Result = CurDAG->SelectNodeTo(N, SelectCCOp, N->getValueType(0), CCReg, 1020 N2, N3, getI32Imm(BROpc)); 1021 return; 1022 } 1023 case ISD::BR_CC: 1024 case ISD::BRTWOWAY_CC: { 1025 SDOperand Chain; 1026 Select(Chain, N->getOperand(0)); 1027 MachineBasicBlock *Dest = 1028 cast<BasicBlockSDNode>(N->getOperand(4))->getBasicBlock(); 1029 ISD::CondCode CC = cast<CondCodeSDNode>(N->getOperand(1))->get(); 1030 SDOperand CondCode = SelectCC(N->getOperand(2), N->getOperand(3), CC); 1031 1032 // If this is a two way branch, then grab the fallthrough basic block 1033 // argument and build a PowerPC branch pseudo-op, suitable for long branch 1034 // conversion if necessary by the branch selection pass. Otherwise, emit a 1035 // standard conditional branch. 1036 if (N->getOpcode() == ISD::BRTWOWAY_CC) { 1037 SDOperand CondTrueBlock = N->getOperand(4); 1038 SDOperand CondFalseBlock = N->getOperand(5); 1039 1040 // If the false case is the current basic block, then this is a self loop. 1041 // We do not want to emit "Loop: ... brcond Out; br Loop", as it adds an 1042 // extra dispatch group to the loop. Instead, invert the condition and 1043 // emit "Loop: ... br!cond Loop; br Out 1044 if (cast<BasicBlockSDNode>(CondFalseBlock)->getBasicBlock() == BB) { 1045 std::swap(CondTrueBlock, CondFalseBlock); 1046 CC = getSetCCInverse(CC, 1047 MVT::isInteger(N->getOperand(2).getValueType())); 1048 } 1049 1050 unsigned Opc = getBCCForSetCC(CC); 1051 SDOperand CB = CurDAG->getTargetNode(PPC::COND_BRANCH, MVT::Other, 1052 CondCode, getI32Imm(Opc), 1053 CondTrueBlock, CondFalseBlock, 1054 Chain); 1055 Result = CurDAG->SelectNodeTo(N, PPC::B, MVT::Other, CondFalseBlock, CB); 1056 } else { 1057 // Iterate to the next basic block 1058 ilist<MachineBasicBlock>::iterator It = BB; 1059 ++It; 1060 1061 // If the fallthrough path is off the end of the function, which would be 1062 // undefined behavior, set it to be the same as the current block because 1063 // we have nothing better to set it to, and leaving it alone will cause 1064 // the PowerPC Branch Selection pass to crash. 1065 if (It == BB->getParent()->end()) It = Dest; 1066 Result = CurDAG->SelectNodeTo(N, PPC::COND_BRANCH, MVT::Other, CondCode, 1067 getI32Imm(getBCCForSetCC(CC)), 1068 N->getOperand(4), CurDAG->getBasicBlock(It), 1069 Chain); 1070 } 1071 return; 1072 } 1073 } 1074 1075 SelectCode(Result, Op); 1076} 1077 1078 1079/// createPPCISelDag - This pass converts a legalized DAG into a 1080/// PowerPC-specific DAG, ready for instruction scheduling. 1081/// 1082FunctionPass *llvm::createPPCISelDag(TargetMachine &TM) { 1083 return new PPCDAGToDAGISel(TM); 1084} 1085 1086