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