1 //===-- SelectionDAG.cpp - Implement the SelectionDAG data structures -----===// 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 SelectionDAG class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/CodeGen/SelectionDAG.h" 15 #include "SDNodeDbgValue.h" 16 #include "llvm/ADT/SetVector.h" 17 #include "llvm/ADT/SmallPtrSet.h" 18 #include "llvm/ADT/SmallSet.h" 19 #include "llvm/ADT/SmallVector.h" 20 #include "llvm/ADT/StringExtras.h" 21 #include "llvm/Analysis/ValueTracking.h" 22 #include "llvm/CodeGen/MachineBasicBlock.h" 23 #include "llvm/CodeGen/MachineConstantPool.h" 24 #include "llvm/CodeGen/MachineFrameInfo.h" 25 #include "llvm/CodeGen/MachineModuleInfo.h" 26 #include "llvm/IR/CallingConv.h" 27 #include "llvm/IR/Constants.h" 28 #include "llvm/IR/DataLayout.h" 29 #include "llvm/IR/DebugInfo.h" 30 #include "llvm/IR/DerivedTypes.h" 31 #include "llvm/IR/Function.h" 32 #include "llvm/IR/GlobalAlias.h" 33 #include "llvm/IR/GlobalVariable.h" 34 #include "llvm/IR/Intrinsics.h" 35 #include "llvm/Support/CommandLine.h" 36 #include "llvm/Support/Debug.h" 37 #include "llvm/Support/ErrorHandling.h" 38 #include "llvm/Support/ManagedStatic.h" 39 #include "llvm/Support/MathExtras.h" 40 #include "llvm/Support/Mutex.h" 41 #include "llvm/Support/raw_ostream.h" 42 #include "llvm/Target/TargetInstrInfo.h" 43 #include "llvm/Target/TargetIntrinsicInfo.h" 44 #include "llvm/Target/TargetLowering.h" 45 #include "llvm/Target/TargetMachine.h" 46 #include "llvm/Target/TargetOptions.h" 47 #include "llvm/Target/TargetRegisterInfo.h" 48 #include "llvm/Target/TargetSelectionDAGInfo.h" 49 #include "llvm/Target/TargetSubtargetInfo.h" 50 #include <algorithm> 51 #include <cmath> 52 53 using namespace llvm; 54 55 /// makeVTList - Return an instance of the SDVTList struct initialized with the 56 /// specified members. 57 static SDVTList makeVTList(const EVT *VTs, unsigned NumVTs) { 58 SDVTList Res = {VTs, NumVTs}; 59 return Res; 60 } 61 62 // Default null implementations of the callbacks. 63 void SelectionDAG::DAGUpdateListener::NodeDeleted(SDNode*, SDNode*) {} 64 void SelectionDAG::DAGUpdateListener::NodeUpdated(SDNode*) {} 65 66 //===----------------------------------------------------------------------===// 67 // ConstantFPSDNode Class 68 //===----------------------------------------------------------------------===// 69 70 /// isExactlyValue - We don't rely on operator== working on double values, as 71 /// it returns true for things that are clearly not equal, like -0.0 and 0.0. 72 /// As such, this method can be used to do an exact bit-for-bit comparison of 73 /// two floating point values. 74 bool ConstantFPSDNode::isExactlyValue(const APFloat& V) const { 75 return getValueAPF().bitwiseIsEqual(V); 76 } 77 78 bool ConstantFPSDNode::isValueValidForType(EVT VT, 79 const APFloat& Val) { 80 assert(VT.isFloatingPoint() && "Can only convert between FP types"); 81 82 // convert modifies in place, so make a copy. 83 APFloat Val2 = APFloat(Val); 84 bool losesInfo; 85 (void) Val2.convert(SelectionDAG::EVTToAPFloatSemantics(VT), 86 APFloat::rmNearestTiesToEven, 87 &losesInfo); 88 return !losesInfo; 89 } 90 91 //===----------------------------------------------------------------------===// 92 // ISD Namespace 93 //===----------------------------------------------------------------------===// 94 95 /// isBuildVectorAllOnes - Return true if the specified node is a 96 /// BUILD_VECTOR where all of the elements are ~0 or undef. 97 bool ISD::isBuildVectorAllOnes(const SDNode *N) { 98 // Look through a bit convert. 99 if (N->getOpcode() == ISD::BITCAST) 100 N = N->getOperand(0).getNode(); 101 102 if (N->getOpcode() != ISD::BUILD_VECTOR) return false; 103 104 unsigned i = 0, e = N->getNumOperands(); 105 106 // Skip over all of the undef values. 107 while (i != e && N->getOperand(i).getOpcode() == ISD::UNDEF) 108 ++i; 109 110 // Do not accept an all-undef vector. 111 if (i == e) return false; 112 113 // Do not accept build_vectors that aren't all constants or which have non-~0 114 // elements. We have to be a bit careful here, as the type of the constant 115 // may not be the same as the type of the vector elements due to type 116 // legalization (the elements are promoted to a legal type for the target and 117 // a vector of a type may be legal when the base element type is not). 118 // We only want to check enough bits to cover the vector elements, because 119 // we care if the resultant vector is all ones, not whether the individual 120 // constants are. 121 SDValue NotZero = N->getOperand(i); 122 unsigned EltSize = N->getValueType(0).getVectorElementType().getSizeInBits(); 123 if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(NotZero)) { 124 if (CN->getAPIntValue().countTrailingOnes() < EltSize) 125 return false; 126 } else if (ConstantFPSDNode *CFPN = dyn_cast<ConstantFPSDNode>(NotZero)) { 127 if (CFPN->getValueAPF().bitcastToAPInt().countTrailingOnes() < EltSize) 128 return false; 129 } else 130 return false; 131 132 // Okay, we have at least one ~0 value, check to see if the rest match or are 133 // undefs. Even with the above element type twiddling, this should be OK, as 134 // the same type legalization should have applied to all the elements. 135 for (++i; i != e; ++i) 136 if (N->getOperand(i) != NotZero && 137 N->getOperand(i).getOpcode() != ISD::UNDEF) 138 return false; 139 return true; 140 } 141 142 143 /// isBuildVectorAllZeros - Return true if the specified node is a 144 /// BUILD_VECTOR where all of the elements are 0 or undef. 145 bool ISD::isBuildVectorAllZeros(const SDNode *N) { 146 // Look through a bit convert. 147 if (N->getOpcode() == ISD::BITCAST) 148 N = N->getOperand(0).getNode(); 149 150 if (N->getOpcode() != ISD::BUILD_VECTOR) return false; 151 152 bool IsAllUndef = true; 153 for (unsigned i = 0, e = N->getNumOperands(); i < e; ++i) { 154 if (N->getOperand(i).getOpcode() == ISD::UNDEF) 155 continue; 156 IsAllUndef = false; 157 // Do not accept build_vectors that aren't all constants or which have non-0 158 // elements. We have to be a bit careful here, as the type of the constant 159 // may not be the same as the type of the vector elements due to type 160 // legalization (the elements are promoted to a legal type for the target 161 // and a vector of a type may be legal when the base element type is not). 162 // We only want to check enough bits to cover the vector elements, because 163 // we care if the resultant vector is all zeros, not whether the individual 164 // constants are. 165 SDValue Zero = N->getOperand(i); 166 unsigned EltSize = N->getValueType(0).getVectorElementType().getSizeInBits(); 167 if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Zero)) { 168 if (CN->getAPIntValue().countTrailingZeros() < EltSize) 169 return false; 170 } else if (ConstantFPSDNode *CFPN = dyn_cast<ConstantFPSDNode>(Zero)) { 171 if (CFPN->getValueAPF().bitcastToAPInt().countTrailingZeros() < EltSize) 172 return false; 173 } else 174 return false; 175 } 176 177 // Do not accept an all-undef vector. 178 if (IsAllUndef) 179 return false; 180 return true; 181 } 182 183 /// \brief Return true if the specified node is a BUILD_VECTOR node of 184 /// all ConstantSDNode or undef. 185 bool ISD::isBuildVectorOfConstantSDNodes(const SDNode *N) { 186 if (N->getOpcode() != ISD::BUILD_VECTOR) 187 return false; 188 189 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) { 190 SDValue Op = N->getOperand(i); 191 if (Op.getOpcode() == ISD::UNDEF) 192 continue; 193 if (!isa<ConstantSDNode>(Op)) 194 return false; 195 } 196 return true; 197 } 198 199 /// isScalarToVector - Return true if the specified node is a 200 /// ISD::SCALAR_TO_VECTOR node or a BUILD_VECTOR node where only the low 201 /// element is not an undef. 202 bool ISD::isScalarToVector(const SDNode *N) { 203 if (N->getOpcode() == ISD::SCALAR_TO_VECTOR) 204 return true; 205 206 if (N->getOpcode() != ISD::BUILD_VECTOR) 207 return false; 208 if (N->getOperand(0).getOpcode() == ISD::UNDEF) 209 return false; 210 unsigned NumElems = N->getNumOperands(); 211 if (NumElems == 1) 212 return false; 213 for (unsigned i = 1; i < NumElems; ++i) { 214 SDValue V = N->getOperand(i); 215 if (V.getOpcode() != ISD::UNDEF) 216 return false; 217 } 218 return true; 219 } 220 221 /// allOperandsUndef - Return true if the node has at least one operand 222 /// and all operands of the specified node are ISD::UNDEF. 223 bool ISD::allOperandsUndef(const SDNode *N) { 224 // Return false if the node has no operands. 225 // This is "logically inconsistent" with the definition of "all" but 226 // is probably the desired behavior. 227 if (N->getNumOperands() == 0) 228 return false; 229 230 for (unsigned i = 0, e = N->getNumOperands(); i != e ; ++i) 231 if (N->getOperand(i).getOpcode() != ISD::UNDEF) 232 return false; 233 234 return true; 235 } 236 237 ISD::NodeType ISD::getExtForLoadExtType(ISD::LoadExtType ExtType) { 238 switch (ExtType) { 239 case ISD::EXTLOAD: 240 return ISD::ANY_EXTEND; 241 case ISD::SEXTLOAD: 242 return ISD::SIGN_EXTEND; 243 case ISD::ZEXTLOAD: 244 return ISD::ZERO_EXTEND; 245 default: 246 break; 247 } 248 249 llvm_unreachable("Invalid LoadExtType"); 250 } 251 252 /// getSetCCSwappedOperands - Return the operation corresponding to (Y op X) 253 /// when given the operation for (X op Y). 254 ISD::CondCode ISD::getSetCCSwappedOperands(ISD::CondCode Operation) { 255 // To perform this operation, we just need to swap the L and G bits of the 256 // operation. 257 unsigned OldL = (Operation >> 2) & 1; 258 unsigned OldG = (Operation >> 1) & 1; 259 return ISD::CondCode((Operation & ~6) | // Keep the N, U, E bits 260 (OldL << 1) | // New G bit 261 (OldG << 2)); // New L bit. 262 } 263 264 /// getSetCCInverse - Return the operation corresponding to !(X op Y), where 265 /// 'op' is a valid SetCC operation. 266 ISD::CondCode ISD::getSetCCInverse(ISD::CondCode Op, bool isInteger) { 267 unsigned Operation = Op; 268 if (isInteger) 269 Operation ^= 7; // Flip L, G, E bits, but not U. 270 else 271 Operation ^= 15; // Flip all of the condition bits. 272 273 if (Operation > ISD::SETTRUE2) 274 Operation &= ~8; // Don't let N and U bits get set. 275 276 return ISD::CondCode(Operation); 277 } 278 279 280 /// isSignedOp - For an integer comparison, return 1 if the comparison is a 281 /// signed operation and 2 if the result is an unsigned comparison. Return zero 282 /// if the operation does not depend on the sign of the input (setne and seteq). 283 static int isSignedOp(ISD::CondCode Opcode) { 284 switch (Opcode) { 285 default: llvm_unreachable("Illegal integer setcc operation!"); 286 case ISD::SETEQ: 287 case ISD::SETNE: return 0; 288 case ISD::SETLT: 289 case ISD::SETLE: 290 case ISD::SETGT: 291 case ISD::SETGE: return 1; 292 case ISD::SETULT: 293 case ISD::SETULE: 294 case ISD::SETUGT: 295 case ISD::SETUGE: return 2; 296 } 297 } 298 299 /// getSetCCOrOperation - Return the result of a logical OR between different 300 /// comparisons of identical values: ((X op1 Y) | (X op2 Y)). This function 301 /// returns SETCC_INVALID if it is not possible to represent the resultant 302 /// comparison. 303 ISD::CondCode ISD::getSetCCOrOperation(ISD::CondCode Op1, ISD::CondCode Op2, 304 bool isInteger) { 305 if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3) 306 // Cannot fold a signed integer setcc with an unsigned integer setcc. 307 return ISD::SETCC_INVALID; 308 309 unsigned Op = Op1 | Op2; // Combine all of the condition bits. 310 311 // If the N and U bits get set then the resultant comparison DOES suddenly 312 // care about orderedness, and is true when ordered. 313 if (Op > ISD::SETTRUE2) 314 Op &= ~16; // Clear the U bit if the N bit is set. 315 316 // Canonicalize illegal integer setcc's. 317 if (isInteger && Op == ISD::SETUNE) // e.g. SETUGT | SETULT 318 Op = ISD::SETNE; 319 320 return ISD::CondCode(Op); 321 } 322 323 /// getSetCCAndOperation - Return the result of a logical AND between different 324 /// comparisons of identical values: ((X op1 Y) & (X op2 Y)). This 325 /// function returns zero if it is not possible to represent the resultant 326 /// comparison. 327 ISD::CondCode ISD::getSetCCAndOperation(ISD::CondCode Op1, ISD::CondCode Op2, 328 bool isInteger) { 329 if (isInteger && (isSignedOp(Op1) | isSignedOp(Op2)) == 3) 330 // Cannot fold a signed setcc with an unsigned setcc. 331 return ISD::SETCC_INVALID; 332 333 // Combine all of the condition bits. 334 ISD::CondCode Result = ISD::CondCode(Op1 & Op2); 335 336 // Canonicalize illegal integer setcc's. 337 if (isInteger) { 338 switch (Result) { 339 default: break; 340 case ISD::SETUO : Result = ISD::SETFALSE; break; // SETUGT & SETULT 341 case ISD::SETOEQ: // SETEQ & SETU[LG]E 342 case ISD::SETUEQ: Result = ISD::SETEQ ; break; // SETUGE & SETULE 343 case ISD::SETOLT: Result = ISD::SETULT ; break; // SETULT & SETNE 344 case ISD::SETOGT: Result = ISD::SETUGT ; break; // SETUGT & SETNE 345 } 346 } 347 348 return Result; 349 } 350 351 //===----------------------------------------------------------------------===// 352 // SDNode Profile Support 353 //===----------------------------------------------------------------------===// 354 355 /// AddNodeIDOpcode - Add the node opcode to the NodeID data. 356 /// 357 static void AddNodeIDOpcode(FoldingSetNodeID &ID, unsigned OpC) { 358 ID.AddInteger(OpC); 359 } 360 361 /// AddNodeIDValueTypes - Value type lists are intern'd so we can represent them 362 /// solely with their pointer. 363 static void AddNodeIDValueTypes(FoldingSetNodeID &ID, SDVTList VTList) { 364 ID.AddPointer(VTList.VTs); 365 } 366 367 /// AddNodeIDOperands - Various routines for adding operands to the NodeID data. 368 /// 369 static void AddNodeIDOperands(FoldingSetNodeID &ID, 370 ArrayRef<SDValue> Ops) { 371 for (auto& Op : Ops) { 372 ID.AddPointer(Op.getNode()); 373 ID.AddInteger(Op.getResNo()); 374 } 375 } 376 377 /// AddNodeIDOperands - Various routines for adding operands to the NodeID data. 378 /// 379 static void AddNodeIDOperands(FoldingSetNodeID &ID, 380 ArrayRef<SDUse> Ops) { 381 for (auto& Op : Ops) { 382 ID.AddPointer(Op.getNode()); 383 ID.AddInteger(Op.getResNo()); 384 } 385 } 386 387 static void AddBinaryNodeIDCustom(FoldingSetNodeID &ID, bool nuw, bool nsw, 388 bool exact) { 389 ID.AddBoolean(nuw); 390 ID.AddBoolean(nsw); 391 ID.AddBoolean(exact); 392 } 393 394 /// AddBinaryNodeIDCustom - Add BinarySDNodes special infos 395 static void AddBinaryNodeIDCustom(FoldingSetNodeID &ID, unsigned Opcode, 396 bool nuw, bool nsw, bool exact) { 397 if (isBinOpWithFlags(Opcode)) 398 AddBinaryNodeIDCustom(ID, nuw, nsw, exact); 399 } 400 401 static void AddNodeIDNode(FoldingSetNodeID &ID, unsigned short OpC, 402 SDVTList VTList, ArrayRef<SDValue> OpList) { 403 AddNodeIDOpcode(ID, OpC); 404 AddNodeIDValueTypes(ID, VTList); 405 AddNodeIDOperands(ID, OpList); 406 } 407 408 /// AddNodeIDCustom - If this is an SDNode with special info, add this info to 409 /// the NodeID data. 410 static void AddNodeIDCustom(FoldingSetNodeID &ID, const SDNode *N) { 411 switch (N->getOpcode()) { 412 case ISD::TargetExternalSymbol: 413 case ISD::ExternalSymbol: 414 llvm_unreachable("Should only be used on nodes with operands"); 415 default: break; // Normal nodes don't need extra info. 416 case ISD::TargetConstant: 417 case ISD::Constant: { 418 const ConstantSDNode *C = cast<ConstantSDNode>(N); 419 ID.AddPointer(C->getConstantIntValue()); 420 ID.AddBoolean(C->isOpaque()); 421 break; 422 } 423 case ISD::TargetConstantFP: 424 case ISD::ConstantFP: { 425 ID.AddPointer(cast<ConstantFPSDNode>(N)->getConstantFPValue()); 426 break; 427 } 428 case ISD::TargetGlobalAddress: 429 case ISD::GlobalAddress: 430 case ISD::TargetGlobalTLSAddress: 431 case ISD::GlobalTLSAddress: { 432 const GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(N); 433 ID.AddPointer(GA->getGlobal()); 434 ID.AddInteger(GA->getOffset()); 435 ID.AddInteger(GA->getTargetFlags()); 436 ID.AddInteger(GA->getAddressSpace()); 437 break; 438 } 439 case ISD::BasicBlock: 440 ID.AddPointer(cast<BasicBlockSDNode>(N)->getBasicBlock()); 441 break; 442 case ISD::Register: 443 ID.AddInteger(cast<RegisterSDNode>(N)->getReg()); 444 break; 445 case ISD::RegisterMask: 446 ID.AddPointer(cast<RegisterMaskSDNode>(N)->getRegMask()); 447 break; 448 case ISD::SRCVALUE: 449 ID.AddPointer(cast<SrcValueSDNode>(N)->getValue()); 450 break; 451 case ISD::FrameIndex: 452 case ISD::TargetFrameIndex: 453 ID.AddInteger(cast<FrameIndexSDNode>(N)->getIndex()); 454 break; 455 case ISD::JumpTable: 456 case ISD::TargetJumpTable: 457 ID.AddInteger(cast<JumpTableSDNode>(N)->getIndex()); 458 ID.AddInteger(cast<JumpTableSDNode>(N)->getTargetFlags()); 459 break; 460 case ISD::ConstantPool: 461 case ISD::TargetConstantPool: { 462 const ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(N); 463 ID.AddInteger(CP->getAlignment()); 464 ID.AddInteger(CP->getOffset()); 465 if (CP->isMachineConstantPoolEntry()) 466 CP->getMachineCPVal()->addSelectionDAGCSEId(ID); 467 else 468 ID.AddPointer(CP->getConstVal()); 469 ID.AddInteger(CP->getTargetFlags()); 470 break; 471 } 472 case ISD::TargetIndex: { 473 const TargetIndexSDNode *TI = cast<TargetIndexSDNode>(N); 474 ID.AddInteger(TI->getIndex()); 475 ID.AddInteger(TI->getOffset()); 476 ID.AddInteger(TI->getTargetFlags()); 477 break; 478 } 479 case ISD::LOAD: { 480 const LoadSDNode *LD = cast<LoadSDNode>(N); 481 ID.AddInteger(LD->getMemoryVT().getRawBits()); 482 ID.AddInteger(LD->getRawSubclassData()); 483 ID.AddInteger(LD->getPointerInfo().getAddrSpace()); 484 break; 485 } 486 case ISD::STORE: { 487 const StoreSDNode *ST = cast<StoreSDNode>(N); 488 ID.AddInteger(ST->getMemoryVT().getRawBits()); 489 ID.AddInteger(ST->getRawSubclassData()); 490 ID.AddInteger(ST->getPointerInfo().getAddrSpace()); 491 break; 492 } 493 case ISD::SDIV: 494 case ISD::UDIV: 495 case ISD::SRA: 496 case ISD::SRL: 497 case ISD::MUL: 498 case ISD::ADD: 499 case ISD::SUB: 500 case ISD::SHL: { 501 const BinaryWithFlagsSDNode *BinNode = cast<BinaryWithFlagsSDNode>(N); 502 AddBinaryNodeIDCustom(ID, N->getOpcode(), BinNode->hasNoUnsignedWrap(), 503 BinNode->hasNoSignedWrap(), BinNode->isExact()); 504 break; 505 } 506 case ISD::ATOMIC_CMP_SWAP: 507 case ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS: 508 case ISD::ATOMIC_SWAP: 509 case ISD::ATOMIC_LOAD_ADD: 510 case ISD::ATOMIC_LOAD_SUB: 511 case ISD::ATOMIC_LOAD_AND: 512 case ISD::ATOMIC_LOAD_OR: 513 case ISD::ATOMIC_LOAD_XOR: 514 case ISD::ATOMIC_LOAD_NAND: 515 case ISD::ATOMIC_LOAD_MIN: 516 case ISD::ATOMIC_LOAD_MAX: 517 case ISD::ATOMIC_LOAD_UMIN: 518 case ISD::ATOMIC_LOAD_UMAX: 519 case ISD::ATOMIC_LOAD: 520 case ISD::ATOMIC_STORE: { 521 const AtomicSDNode *AT = cast<AtomicSDNode>(N); 522 ID.AddInteger(AT->getMemoryVT().getRawBits()); 523 ID.AddInteger(AT->getRawSubclassData()); 524 ID.AddInteger(AT->getPointerInfo().getAddrSpace()); 525 break; 526 } 527 case ISD::PREFETCH: { 528 const MemSDNode *PF = cast<MemSDNode>(N); 529 ID.AddInteger(PF->getPointerInfo().getAddrSpace()); 530 break; 531 } 532 case ISD::VECTOR_SHUFFLE: { 533 const ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(N); 534 for (unsigned i = 0, e = N->getValueType(0).getVectorNumElements(); 535 i != e; ++i) 536 ID.AddInteger(SVN->getMaskElt(i)); 537 break; 538 } 539 case ISD::TargetBlockAddress: 540 case ISD::BlockAddress: { 541 const BlockAddressSDNode *BA = cast<BlockAddressSDNode>(N); 542 ID.AddPointer(BA->getBlockAddress()); 543 ID.AddInteger(BA->getOffset()); 544 ID.AddInteger(BA->getTargetFlags()); 545 break; 546 } 547 } // end switch (N->getOpcode()) 548 549 // Target specific memory nodes could also have address spaces to check. 550 if (N->isTargetMemoryOpcode()) 551 ID.AddInteger(cast<MemSDNode>(N)->getPointerInfo().getAddrSpace()); 552 } 553 554 /// AddNodeIDNode - Generic routine for adding a nodes info to the NodeID 555 /// data. 556 static void AddNodeIDNode(FoldingSetNodeID &ID, const SDNode *N) { 557 AddNodeIDOpcode(ID, N->getOpcode()); 558 // Add the return value info. 559 AddNodeIDValueTypes(ID, N->getVTList()); 560 // Add the operand info. 561 AddNodeIDOperands(ID, N->ops()); 562 563 // Handle SDNode leafs with special info. 564 AddNodeIDCustom(ID, N); 565 } 566 567 /// encodeMemSDNodeFlags - Generic routine for computing a value for use in 568 /// the CSE map that carries volatility, temporalness, indexing mode, and 569 /// extension/truncation information. 570 /// 571 static inline unsigned 572 encodeMemSDNodeFlags(int ConvType, ISD::MemIndexedMode AM, bool isVolatile, 573 bool isNonTemporal, bool isInvariant) { 574 assert((ConvType & 3) == ConvType && 575 "ConvType may not require more than 2 bits!"); 576 assert((AM & 7) == AM && 577 "AM may not require more than 3 bits!"); 578 return ConvType | 579 (AM << 2) | 580 (isVolatile << 5) | 581 (isNonTemporal << 6) | 582 (isInvariant << 7); 583 } 584 585 //===----------------------------------------------------------------------===// 586 // SelectionDAG Class 587 //===----------------------------------------------------------------------===// 588 589 /// doNotCSE - Return true if CSE should not be performed for this node. 590 static bool doNotCSE(SDNode *N) { 591 if (N->getValueType(0) == MVT::Glue) 592 return true; // Never CSE anything that produces a flag. 593 594 switch (N->getOpcode()) { 595 default: break; 596 case ISD::HANDLENODE: 597 case ISD::EH_LABEL: 598 return true; // Never CSE these nodes. 599 } 600 601 // Check that remaining values produced are not flags. 602 for (unsigned i = 1, e = N->getNumValues(); i != e; ++i) 603 if (N->getValueType(i) == MVT::Glue) 604 return true; // Never CSE anything that produces a flag. 605 606 return false; 607 } 608 609 /// RemoveDeadNodes - This method deletes all unreachable nodes in the 610 /// SelectionDAG. 611 void SelectionDAG::RemoveDeadNodes() { 612 // Create a dummy node (which is not added to allnodes), that adds a reference 613 // to the root node, preventing it from being deleted. 614 HandleSDNode Dummy(getRoot()); 615 616 SmallVector<SDNode*, 128> DeadNodes; 617 618 // Add all obviously-dead nodes to the DeadNodes worklist. 619 for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I) 620 if (I->use_empty()) 621 DeadNodes.push_back(I); 622 623 RemoveDeadNodes(DeadNodes); 624 625 // If the root changed (e.g. it was a dead load, update the root). 626 setRoot(Dummy.getValue()); 627 } 628 629 /// RemoveDeadNodes - This method deletes the unreachable nodes in the 630 /// given list, and any nodes that become unreachable as a result. 631 void SelectionDAG::RemoveDeadNodes(SmallVectorImpl<SDNode *> &DeadNodes) { 632 633 // Process the worklist, deleting the nodes and adding their uses to the 634 // worklist. 635 while (!DeadNodes.empty()) { 636 SDNode *N = DeadNodes.pop_back_val(); 637 638 for (DAGUpdateListener *DUL = UpdateListeners; DUL; DUL = DUL->Next) 639 DUL->NodeDeleted(N, nullptr); 640 641 // Take the node out of the appropriate CSE map. 642 RemoveNodeFromCSEMaps(N); 643 644 // Next, brutally remove the operand list. This is safe to do, as there are 645 // no cycles in the graph. 646 for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) { 647 SDUse &Use = *I++; 648 SDNode *Operand = Use.getNode(); 649 Use.set(SDValue()); 650 651 // Now that we removed this operand, see if there are no uses of it left. 652 if (Operand->use_empty()) 653 DeadNodes.push_back(Operand); 654 } 655 656 DeallocateNode(N); 657 } 658 } 659 660 void SelectionDAG::RemoveDeadNode(SDNode *N){ 661 SmallVector<SDNode*, 16> DeadNodes(1, N); 662 663 // Create a dummy node that adds a reference to the root node, preventing 664 // it from being deleted. (This matters if the root is an operand of the 665 // dead node.) 666 HandleSDNode Dummy(getRoot()); 667 668 RemoveDeadNodes(DeadNodes); 669 } 670 671 void SelectionDAG::DeleteNode(SDNode *N) { 672 // First take this out of the appropriate CSE map. 673 RemoveNodeFromCSEMaps(N); 674 675 // Finally, remove uses due to operands of this node, remove from the 676 // AllNodes list, and delete the node. 677 DeleteNodeNotInCSEMaps(N); 678 } 679 680 void SelectionDAG::DeleteNodeNotInCSEMaps(SDNode *N) { 681 assert(N != AllNodes.begin() && "Cannot delete the entry node!"); 682 assert(N->use_empty() && "Cannot delete a node that is not dead!"); 683 684 // Drop all of the operands and decrement used node's use counts. 685 N->DropOperands(); 686 687 DeallocateNode(N); 688 } 689 690 void SelectionDAG::DeallocateNode(SDNode *N) { 691 if (N->OperandsNeedDelete) 692 delete[] N->OperandList; 693 694 // Set the opcode to DELETED_NODE to help catch bugs when node 695 // memory is reallocated. 696 N->NodeType = ISD::DELETED_NODE; 697 698 NodeAllocator.Deallocate(AllNodes.remove(N)); 699 700 // If any of the SDDbgValue nodes refer to this SDNode, invalidate them. 701 ArrayRef<SDDbgValue*> DbgVals = DbgInfo->getSDDbgValues(N); 702 for (unsigned i = 0, e = DbgVals.size(); i != e; ++i) 703 DbgVals[i]->setIsInvalidated(); 704 } 705 706 #ifndef NDEBUG 707 /// VerifySDNode - Sanity check the given SDNode. Aborts if it is invalid. 708 static void VerifySDNode(SDNode *N) { 709 switch (N->getOpcode()) { 710 default: 711 break; 712 case ISD::BUILD_PAIR: { 713 EVT VT = N->getValueType(0); 714 assert(N->getNumValues() == 1 && "Too many results!"); 715 assert(!VT.isVector() && (VT.isInteger() || VT.isFloatingPoint()) && 716 "Wrong return type!"); 717 assert(N->getNumOperands() == 2 && "Wrong number of operands!"); 718 assert(N->getOperand(0).getValueType() == N->getOperand(1).getValueType() && 719 "Mismatched operand types!"); 720 assert(N->getOperand(0).getValueType().isInteger() == VT.isInteger() && 721 "Wrong operand type!"); 722 assert(VT.getSizeInBits() == 2 * N->getOperand(0).getValueSizeInBits() && 723 "Wrong return type size"); 724 break; 725 } 726 case ISD::BUILD_VECTOR: { 727 assert(N->getNumValues() == 1 && "Too many results!"); 728 assert(N->getValueType(0).isVector() && "Wrong return type!"); 729 assert(N->getNumOperands() == N->getValueType(0).getVectorNumElements() && 730 "Wrong number of operands!"); 731 EVT EltVT = N->getValueType(0).getVectorElementType(); 732 for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ++I) { 733 assert((I->getValueType() == EltVT || 734 (EltVT.isInteger() && I->getValueType().isInteger() && 735 EltVT.bitsLE(I->getValueType()))) && 736 "Wrong operand type!"); 737 assert(I->getValueType() == N->getOperand(0).getValueType() && 738 "Operands must all have the same type"); 739 } 740 break; 741 } 742 } 743 } 744 #endif // NDEBUG 745 746 /// \brief Insert a newly allocated node into the DAG. 747 /// 748 /// Handles insertion into the all nodes list and CSE map, as well as 749 /// verification and other common operations when a new node is allocated. 750 void SelectionDAG::InsertNode(SDNode *N) { 751 AllNodes.push_back(N); 752 #ifndef NDEBUG 753 VerifySDNode(N); 754 #endif 755 } 756 757 /// RemoveNodeFromCSEMaps - Take the specified node out of the CSE map that 758 /// correspond to it. This is useful when we're about to delete or repurpose 759 /// the node. We don't want future request for structurally identical nodes 760 /// to return N anymore. 761 bool SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) { 762 bool Erased = false; 763 switch (N->getOpcode()) { 764 case ISD::HANDLENODE: return false; // noop. 765 case ISD::CONDCODE: 766 assert(CondCodeNodes[cast<CondCodeSDNode>(N)->get()] && 767 "Cond code doesn't exist!"); 768 Erased = CondCodeNodes[cast<CondCodeSDNode>(N)->get()] != nullptr; 769 CondCodeNodes[cast<CondCodeSDNode>(N)->get()] = nullptr; 770 break; 771 case ISD::ExternalSymbol: 772 Erased = ExternalSymbols.erase(cast<ExternalSymbolSDNode>(N)->getSymbol()); 773 break; 774 case ISD::TargetExternalSymbol: { 775 ExternalSymbolSDNode *ESN = cast<ExternalSymbolSDNode>(N); 776 Erased = TargetExternalSymbols.erase( 777 std::pair<std::string,unsigned char>(ESN->getSymbol(), 778 ESN->getTargetFlags())); 779 break; 780 } 781 case ISD::VALUETYPE: { 782 EVT VT = cast<VTSDNode>(N)->getVT(); 783 if (VT.isExtended()) { 784 Erased = ExtendedValueTypeNodes.erase(VT); 785 } else { 786 Erased = ValueTypeNodes[VT.getSimpleVT().SimpleTy] != nullptr; 787 ValueTypeNodes[VT.getSimpleVT().SimpleTy] = nullptr; 788 } 789 break; 790 } 791 default: 792 // Remove it from the CSE Map. 793 assert(N->getOpcode() != ISD::DELETED_NODE && "DELETED_NODE in CSEMap!"); 794 assert(N->getOpcode() != ISD::EntryToken && "EntryToken in CSEMap!"); 795 Erased = CSEMap.RemoveNode(N); 796 break; 797 } 798 #ifndef NDEBUG 799 // Verify that the node was actually in one of the CSE maps, unless it has a 800 // flag result (which cannot be CSE'd) or is one of the special cases that are 801 // not subject to CSE. 802 if (!Erased && N->getValueType(N->getNumValues()-1) != MVT::Glue && 803 !N->isMachineOpcode() && !doNotCSE(N)) { 804 N->dump(this); 805 dbgs() << "\n"; 806 llvm_unreachable("Node is not in map!"); 807 } 808 #endif 809 return Erased; 810 } 811 812 /// AddModifiedNodeToCSEMaps - The specified node has been removed from the CSE 813 /// maps and modified in place. Add it back to the CSE maps, unless an identical 814 /// node already exists, in which case transfer all its users to the existing 815 /// node. This transfer can potentially trigger recursive merging. 816 /// 817 void 818 SelectionDAG::AddModifiedNodeToCSEMaps(SDNode *N) { 819 // For node types that aren't CSE'd, just act as if no identical node 820 // already exists. 821 if (!doNotCSE(N)) { 822 SDNode *Existing = CSEMap.GetOrInsertNode(N); 823 if (Existing != N) { 824 // If there was already an existing matching node, use ReplaceAllUsesWith 825 // to replace the dead one with the existing one. This can cause 826 // recursive merging of other unrelated nodes down the line. 827 ReplaceAllUsesWith(N, Existing); 828 829 // N is now dead. Inform the listeners and delete it. 830 for (DAGUpdateListener *DUL = UpdateListeners; DUL; DUL = DUL->Next) 831 DUL->NodeDeleted(N, Existing); 832 DeleteNodeNotInCSEMaps(N); 833 return; 834 } 835 } 836 837 // If the node doesn't already exist, we updated it. Inform listeners. 838 for (DAGUpdateListener *DUL = UpdateListeners; DUL; DUL = DUL->Next) 839 DUL->NodeUpdated(N); 840 } 841 842 /// FindModifiedNodeSlot - Find a slot for the specified node if its operands 843 /// were replaced with those specified. If this node is never memoized, 844 /// return null, otherwise return a pointer to the slot it would take. If a 845 /// node already exists with these operands, the slot will be non-null. 846 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, SDValue Op, 847 void *&InsertPos) { 848 if (doNotCSE(N)) 849 return nullptr; 850 851 SDValue Ops[] = { Op }; 852 FoldingSetNodeID ID; 853 AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops); 854 AddNodeIDCustom(ID, N); 855 SDNode *Node = CSEMap.FindNodeOrInsertPos(ID, InsertPos); 856 return Node; 857 } 858 859 /// FindModifiedNodeSlot - Find a slot for the specified node if its operands 860 /// were replaced with those specified. If this node is never memoized, 861 /// return null, otherwise return a pointer to the slot it would take. If a 862 /// node already exists with these operands, the slot will be non-null. 863 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, 864 SDValue Op1, SDValue Op2, 865 void *&InsertPos) { 866 if (doNotCSE(N)) 867 return nullptr; 868 869 SDValue Ops[] = { Op1, Op2 }; 870 FoldingSetNodeID ID; 871 AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops); 872 AddNodeIDCustom(ID, N); 873 SDNode *Node = CSEMap.FindNodeOrInsertPos(ID, InsertPos); 874 return Node; 875 } 876 877 878 /// FindModifiedNodeSlot - Find a slot for the specified node if its operands 879 /// were replaced with those specified. If this node is never memoized, 880 /// return null, otherwise return a pointer to the slot it would take. If a 881 /// node already exists with these operands, the slot will be non-null. 882 SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N, ArrayRef<SDValue> Ops, 883 void *&InsertPos) { 884 if (doNotCSE(N)) 885 return nullptr; 886 887 FoldingSetNodeID ID; 888 AddNodeIDNode(ID, N->getOpcode(), N->getVTList(), Ops); 889 AddNodeIDCustom(ID, N); 890 SDNode *Node = CSEMap.FindNodeOrInsertPos(ID, InsertPos); 891 return Node; 892 } 893 894 /// getEVTAlignment - Compute the default alignment value for the 895 /// given type. 896 /// 897 unsigned SelectionDAG::getEVTAlignment(EVT VT) const { 898 Type *Ty = VT == MVT::iPTR ? 899 PointerType::get(Type::getInt8Ty(*getContext()), 0) : 900 VT.getTypeForEVT(*getContext()); 901 902 return TM.getSubtargetImpl() 903 ->getTargetLowering() 904 ->getDataLayout() 905 ->getABITypeAlignment(Ty); 906 } 907 908 // EntryNode could meaningfully have debug info if we can find it... 909 SelectionDAG::SelectionDAG(const TargetMachine &tm, CodeGenOpt::Level OL) 910 : TM(tm), TSI(nullptr), TLI(nullptr), OptLevel(OL), 911 EntryNode(ISD::EntryToken, 0, DebugLoc(), getVTList(MVT::Other)), 912 Root(getEntryNode()), NewNodesMustHaveLegalTypes(false), 913 UpdateListeners(nullptr) { 914 AllNodes.push_back(&EntryNode); 915 DbgInfo = new SDDbgInfo(); 916 } 917 918 void SelectionDAG::init(MachineFunction &mf) { 919 MF = &mf; 920 TLI = getSubtarget().getTargetLowering(); 921 TSI = getSubtarget().getSelectionDAGInfo(); 922 Context = &mf.getFunction()->getContext(); 923 } 924 925 SelectionDAG::~SelectionDAG() { 926 assert(!UpdateListeners && "Dangling registered DAGUpdateListeners"); 927 allnodes_clear(); 928 delete DbgInfo; 929 } 930 931 void SelectionDAG::allnodes_clear() { 932 assert(&*AllNodes.begin() == &EntryNode); 933 AllNodes.remove(AllNodes.begin()); 934 while (!AllNodes.empty()) 935 DeallocateNode(AllNodes.begin()); 936 } 937 938 BinarySDNode *SelectionDAG::GetBinarySDNode(unsigned Opcode, SDLoc DL, 939 SDVTList VTs, SDValue N1, 940 SDValue N2, bool nuw, bool nsw, 941 bool exact) { 942 if (isBinOpWithFlags(Opcode)) { 943 BinaryWithFlagsSDNode *FN = new (NodeAllocator) BinaryWithFlagsSDNode( 944 Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs, N1, N2); 945 FN->setHasNoUnsignedWrap(nuw); 946 FN->setHasNoSignedWrap(nsw); 947 FN->setIsExact(exact); 948 949 return FN; 950 } 951 952 BinarySDNode *N = new (NodeAllocator) 953 BinarySDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs, N1, N2); 954 return N; 955 } 956 957 void SelectionDAG::clear() { 958 allnodes_clear(); 959 OperandAllocator.Reset(); 960 CSEMap.clear(); 961 962 ExtendedValueTypeNodes.clear(); 963 ExternalSymbols.clear(); 964 TargetExternalSymbols.clear(); 965 std::fill(CondCodeNodes.begin(), CondCodeNodes.end(), 966 static_cast<CondCodeSDNode*>(nullptr)); 967 std::fill(ValueTypeNodes.begin(), ValueTypeNodes.end(), 968 static_cast<SDNode*>(nullptr)); 969 970 EntryNode.UseList = nullptr; 971 AllNodes.push_back(&EntryNode); 972 Root = getEntryNode(); 973 DbgInfo->clear(); 974 } 975 976 SDValue SelectionDAG::getAnyExtOrTrunc(SDValue Op, SDLoc DL, EVT VT) { 977 return VT.bitsGT(Op.getValueType()) ? 978 getNode(ISD::ANY_EXTEND, DL, VT, Op) : 979 getNode(ISD::TRUNCATE, DL, VT, Op); 980 } 981 982 SDValue SelectionDAG::getSExtOrTrunc(SDValue Op, SDLoc DL, EVT VT) { 983 return VT.bitsGT(Op.getValueType()) ? 984 getNode(ISD::SIGN_EXTEND, DL, VT, Op) : 985 getNode(ISD::TRUNCATE, DL, VT, Op); 986 } 987 988 SDValue SelectionDAG::getZExtOrTrunc(SDValue Op, SDLoc DL, EVT VT) { 989 return VT.bitsGT(Op.getValueType()) ? 990 getNode(ISD::ZERO_EXTEND, DL, VT, Op) : 991 getNode(ISD::TRUNCATE, DL, VT, Op); 992 } 993 994 SDValue SelectionDAG::getBoolExtOrTrunc(SDValue Op, SDLoc SL, EVT VT, 995 EVT OpVT) { 996 if (VT.bitsLE(Op.getValueType())) 997 return getNode(ISD::TRUNCATE, SL, VT, Op); 998 999 TargetLowering::BooleanContent BType = TLI->getBooleanContents(OpVT); 1000 return getNode(TLI->getExtendForContent(BType), SL, VT, Op); 1001 } 1002 1003 SDValue SelectionDAG::getZeroExtendInReg(SDValue Op, SDLoc DL, EVT VT) { 1004 assert(!VT.isVector() && 1005 "getZeroExtendInReg should use the vector element type instead of " 1006 "the vector type!"); 1007 if (Op.getValueType() == VT) return Op; 1008 unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits(); 1009 APInt Imm = APInt::getLowBitsSet(BitWidth, 1010 VT.getSizeInBits()); 1011 return getNode(ISD::AND, DL, Op.getValueType(), Op, 1012 getConstant(Imm, Op.getValueType())); 1013 } 1014 1015 SDValue SelectionDAG::getAnyExtendVectorInReg(SDValue Op, SDLoc DL, EVT VT) { 1016 assert(VT.isVector() && "This DAG node is restricted to vector types."); 1017 assert(VT.getSizeInBits() == Op.getValueType().getSizeInBits() && 1018 "The sizes of the input and result must match in order to perform the " 1019 "extend in-register."); 1020 assert(VT.getVectorNumElements() < Op.getValueType().getVectorNumElements() && 1021 "The destination vector type must have fewer lanes than the input."); 1022 return getNode(ISD::ANY_EXTEND_VECTOR_INREG, DL, VT, Op); 1023 } 1024 1025 SDValue SelectionDAG::getSignExtendVectorInReg(SDValue Op, SDLoc DL, EVT VT) { 1026 assert(VT.isVector() && "This DAG node is restricted to vector types."); 1027 assert(VT.getSizeInBits() == Op.getValueType().getSizeInBits() && 1028 "The sizes of the input and result must match in order to perform the " 1029 "extend in-register."); 1030 assert(VT.getVectorNumElements() < Op.getValueType().getVectorNumElements() && 1031 "The destination vector type must have fewer lanes than the input."); 1032 return getNode(ISD::SIGN_EXTEND_VECTOR_INREG, DL, VT, Op); 1033 } 1034 1035 SDValue SelectionDAG::getZeroExtendVectorInReg(SDValue Op, SDLoc DL, EVT VT) { 1036 assert(VT.isVector() && "This DAG node is restricted to vector types."); 1037 assert(VT.getSizeInBits() == Op.getValueType().getSizeInBits() && 1038 "The sizes of the input and result must match in order to perform the " 1039 "extend in-register."); 1040 assert(VT.getVectorNumElements() < Op.getValueType().getVectorNumElements() && 1041 "The destination vector type must have fewer lanes than the input."); 1042 return getNode(ISD::ZERO_EXTEND_VECTOR_INREG, DL, VT, Op); 1043 } 1044 1045 /// getNOT - Create a bitwise NOT operation as (XOR Val, -1). 1046 /// 1047 SDValue SelectionDAG::getNOT(SDLoc DL, SDValue Val, EVT VT) { 1048 EVT EltVT = VT.getScalarType(); 1049 SDValue NegOne = 1050 getConstant(APInt::getAllOnesValue(EltVT.getSizeInBits()), VT); 1051 return getNode(ISD::XOR, DL, VT, Val, NegOne); 1052 } 1053 1054 SDValue SelectionDAG::getLogicalNOT(SDLoc DL, SDValue Val, EVT VT) { 1055 EVT EltVT = VT.getScalarType(); 1056 SDValue TrueValue; 1057 switch (TLI->getBooleanContents(VT)) { 1058 case TargetLowering::ZeroOrOneBooleanContent: 1059 case TargetLowering::UndefinedBooleanContent: 1060 TrueValue = getConstant(1, VT); 1061 break; 1062 case TargetLowering::ZeroOrNegativeOneBooleanContent: 1063 TrueValue = getConstant(APInt::getAllOnesValue(EltVT.getSizeInBits()), 1064 VT); 1065 break; 1066 } 1067 return getNode(ISD::XOR, DL, VT, Val, TrueValue); 1068 } 1069 1070 SDValue SelectionDAG::getConstant(uint64_t Val, EVT VT, bool isT, bool isO) { 1071 EVT EltVT = VT.getScalarType(); 1072 assert((EltVT.getSizeInBits() >= 64 || 1073 (uint64_t)((int64_t)Val >> EltVT.getSizeInBits()) + 1 < 2) && 1074 "getConstant with a uint64_t value that doesn't fit in the type!"); 1075 return getConstant(APInt(EltVT.getSizeInBits(), Val), VT, isT, isO); 1076 } 1077 1078 SDValue SelectionDAG::getConstant(const APInt &Val, EVT VT, bool isT, bool isO) 1079 { 1080 return getConstant(*ConstantInt::get(*Context, Val), VT, isT, isO); 1081 } 1082 1083 SDValue SelectionDAG::getConstant(const ConstantInt &Val, EVT VT, bool isT, 1084 bool isO) { 1085 assert(VT.isInteger() && "Cannot create FP integer constant!"); 1086 1087 EVT EltVT = VT.getScalarType(); 1088 const ConstantInt *Elt = &Val; 1089 1090 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 1091 1092 // In some cases the vector type is legal but the element type is illegal and 1093 // needs to be promoted, for example v8i8 on ARM. In this case, promote the 1094 // inserted value (the type does not need to match the vector element type). 1095 // Any extra bits introduced will be truncated away. 1096 if (VT.isVector() && TLI->getTypeAction(*getContext(), EltVT) == 1097 TargetLowering::TypePromoteInteger) { 1098 EltVT = TLI->getTypeToTransformTo(*getContext(), EltVT); 1099 APInt NewVal = Elt->getValue().zext(EltVT.getSizeInBits()); 1100 Elt = ConstantInt::get(*getContext(), NewVal); 1101 } 1102 // In other cases the element type is illegal and needs to be expanded, for 1103 // example v2i64 on MIPS32. In this case, find the nearest legal type, split 1104 // the value into n parts and use a vector type with n-times the elements. 1105 // Then bitcast to the type requested. 1106 // Legalizing constants too early makes the DAGCombiner's job harder so we 1107 // only legalize if the DAG tells us we must produce legal types. 1108 else if (NewNodesMustHaveLegalTypes && VT.isVector() && 1109 TLI->getTypeAction(*getContext(), EltVT) == 1110 TargetLowering::TypeExpandInteger) { 1111 APInt NewVal = Elt->getValue(); 1112 EVT ViaEltVT = TLI->getTypeToTransformTo(*getContext(), EltVT); 1113 unsigned ViaEltSizeInBits = ViaEltVT.getSizeInBits(); 1114 unsigned ViaVecNumElts = VT.getSizeInBits() / ViaEltSizeInBits; 1115 EVT ViaVecVT = EVT::getVectorVT(*getContext(), ViaEltVT, ViaVecNumElts); 1116 1117 // Check the temporary vector is the correct size. If this fails then 1118 // getTypeToTransformTo() probably returned a type whose size (in bits) 1119 // isn't a power-of-2 factor of the requested type size. 1120 assert(ViaVecVT.getSizeInBits() == VT.getSizeInBits()); 1121 1122 SmallVector<SDValue, 2> EltParts; 1123 for (unsigned i = 0; i < ViaVecNumElts / VT.getVectorNumElements(); ++i) { 1124 EltParts.push_back(getConstant(NewVal.lshr(i * ViaEltSizeInBits) 1125 .trunc(ViaEltSizeInBits), 1126 ViaEltVT, isT, isO)); 1127 } 1128 1129 // EltParts is currently in little endian order. If we actually want 1130 // big-endian order then reverse it now. 1131 if (TLI->isBigEndian()) 1132 std::reverse(EltParts.begin(), EltParts.end()); 1133 1134 // The elements must be reversed when the element order is different 1135 // to the endianness of the elements (because the BITCAST is itself a 1136 // vector shuffle in this situation). However, we do not need any code to 1137 // perform this reversal because getConstant() is producing a vector 1138 // splat. 1139 // This situation occurs in MIPS MSA. 1140 1141 SmallVector<SDValue, 8> Ops; 1142 for (unsigned i = 0; i < VT.getVectorNumElements(); ++i) 1143 Ops.insert(Ops.end(), EltParts.begin(), EltParts.end()); 1144 1145 SDValue Result = getNode(ISD::BITCAST, SDLoc(), VT, 1146 getNode(ISD::BUILD_VECTOR, SDLoc(), ViaVecVT, 1147 Ops)); 1148 return Result; 1149 } 1150 1151 assert(Elt->getBitWidth() == EltVT.getSizeInBits() && 1152 "APInt size does not match type size!"); 1153 unsigned Opc = isT ? ISD::TargetConstant : ISD::Constant; 1154 FoldingSetNodeID ID; 1155 AddNodeIDNode(ID, Opc, getVTList(EltVT), None); 1156 ID.AddPointer(Elt); 1157 ID.AddBoolean(isO); 1158 void *IP = nullptr; 1159 SDNode *N = nullptr; 1160 if ((N = CSEMap.FindNodeOrInsertPos(ID, IP))) 1161 if (!VT.isVector()) 1162 return SDValue(N, 0); 1163 1164 if (!N) { 1165 N = new (NodeAllocator) ConstantSDNode(isT, isO, Elt, EltVT); 1166 CSEMap.InsertNode(N, IP); 1167 InsertNode(N); 1168 } 1169 1170 SDValue Result(N, 0); 1171 if (VT.isVector()) { 1172 SmallVector<SDValue, 8> Ops; 1173 Ops.assign(VT.getVectorNumElements(), Result); 1174 Result = getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Ops); 1175 } 1176 return Result; 1177 } 1178 1179 SDValue SelectionDAG::getIntPtrConstant(uint64_t Val, bool isTarget) { 1180 return getConstant(Val, 1181 TM.getSubtargetImpl()->getTargetLowering()->getPointerTy(), 1182 isTarget); 1183 } 1184 1185 1186 SDValue SelectionDAG::getConstantFP(const APFloat& V, EVT VT, bool isTarget) { 1187 return getConstantFP(*ConstantFP::get(*getContext(), V), VT, isTarget); 1188 } 1189 1190 SDValue SelectionDAG::getConstantFP(const ConstantFP& V, EVT VT, bool isTarget){ 1191 assert(VT.isFloatingPoint() && "Cannot create integer FP constant!"); 1192 1193 EVT EltVT = VT.getScalarType(); 1194 1195 // Do the map lookup using the actual bit pattern for the floating point 1196 // value, so that we don't have problems with 0.0 comparing equal to -0.0, and 1197 // we don't have issues with SNANs. 1198 unsigned Opc = isTarget ? ISD::TargetConstantFP : ISD::ConstantFP; 1199 FoldingSetNodeID ID; 1200 AddNodeIDNode(ID, Opc, getVTList(EltVT), None); 1201 ID.AddPointer(&V); 1202 void *IP = nullptr; 1203 SDNode *N = nullptr; 1204 if ((N = CSEMap.FindNodeOrInsertPos(ID, IP))) 1205 if (!VT.isVector()) 1206 return SDValue(N, 0); 1207 1208 if (!N) { 1209 N = new (NodeAllocator) ConstantFPSDNode(isTarget, &V, EltVT); 1210 CSEMap.InsertNode(N, IP); 1211 InsertNode(N); 1212 } 1213 1214 SDValue Result(N, 0); 1215 if (VT.isVector()) { 1216 SmallVector<SDValue, 8> Ops; 1217 Ops.assign(VT.getVectorNumElements(), Result); 1218 // FIXME SDLoc info might be appropriate here 1219 Result = getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Ops); 1220 } 1221 return Result; 1222 } 1223 1224 SDValue SelectionDAG::getConstantFP(double Val, EVT VT, bool isTarget) { 1225 EVT EltVT = VT.getScalarType(); 1226 if (EltVT==MVT::f32) 1227 return getConstantFP(APFloat((float)Val), VT, isTarget); 1228 else if (EltVT==MVT::f64) 1229 return getConstantFP(APFloat(Val), VT, isTarget); 1230 else if (EltVT==MVT::f80 || EltVT==MVT::f128 || EltVT==MVT::ppcf128 || 1231 EltVT==MVT::f16) { 1232 bool ignored; 1233 APFloat apf = APFloat(Val); 1234 apf.convert(EVTToAPFloatSemantics(EltVT), APFloat::rmNearestTiesToEven, 1235 &ignored); 1236 return getConstantFP(apf, VT, isTarget); 1237 } else 1238 llvm_unreachable("Unsupported type in getConstantFP"); 1239 } 1240 1241 SDValue SelectionDAG::getGlobalAddress(const GlobalValue *GV, SDLoc DL, 1242 EVT VT, int64_t Offset, 1243 bool isTargetGA, 1244 unsigned char TargetFlags) { 1245 assert((TargetFlags == 0 || isTargetGA) && 1246 "Cannot set target flags on target-independent globals"); 1247 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 1248 1249 // Truncate (with sign-extension) the offset value to the pointer size. 1250 unsigned BitWidth = TLI->getPointerTypeSizeInBits(GV->getType()); 1251 if (BitWidth < 64) 1252 Offset = SignExtend64(Offset, BitWidth); 1253 1254 unsigned Opc; 1255 if (GV->isThreadLocal()) 1256 Opc = isTargetGA ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress; 1257 else 1258 Opc = isTargetGA ? ISD::TargetGlobalAddress : ISD::GlobalAddress; 1259 1260 FoldingSetNodeID ID; 1261 AddNodeIDNode(ID, Opc, getVTList(VT), None); 1262 ID.AddPointer(GV); 1263 ID.AddInteger(Offset); 1264 ID.AddInteger(TargetFlags); 1265 ID.AddInteger(GV->getType()->getAddressSpace()); 1266 void *IP = nullptr; 1267 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1268 return SDValue(E, 0); 1269 1270 SDNode *N = new (NodeAllocator) GlobalAddressSDNode(Opc, DL.getIROrder(), 1271 DL.getDebugLoc(), GV, VT, 1272 Offset, TargetFlags); 1273 CSEMap.InsertNode(N, IP); 1274 InsertNode(N); 1275 return SDValue(N, 0); 1276 } 1277 1278 SDValue SelectionDAG::getFrameIndex(int FI, EVT VT, bool isTarget) { 1279 unsigned Opc = isTarget ? ISD::TargetFrameIndex : ISD::FrameIndex; 1280 FoldingSetNodeID ID; 1281 AddNodeIDNode(ID, Opc, getVTList(VT), None); 1282 ID.AddInteger(FI); 1283 void *IP = nullptr; 1284 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1285 return SDValue(E, 0); 1286 1287 SDNode *N = new (NodeAllocator) FrameIndexSDNode(FI, VT, isTarget); 1288 CSEMap.InsertNode(N, IP); 1289 InsertNode(N); 1290 return SDValue(N, 0); 1291 } 1292 1293 SDValue SelectionDAG::getJumpTable(int JTI, EVT VT, bool isTarget, 1294 unsigned char TargetFlags) { 1295 assert((TargetFlags == 0 || isTarget) && 1296 "Cannot set target flags on target-independent jump tables"); 1297 unsigned Opc = isTarget ? ISD::TargetJumpTable : ISD::JumpTable; 1298 FoldingSetNodeID ID; 1299 AddNodeIDNode(ID, Opc, getVTList(VT), None); 1300 ID.AddInteger(JTI); 1301 ID.AddInteger(TargetFlags); 1302 void *IP = nullptr; 1303 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1304 return SDValue(E, 0); 1305 1306 SDNode *N = new (NodeAllocator) JumpTableSDNode(JTI, VT, isTarget, 1307 TargetFlags); 1308 CSEMap.InsertNode(N, IP); 1309 InsertNode(N); 1310 return SDValue(N, 0); 1311 } 1312 1313 SDValue SelectionDAG::getConstantPool(const Constant *C, EVT VT, 1314 unsigned Alignment, int Offset, 1315 bool isTarget, 1316 unsigned char TargetFlags) { 1317 assert((TargetFlags == 0 || isTarget) && 1318 "Cannot set target flags on target-independent globals"); 1319 if (Alignment == 0) 1320 Alignment = TM.getSubtargetImpl() 1321 ->getTargetLowering() 1322 ->getDataLayout() 1323 ->getPrefTypeAlignment(C->getType()); 1324 unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool; 1325 FoldingSetNodeID ID; 1326 AddNodeIDNode(ID, Opc, getVTList(VT), None); 1327 ID.AddInteger(Alignment); 1328 ID.AddInteger(Offset); 1329 ID.AddPointer(C); 1330 ID.AddInteger(TargetFlags); 1331 void *IP = nullptr; 1332 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1333 return SDValue(E, 0); 1334 1335 SDNode *N = new (NodeAllocator) ConstantPoolSDNode(isTarget, C, VT, Offset, 1336 Alignment, TargetFlags); 1337 CSEMap.InsertNode(N, IP); 1338 InsertNode(N); 1339 return SDValue(N, 0); 1340 } 1341 1342 1343 SDValue SelectionDAG::getConstantPool(MachineConstantPoolValue *C, EVT VT, 1344 unsigned Alignment, int Offset, 1345 bool isTarget, 1346 unsigned char TargetFlags) { 1347 assert((TargetFlags == 0 || isTarget) && 1348 "Cannot set target flags on target-independent globals"); 1349 if (Alignment == 0) 1350 Alignment = TM.getSubtargetImpl() 1351 ->getTargetLowering() 1352 ->getDataLayout() 1353 ->getPrefTypeAlignment(C->getType()); 1354 unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool; 1355 FoldingSetNodeID ID; 1356 AddNodeIDNode(ID, Opc, getVTList(VT), None); 1357 ID.AddInteger(Alignment); 1358 ID.AddInteger(Offset); 1359 C->addSelectionDAGCSEId(ID); 1360 ID.AddInteger(TargetFlags); 1361 void *IP = nullptr; 1362 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1363 return SDValue(E, 0); 1364 1365 SDNode *N = new (NodeAllocator) ConstantPoolSDNode(isTarget, C, VT, Offset, 1366 Alignment, TargetFlags); 1367 CSEMap.InsertNode(N, IP); 1368 InsertNode(N); 1369 return SDValue(N, 0); 1370 } 1371 1372 SDValue SelectionDAG::getTargetIndex(int Index, EVT VT, int64_t Offset, 1373 unsigned char TargetFlags) { 1374 FoldingSetNodeID ID; 1375 AddNodeIDNode(ID, ISD::TargetIndex, getVTList(VT), None); 1376 ID.AddInteger(Index); 1377 ID.AddInteger(Offset); 1378 ID.AddInteger(TargetFlags); 1379 void *IP = nullptr; 1380 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1381 return SDValue(E, 0); 1382 1383 SDNode *N = new (NodeAllocator) TargetIndexSDNode(Index, VT, Offset, 1384 TargetFlags); 1385 CSEMap.InsertNode(N, IP); 1386 InsertNode(N); 1387 return SDValue(N, 0); 1388 } 1389 1390 SDValue SelectionDAG::getBasicBlock(MachineBasicBlock *MBB) { 1391 FoldingSetNodeID ID; 1392 AddNodeIDNode(ID, ISD::BasicBlock, getVTList(MVT::Other), None); 1393 ID.AddPointer(MBB); 1394 void *IP = nullptr; 1395 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1396 return SDValue(E, 0); 1397 1398 SDNode *N = new (NodeAllocator) BasicBlockSDNode(MBB); 1399 CSEMap.InsertNode(N, IP); 1400 InsertNode(N); 1401 return SDValue(N, 0); 1402 } 1403 1404 SDValue SelectionDAG::getValueType(EVT VT) { 1405 if (VT.isSimple() && (unsigned)VT.getSimpleVT().SimpleTy >= 1406 ValueTypeNodes.size()) 1407 ValueTypeNodes.resize(VT.getSimpleVT().SimpleTy+1); 1408 1409 SDNode *&N = VT.isExtended() ? 1410 ExtendedValueTypeNodes[VT] : ValueTypeNodes[VT.getSimpleVT().SimpleTy]; 1411 1412 if (N) return SDValue(N, 0); 1413 N = new (NodeAllocator) VTSDNode(VT); 1414 InsertNode(N); 1415 return SDValue(N, 0); 1416 } 1417 1418 SDValue SelectionDAG::getExternalSymbol(const char *Sym, EVT VT) { 1419 SDNode *&N = ExternalSymbols[Sym]; 1420 if (N) return SDValue(N, 0); 1421 N = new (NodeAllocator) ExternalSymbolSDNode(false, Sym, 0, VT); 1422 InsertNode(N); 1423 return SDValue(N, 0); 1424 } 1425 1426 SDValue SelectionDAG::getTargetExternalSymbol(const char *Sym, EVT VT, 1427 unsigned char TargetFlags) { 1428 SDNode *&N = 1429 TargetExternalSymbols[std::pair<std::string,unsigned char>(Sym, 1430 TargetFlags)]; 1431 if (N) return SDValue(N, 0); 1432 N = new (NodeAllocator) ExternalSymbolSDNode(true, Sym, TargetFlags, VT); 1433 InsertNode(N); 1434 return SDValue(N, 0); 1435 } 1436 1437 SDValue SelectionDAG::getCondCode(ISD::CondCode Cond) { 1438 if ((unsigned)Cond >= CondCodeNodes.size()) 1439 CondCodeNodes.resize(Cond+1); 1440 1441 if (!CondCodeNodes[Cond]) { 1442 CondCodeSDNode *N = new (NodeAllocator) CondCodeSDNode(Cond); 1443 CondCodeNodes[Cond] = N; 1444 InsertNode(N); 1445 } 1446 1447 return SDValue(CondCodeNodes[Cond], 0); 1448 } 1449 1450 // commuteShuffle - swaps the values of N1 and N2, and swaps all indices in 1451 // the shuffle mask M that point at N1 to point at N2, and indices that point 1452 // N2 to point at N1. 1453 static void commuteShuffle(SDValue &N1, SDValue &N2, SmallVectorImpl<int> &M) { 1454 std::swap(N1, N2); 1455 int NElts = M.size(); 1456 for (int i = 0; i != NElts; ++i) { 1457 if (M[i] >= NElts) 1458 M[i] -= NElts; 1459 else if (M[i] >= 0) 1460 M[i] += NElts; 1461 } 1462 } 1463 1464 SDValue SelectionDAG::getVectorShuffle(EVT VT, SDLoc dl, SDValue N1, 1465 SDValue N2, const int *Mask) { 1466 assert(VT == N1.getValueType() && VT == N2.getValueType() && 1467 "Invalid VECTOR_SHUFFLE"); 1468 1469 // Canonicalize shuffle undef, undef -> undef 1470 if (N1.getOpcode() == ISD::UNDEF && N2.getOpcode() == ISD::UNDEF) 1471 return getUNDEF(VT); 1472 1473 // Validate that all indices in Mask are within the range of the elements 1474 // input to the shuffle. 1475 unsigned NElts = VT.getVectorNumElements(); 1476 SmallVector<int, 8> MaskVec; 1477 for (unsigned i = 0; i != NElts; ++i) { 1478 assert(Mask[i] < (int)(NElts * 2) && "Index out of range"); 1479 MaskVec.push_back(Mask[i]); 1480 } 1481 1482 // Canonicalize shuffle v, v -> v, undef 1483 if (N1 == N2) { 1484 N2 = getUNDEF(VT); 1485 for (unsigned i = 0; i != NElts; ++i) 1486 if (MaskVec[i] >= (int)NElts) MaskVec[i] -= NElts; 1487 } 1488 1489 // Canonicalize shuffle undef, v -> v, undef. Commute the shuffle mask. 1490 if (N1.getOpcode() == ISD::UNDEF) 1491 commuteShuffle(N1, N2, MaskVec); 1492 1493 // Canonicalize all index into lhs, -> shuffle lhs, undef 1494 // Canonicalize all index into rhs, -> shuffle rhs, undef 1495 bool AllLHS = true, AllRHS = true; 1496 bool N2Undef = N2.getOpcode() == ISD::UNDEF; 1497 for (unsigned i = 0; i != NElts; ++i) { 1498 if (MaskVec[i] >= (int)NElts) { 1499 if (N2Undef) 1500 MaskVec[i] = -1; 1501 else 1502 AllLHS = false; 1503 } else if (MaskVec[i] >= 0) { 1504 AllRHS = false; 1505 } 1506 } 1507 if (AllLHS && AllRHS) 1508 return getUNDEF(VT); 1509 if (AllLHS && !N2Undef) 1510 N2 = getUNDEF(VT); 1511 if (AllRHS) { 1512 N1 = getUNDEF(VT); 1513 commuteShuffle(N1, N2, MaskVec); 1514 } 1515 // Reset our undef status after accounting for the mask. 1516 N2Undef = N2.getOpcode() == ISD::UNDEF; 1517 // Re-check whether both sides ended up undef. 1518 if (N1.getOpcode() == ISD::UNDEF && N2Undef) 1519 return getUNDEF(VT); 1520 1521 // If Identity shuffle return that node. 1522 bool Identity = true; 1523 for (unsigned i = 0; i != NElts; ++i) { 1524 if (MaskVec[i] >= 0 && MaskVec[i] != (int)i) Identity = false; 1525 } 1526 if (Identity && NElts) 1527 return N1; 1528 1529 // Shuffling a constant splat doesn't change the result. 1530 if (N2Undef) { 1531 SDValue V = N1; 1532 1533 // Look through any bitcasts. We check that these don't change the number 1534 // (and size) of elements and just changes their types. 1535 while (V.getOpcode() == ISD::BITCAST) 1536 V = V->getOperand(0); 1537 1538 // A splat should always show up as a build vector node. 1539 if (auto *BV = dyn_cast<BuildVectorSDNode>(V)) { 1540 BitVector UndefElements; 1541 SDValue Splat = BV->getSplatValue(&UndefElements); 1542 // If this is a splat of an undef, shuffling it is also undef. 1543 if (Splat && Splat.getOpcode() == ISD::UNDEF) 1544 return getUNDEF(VT); 1545 1546 // We only have a splat which can skip shuffles if there is a splatted 1547 // value and no undef lanes rearranged by the shuffle. 1548 if (Splat && UndefElements.none()) { 1549 // Splat of <x, x, ..., x>, return <x, x, ..., x>, provided that the 1550 // number of elements match or the value splatted is a zero constant. 1551 if (V.getValueType().getVectorNumElements() == 1552 VT.getVectorNumElements()) 1553 return N1; 1554 if (auto *C = dyn_cast<ConstantSDNode>(Splat)) 1555 if (C->isNullValue()) 1556 return N1; 1557 } 1558 } 1559 } 1560 1561 FoldingSetNodeID ID; 1562 SDValue Ops[2] = { N1, N2 }; 1563 AddNodeIDNode(ID, ISD::VECTOR_SHUFFLE, getVTList(VT), Ops); 1564 for (unsigned i = 0; i != NElts; ++i) 1565 ID.AddInteger(MaskVec[i]); 1566 1567 void* IP = nullptr; 1568 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1569 return SDValue(E, 0); 1570 1571 // Allocate the mask array for the node out of the BumpPtrAllocator, since 1572 // SDNode doesn't have access to it. This memory will be "leaked" when 1573 // the node is deallocated, but recovered when the NodeAllocator is released. 1574 int *MaskAlloc = OperandAllocator.Allocate<int>(NElts); 1575 memcpy(MaskAlloc, &MaskVec[0], NElts * sizeof(int)); 1576 1577 ShuffleVectorSDNode *N = 1578 new (NodeAllocator) ShuffleVectorSDNode(VT, dl.getIROrder(), 1579 dl.getDebugLoc(), N1, N2, 1580 MaskAlloc); 1581 CSEMap.InsertNode(N, IP); 1582 InsertNode(N); 1583 return SDValue(N, 0); 1584 } 1585 1586 SDValue SelectionDAG::getCommutedVectorShuffle(const ShuffleVectorSDNode &SV) { 1587 MVT VT = SV.getSimpleValueType(0); 1588 unsigned NumElems = VT.getVectorNumElements(); 1589 SmallVector<int, 8> MaskVec; 1590 1591 for (unsigned i = 0; i != NumElems; ++i) { 1592 int Idx = SV.getMaskElt(i); 1593 if (Idx >= 0) { 1594 if (Idx < (int)NumElems) 1595 Idx += NumElems; 1596 else 1597 Idx -= NumElems; 1598 } 1599 MaskVec.push_back(Idx); 1600 } 1601 1602 SDValue Op0 = SV.getOperand(0); 1603 SDValue Op1 = SV.getOperand(1); 1604 return getVectorShuffle(VT, SDLoc(&SV), Op1, Op0, &MaskVec[0]); 1605 } 1606 1607 SDValue SelectionDAG::getConvertRndSat(EVT VT, SDLoc dl, 1608 SDValue Val, SDValue DTy, 1609 SDValue STy, SDValue Rnd, SDValue Sat, 1610 ISD::CvtCode Code) { 1611 // If the src and dest types are the same and the conversion is between 1612 // integer types of the same sign or two floats, no conversion is necessary. 1613 if (DTy == STy && 1614 (Code == ISD::CVT_UU || Code == ISD::CVT_SS || Code == ISD::CVT_FF)) 1615 return Val; 1616 1617 FoldingSetNodeID ID; 1618 SDValue Ops[] = { Val, DTy, STy, Rnd, Sat }; 1619 AddNodeIDNode(ID, ISD::CONVERT_RNDSAT, getVTList(VT), Ops); 1620 void* IP = nullptr; 1621 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1622 return SDValue(E, 0); 1623 1624 CvtRndSatSDNode *N = new (NodeAllocator) CvtRndSatSDNode(VT, dl.getIROrder(), 1625 dl.getDebugLoc(), 1626 Ops, Code); 1627 CSEMap.InsertNode(N, IP); 1628 InsertNode(N); 1629 return SDValue(N, 0); 1630 } 1631 1632 SDValue SelectionDAG::getRegister(unsigned RegNo, EVT VT) { 1633 FoldingSetNodeID ID; 1634 AddNodeIDNode(ID, ISD::Register, getVTList(VT), None); 1635 ID.AddInteger(RegNo); 1636 void *IP = nullptr; 1637 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1638 return SDValue(E, 0); 1639 1640 SDNode *N = new (NodeAllocator) RegisterSDNode(RegNo, VT); 1641 CSEMap.InsertNode(N, IP); 1642 InsertNode(N); 1643 return SDValue(N, 0); 1644 } 1645 1646 SDValue SelectionDAG::getRegisterMask(const uint32_t *RegMask) { 1647 FoldingSetNodeID ID; 1648 AddNodeIDNode(ID, ISD::RegisterMask, getVTList(MVT::Untyped), None); 1649 ID.AddPointer(RegMask); 1650 void *IP = nullptr; 1651 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1652 return SDValue(E, 0); 1653 1654 SDNode *N = new (NodeAllocator) RegisterMaskSDNode(RegMask); 1655 CSEMap.InsertNode(N, IP); 1656 InsertNode(N); 1657 return SDValue(N, 0); 1658 } 1659 1660 SDValue SelectionDAG::getEHLabel(SDLoc dl, SDValue Root, MCSymbol *Label) { 1661 FoldingSetNodeID ID; 1662 SDValue Ops[] = { Root }; 1663 AddNodeIDNode(ID, ISD::EH_LABEL, getVTList(MVT::Other), Ops); 1664 ID.AddPointer(Label); 1665 void *IP = nullptr; 1666 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1667 return SDValue(E, 0); 1668 1669 SDNode *N = new (NodeAllocator) EHLabelSDNode(dl.getIROrder(), 1670 dl.getDebugLoc(), Root, Label); 1671 CSEMap.InsertNode(N, IP); 1672 InsertNode(N); 1673 return SDValue(N, 0); 1674 } 1675 1676 1677 SDValue SelectionDAG::getBlockAddress(const BlockAddress *BA, EVT VT, 1678 int64_t Offset, 1679 bool isTarget, 1680 unsigned char TargetFlags) { 1681 unsigned Opc = isTarget ? ISD::TargetBlockAddress : ISD::BlockAddress; 1682 1683 FoldingSetNodeID ID; 1684 AddNodeIDNode(ID, Opc, getVTList(VT), None); 1685 ID.AddPointer(BA); 1686 ID.AddInteger(Offset); 1687 ID.AddInteger(TargetFlags); 1688 void *IP = nullptr; 1689 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1690 return SDValue(E, 0); 1691 1692 SDNode *N = new (NodeAllocator) BlockAddressSDNode(Opc, VT, BA, Offset, 1693 TargetFlags); 1694 CSEMap.InsertNode(N, IP); 1695 InsertNode(N); 1696 return SDValue(N, 0); 1697 } 1698 1699 SDValue SelectionDAG::getSrcValue(const Value *V) { 1700 assert((!V || V->getType()->isPointerTy()) && 1701 "SrcValue is not a pointer?"); 1702 1703 FoldingSetNodeID ID; 1704 AddNodeIDNode(ID, ISD::SRCVALUE, getVTList(MVT::Other), None); 1705 ID.AddPointer(V); 1706 1707 void *IP = nullptr; 1708 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1709 return SDValue(E, 0); 1710 1711 SDNode *N = new (NodeAllocator) SrcValueSDNode(V); 1712 CSEMap.InsertNode(N, IP); 1713 InsertNode(N); 1714 return SDValue(N, 0); 1715 } 1716 1717 /// getMDNode - Return an MDNodeSDNode which holds an MDNode. 1718 SDValue SelectionDAG::getMDNode(const MDNode *MD) { 1719 FoldingSetNodeID ID; 1720 AddNodeIDNode(ID, ISD::MDNODE_SDNODE, getVTList(MVT::Other), None); 1721 ID.AddPointer(MD); 1722 1723 void *IP = nullptr; 1724 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1725 return SDValue(E, 0); 1726 1727 SDNode *N = new (NodeAllocator) MDNodeSDNode(MD); 1728 CSEMap.InsertNode(N, IP); 1729 InsertNode(N); 1730 return SDValue(N, 0); 1731 } 1732 1733 /// getAddrSpaceCast - Return an AddrSpaceCastSDNode. 1734 SDValue SelectionDAG::getAddrSpaceCast(SDLoc dl, EVT VT, SDValue Ptr, 1735 unsigned SrcAS, unsigned DestAS) { 1736 SDValue Ops[] = {Ptr}; 1737 FoldingSetNodeID ID; 1738 AddNodeIDNode(ID, ISD::ADDRSPACECAST, getVTList(VT), Ops); 1739 ID.AddInteger(SrcAS); 1740 ID.AddInteger(DestAS); 1741 1742 void *IP = nullptr; 1743 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 1744 return SDValue(E, 0); 1745 1746 SDNode *N = new (NodeAllocator) AddrSpaceCastSDNode(dl.getIROrder(), 1747 dl.getDebugLoc(), 1748 VT, Ptr, SrcAS, DestAS); 1749 CSEMap.InsertNode(N, IP); 1750 InsertNode(N); 1751 return SDValue(N, 0); 1752 } 1753 1754 /// getShiftAmountOperand - Return the specified value casted to 1755 /// the target's desired shift amount type. 1756 SDValue SelectionDAG::getShiftAmountOperand(EVT LHSTy, SDValue Op) { 1757 EVT OpTy = Op.getValueType(); 1758 EVT ShTy = 1759 TM.getSubtargetImpl()->getTargetLowering()->getShiftAmountTy(LHSTy); 1760 if (OpTy == ShTy || OpTy.isVector()) return Op; 1761 1762 ISD::NodeType Opcode = OpTy.bitsGT(ShTy) ? ISD::TRUNCATE : ISD::ZERO_EXTEND; 1763 return getNode(Opcode, SDLoc(Op), ShTy, Op); 1764 } 1765 1766 /// CreateStackTemporary - Create a stack temporary, suitable for holding the 1767 /// specified value type. 1768 SDValue SelectionDAG::CreateStackTemporary(EVT VT, unsigned minAlign) { 1769 MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo(); 1770 unsigned ByteSize = VT.getStoreSize(); 1771 Type *Ty = VT.getTypeForEVT(*getContext()); 1772 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 1773 unsigned StackAlign = 1774 std::max((unsigned)TLI->getDataLayout()->getPrefTypeAlignment(Ty), minAlign); 1775 1776 int FrameIdx = FrameInfo->CreateStackObject(ByteSize, StackAlign, false); 1777 return getFrameIndex(FrameIdx, TLI->getPointerTy()); 1778 } 1779 1780 /// CreateStackTemporary - Create a stack temporary suitable for holding 1781 /// either of the specified value types. 1782 SDValue SelectionDAG::CreateStackTemporary(EVT VT1, EVT VT2) { 1783 unsigned Bytes = std::max(VT1.getStoreSizeInBits(), 1784 VT2.getStoreSizeInBits())/8; 1785 Type *Ty1 = VT1.getTypeForEVT(*getContext()); 1786 Type *Ty2 = VT2.getTypeForEVT(*getContext()); 1787 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 1788 const DataLayout *TD = TLI->getDataLayout(); 1789 unsigned Align = std::max(TD->getPrefTypeAlignment(Ty1), 1790 TD->getPrefTypeAlignment(Ty2)); 1791 1792 MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo(); 1793 int FrameIdx = FrameInfo->CreateStackObject(Bytes, Align, false); 1794 return getFrameIndex(FrameIdx, TLI->getPointerTy()); 1795 } 1796 1797 SDValue SelectionDAG::FoldSetCC(EVT VT, SDValue N1, 1798 SDValue N2, ISD::CondCode Cond, SDLoc dl) { 1799 // These setcc operations always fold. 1800 switch (Cond) { 1801 default: break; 1802 case ISD::SETFALSE: 1803 case ISD::SETFALSE2: return getConstant(0, VT); 1804 case ISD::SETTRUE: 1805 case ISD::SETTRUE2: { 1806 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 1807 TargetLowering::BooleanContent Cnt = 1808 TLI->getBooleanContents(N1->getValueType(0)); 1809 return getConstant( 1810 Cnt == TargetLowering::ZeroOrNegativeOneBooleanContent ? -1ULL : 1, VT); 1811 } 1812 1813 case ISD::SETOEQ: 1814 case ISD::SETOGT: 1815 case ISD::SETOGE: 1816 case ISD::SETOLT: 1817 case ISD::SETOLE: 1818 case ISD::SETONE: 1819 case ISD::SETO: 1820 case ISD::SETUO: 1821 case ISD::SETUEQ: 1822 case ISD::SETUNE: 1823 assert(!N1.getValueType().isInteger() && "Illegal setcc for integer!"); 1824 break; 1825 } 1826 1827 if (ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.getNode())) { 1828 const APInt &C2 = N2C->getAPIntValue(); 1829 if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode())) { 1830 const APInt &C1 = N1C->getAPIntValue(); 1831 1832 switch (Cond) { 1833 default: llvm_unreachable("Unknown integer setcc!"); 1834 case ISD::SETEQ: return getConstant(C1 == C2, VT); 1835 case ISD::SETNE: return getConstant(C1 != C2, VT); 1836 case ISD::SETULT: return getConstant(C1.ult(C2), VT); 1837 case ISD::SETUGT: return getConstant(C1.ugt(C2), VT); 1838 case ISD::SETULE: return getConstant(C1.ule(C2), VT); 1839 case ISD::SETUGE: return getConstant(C1.uge(C2), VT); 1840 case ISD::SETLT: return getConstant(C1.slt(C2), VT); 1841 case ISD::SETGT: return getConstant(C1.sgt(C2), VT); 1842 case ISD::SETLE: return getConstant(C1.sle(C2), VT); 1843 case ISD::SETGE: return getConstant(C1.sge(C2), VT); 1844 } 1845 } 1846 } 1847 if (ConstantFPSDNode *N1C = dyn_cast<ConstantFPSDNode>(N1.getNode())) { 1848 if (ConstantFPSDNode *N2C = dyn_cast<ConstantFPSDNode>(N2.getNode())) { 1849 APFloat::cmpResult R = N1C->getValueAPF().compare(N2C->getValueAPF()); 1850 switch (Cond) { 1851 default: break; 1852 case ISD::SETEQ: if (R==APFloat::cmpUnordered) 1853 return getUNDEF(VT); 1854 // fall through 1855 case ISD::SETOEQ: return getConstant(R==APFloat::cmpEqual, VT); 1856 case ISD::SETNE: if (R==APFloat::cmpUnordered) 1857 return getUNDEF(VT); 1858 // fall through 1859 case ISD::SETONE: return getConstant(R==APFloat::cmpGreaterThan || 1860 R==APFloat::cmpLessThan, VT); 1861 case ISD::SETLT: if (R==APFloat::cmpUnordered) 1862 return getUNDEF(VT); 1863 // fall through 1864 case ISD::SETOLT: return getConstant(R==APFloat::cmpLessThan, VT); 1865 case ISD::SETGT: if (R==APFloat::cmpUnordered) 1866 return getUNDEF(VT); 1867 // fall through 1868 case ISD::SETOGT: return getConstant(R==APFloat::cmpGreaterThan, VT); 1869 case ISD::SETLE: if (R==APFloat::cmpUnordered) 1870 return getUNDEF(VT); 1871 // fall through 1872 case ISD::SETOLE: return getConstant(R==APFloat::cmpLessThan || 1873 R==APFloat::cmpEqual, VT); 1874 case ISD::SETGE: if (R==APFloat::cmpUnordered) 1875 return getUNDEF(VT); 1876 // fall through 1877 case ISD::SETOGE: return getConstant(R==APFloat::cmpGreaterThan || 1878 R==APFloat::cmpEqual, VT); 1879 case ISD::SETO: return getConstant(R!=APFloat::cmpUnordered, VT); 1880 case ISD::SETUO: return getConstant(R==APFloat::cmpUnordered, VT); 1881 case ISD::SETUEQ: return getConstant(R==APFloat::cmpUnordered || 1882 R==APFloat::cmpEqual, VT); 1883 case ISD::SETUNE: return getConstant(R!=APFloat::cmpEqual, VT); 1884 case ISD::SETULT: return getConstant(R==APFloat::cmpUnordered || 1885 R==APFloat::cmpLessThan, VT); 1886 case ISD::SETUGT: return getConstant(R==APFloat::cmpGreaterThan || 1887 R==APFloat::cmpUnordered, VT); 1888 case ISD::SETULE: return getConstant(R!=APFloat::cmpGreaterThan, VT); 1889 case ISD::SETUGE: return getConstant(R!=APFloat::cmpLessThan, VT); 1890 } 1891 } else { 1892 // Ensure that the constant occurs on the RHS. 1893 ISD::CondCode SwappedCond = ISD::getSetCCSwappedOperands(Cond); 1894 MVT CompVT = N1.getValueType().getSimpleVT(); 1895 if (!TM.getSubtargetImpl()->getTargetLowering()->isCondCodeLegal( 1896 SwappedCond, CompVT)) 1897 return SDValue(); 1898 1899 return getSetCC(dl, VT, N2, N1, SwappedCond); 1900 } 1901 } 1902 1903 // Could not fold it. 1904 return SDValue(); 1905 } 1906 1907 /// SignBitIsZero - Return true if the sign bit of Op is known to be zero. We 1908 /// use this predicate to simplify operations downstream. 1909 bool SelectionDAG::SignBitIsZero(SDValue Op, unsigned Depth) const { 1910 // This predicate is not safe for vector operations. 1911 if (Op.getValueType().isVector()) 1912 return false; 1913 1914 unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits(); 1915 return MaskedValueIsZero(Op, APInt::getSignBit(BitWidth), Depth); 1916 } 1917 1918 /// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero. We use 1919 /// this predicate to simplify operations downstream. Mask is known to be zero 1920 /// for bits that V cannot have. 1921 bool SelectionDAG::MaskedValueIsZero(SDValue Op, const APInt &Mask, 1922 unsigned Depth) const { 1923 APInt KnownZero, KnownOne; 1924 computeKnownBits(Op, KnownZero, KnownOne, Depth); 1925 return (KnownZero & Mask) == Mask; 1926 } 1927 1928 /// Determine which bits of Op are known to be either zero or one and return 1929 /// them in the KnownZero/KnownOne bitsets. 1930 void SelectionDAG::computeKnownBits(SDValue Op, APInt &KnownZero, 1931 APInt &KnownOne, unsigned Depth) const { 1932 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 1933 unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits(); 1934 1935 KnownZero = KnownOne = APInt(BitWidth, 0); // Don't know anything. 1936 if (Depth == 6) 1937 return; // Limit search depth. 1938 1939 APInt KnownZero2, KnownOne2; 1940 1941 switch (Op.getOpcode()) { 1942 case ISD::Constant: 1943 // We know all of the bits for a constant! 1944 KnownOne = cast<ConstantSDNode>(Op)->getAPIntValue(); 1945 KnownZero = ~KnownOne; 1946 break; 1947 case ISD::AND: 1948 // If either the LHS or the RHS are Zero, the result is zero. 1949 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 1950 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 1951 1952 // Output known-1 bits are only known if set in both the LHS & RHS. 1953 KnownOne &= KnownOne2; 1954 // Output known-0 are known to be clear if zero in either the LHS | RHS. 1955 KnownZero |= KnownZero2; 1956 break; 1957 case ISD::OR: 1958 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 1959 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 1960 1961 // Output known-0 bits are only known if clear in both the LHS & RHS. 1962 KnownZero &= KnownZero2; 1963 // Output known-1 are known to be set if set in either the LHS | RHS. 1964 KnownOne |= KnownOne2; 1965 break; 1966 case ISD::XOR: { 1967 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 1968 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 1969 1970 // Output known-0 bits are known if clear or set in both the LHS & RHS. 1971 APInt KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2); 1972 // Output known-1 are known to be set if set in only one of the LHS, RHS. 1973 KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2); 1974 KnownZero = KnownZeroOut; 1975 break; 1976 } 1977 case ISD::MUL: { 1978 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 1979 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 1980 1981 // If low bits are zero in either operand, output low known-0 bits. 1982 // Also compute a conserative estimate for high known-0 bits. 1983 // More trickiness is possible, but this is sufficient for the 1984 // interesting case of alignment computation. 1985 KnownOne.clearAllBits(); 1986 unsigned TrailZ = KnownZero.countTrailingOnes() + 1987 KnownZero2.countTrailingOnes(); 1988 unsigned LeadZ = std::max(KnownZero.countLeadingOnes() + 1989 KnownZero2.countLeadingOnes(), 1990 BitWidth) - BitWidth; 1991 1992 TrailZ = std::min(TrailZ, BitWidth); 1993 LeadZ = std::min(LeadZ, BitWidth); 1994 KnownZero = APInt::getLowBitsSet(BitWidth, TrailZ) | 1995 APInt::getHighBitsSet(BitWidth, LeadZ); 1996 break; 1997 } 1998 case ISD::UDIV: { 1999 // For the purposes of computing leading zeros we can conservatively 2000 // treat a udiv as a logical right shift by the power of 2 known to 2001 // be less than the denominator. 2002 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 2003 unsigned LeadZ = KnownZero2.countLeadingOnes(); 2004 2005 KnownOne2.clearAllBits(); 2006 KnownZero2.clearAllBits(); 2007 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2008 unsigned RHSUnknownLeadingOnes = KnownOne2.countLeadingZeros(); 2009 if (RHSUnknownLeadingOnes != BitWidth) 2010 LeadZ = std::min(BitWidth, 2011 LeadZ + BitWidth - RHSUnknownLeadingOnes - 1); 2012 2013 KnownZero = APInt::getHighBitsSet(BitWidth, LeadZ); 2014 break; 2015 } 2016 case ISD::SELECT: 2017 computeKnownBits(Op.getOperand(2), KnownZero, KnownOne, Depth+1); 2018 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2019 2020 // Only known if known in both the LHS and RHS. 2021 KnownOne &= KnownOne2; 2022 KnownZero &= KnownZero2; 2023 break; 2024 case ISD::SELECT_CC: 2025 computeKnownBits(Op.getOperand(3), KnownZero, KnownOne, Depth+1); 2026 computeKnownBits(Op.getOperand(2), KnownZero2, KnownOne2, Depth+1); 2027 2028 // Only known if known in both the LHS and RHS. 2029 KnownOne &= KnownOne2; 2030 KnownZero &= KnownZero2; 2031 break; 2032 case ISD::SADDO: 2033 case ISD::UADDO: 2034 case ISD::SSUBO: 2035 case ISD::USUBO: 2036 case ISD::SMULO: 2037 case ISD::UMULO: 2038 if (Op.getResNo() != 1) 2039 break; 2040 // The boolean result conforms to getBooleanContents. 2041 // If we know the result of a setcc has the top bits zero, use this info. 2042 // We know that we have an integer-based boolean since these operations 2043 // are only available for integer. 2044 if (TLI->getBooleanContents(Op.getValueType().isVector(), false) == 2045 TargetLowering::ZeroOrOneBooleanContent && 2046 BitWidth > 1) 2047 KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1); 2048 break; 2049 case ISD::SETCC: 2050 // If we know the result of a setcc has the top bits zero, use this info. 2051 if (TLI->getBooleanContents(Op.getOperand(0).getValueType()) == 2052 TargetLowering::ZeroOrOneBooleanContent && 2053 BitWidth > 1) 2054 KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1); 2055 break; 2056 case ISD::SHL: 2057 // (shl X, C1) & C2 == 0 iff (X & C2 >>u C1) == 0 2058 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2059 unsigned ShAmt = SA->getZExtValue(); 2060 2061 // If the shift count is an invalid immediate, don't do anything. 2062 if (ShAmt >= BitWidth) 2063 break; 2064 2065 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2066 KnownZero <<= ShAmt; 2067 KnownOne <<= ShAmt; 2068 // low bits known zero. 2069 KnownZero |= APInt::getLowBitsSet(BitWidth, ShAmt); 2070 } 2071 break; 2072 case ISD::SRL: 2073 // (ushr X, C1) & C2 == 0 iff (-1 >> C1) & C2 == 0 2074 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2075 unsigned ShAmt = SA->getZExtValue(); 2076 2077 // If the shift count is an invalid immediate, don't do anything. 2078 if (ShAmt >= BitWidth) 2079 break; 2080 2081 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2082 KnownZero = KnownZero.lshr(ShAmt); 2083 KnownOne = KnownOne.lshr(ShAmt); 2084 2085 APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt); 2086 KnownZero |= HighBits; // High bits known zero. 2087 } 2088 break; 2089 case ISD::SRA: 2090 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2091 unsigned ShAmt = SA->getZExtValue(); 2092 2093 // If the shift count is an invalid immediate, don't do anything. 2094 if (ShAmt >= BitWidth) 2095 break; 2096 2097 // If any of the demanded bits are produced by the sign extension, we also 2098 // demand the input sign bit. 2099 APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt); 2100 2101 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2102 KnownZero = KnownZero.lshr(ShAmt); 2103 KnownOne = KnownOne.lshr(ShAmt); 2104 2105 // Handle the sign bits. 2106 APInt SignBit = APInt::getSignBit(BitWidth); 2107 SignBit = SignBit.lshr(ShAmt); // Adjust to where it is now in the mask. 2108 2109 if (KnownZero.intersects(SignBit)) { 2110 KnownZero |= HighBits; // New bits are known zero. 2111 } else if (KnownOne.intersects(SignBit)) { 2112 KnownOne |= HighBits; // New bits are known one. 2113 } 2114 } 2115 break; 2116 case ISD::SIGN_EXTEND_INREG: { 2117 EVT EVT = cast<VTSDNode>(Op.getOperand(1))->getVT(); 2118 unsigned EBits = EVT.getScalarType().getSizeInBits(); 2119 2120 // Sign extension. Compute the demanded bits in the result that are not 2121 // present in the input. 2122 APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - EBits); 2123 2124 APInt InSignBit = APInt::getSignBit(EBits); 2125 APInt InputDemandedBits = APInt::getLowBitsSet(BitWidth, EBits); 2126 2127 // If the sign extended bits are demanded, we know that the sign 2128 // bit is demanded. 2129 InSignBit = InSignBit.zext(BitWidth); 2130 if (NewBits.getBoolValue()) 2131 InputDemandedBits |= InSignBit; 2132 2133 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2134 KnownOne &= InputDemandedBits; 2135 KnownZero &= InputDemandedBits; 2136 2137 // If the sign bit of the input is known set or clear, then we know the 2138 // top bits of the result. 2139 if (KnownZero.intersects(InSignBit)) { // Input sign bit known clear 2140 KnownZero |= NewBits; 2141 KnownOne &= ~NewBits; 2142 } else if (KnownOne.intersects(InSignBit)) { // Input sign bit known set 2143 KnownOne |= NewBits; 2144 KnownZero &= ~NewBits; 2145 } else { // Input sign bit unknown 2146 KnownZero &= ~NewBits; 2147 KnownOne &= ~NewBits; 2148 } 2149 break; 2150 } 2151 case ISD::CTTZ: 2152 case ISD::CTTZ_ZERO_UNDEF: 2153 case ISD::CTLZ: 2154 case ISD::CTLZ_ZERO_UNDEF: 2155 case ISD::CTPOP: { 2156 unsigned LowBits = Log2_32(BitWidth)+1; 2157 KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - LowBits); 2158 KnownOne.clearAllBits(); 2159 break; 2160 } 2161 case ISD::LOAD: { 2162 LoadSDNode *LD = cast<LoadSDNode>(Op); 2163 // If this is a ZEXTLoad and we are looking at the loaded value. 2164 if (ISD::isZEXTLoad(Op.getNode()) && Op.getResNo() == 0) { 2165 EVT VT = LD->getMemoryVT(); 2166 unsigned MemBits = VT.getScalarType().getSizeInBits(); 2167 KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - MemBits); 2168 } else if (const MDNode *Ranges = LD->getRanges()) { 2169 computeKnownBitsFromRangeMetadata(*Ranges, KnownZero); 2170 } 2171 break; 2172 } 2173 case ISD::ZERO_EXTEND: { 2174 EVT InVT = Op.getOperand(0).getValueType(); 2175 unsigned InBits = InVT.getScalarType().getSizeInBits(); 2176 APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - InBits); 2177 KnownZero = KnownZero.trunc(InBits); 2178 KnownOne = KnownOne.trunc(InBits); 2179 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2180 KnownZero = KnownZero.zext(BitWidth); 2181 KnownOne = KnownOne.zext(BitWidth); 2182 KnownZero |= NewBits; 2183 break; 2184 } 2185 case ISD::SIGN_EXTEND: { 2186 EVT InVT = Op.getOperand(0).getValueType(); 2187 unsigned InBits = InVT.getScalarType().getSizeInBits(); 2188 APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - InBits); 2189 2190 KnownZero = KnownZero.trunc(InBits); 2191 KnownOne = KnownOne.trunc(InBits); 2192 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2193 2194 // Note if the sign bit is known to be zero or one. 2195 bool SignBitKnownZero = KnownZero.isNegative(); 2196 bool SignBitKnownOne = KnownOne.isNegative(); 2197 2198 KnownZero = KnownZero.zext(BitWidth); 2199 KnownOne = KnownOne.zext(BitWidth); 2200 2201 // If the sign bit is known zero or one, the top bits match. 2202 if (SignBitKnownZero) 2203 KnownZero |= NewBits; 2204 else if (SignBitKnownOne) 2205 KnownOne |= NewBits; 2206 break; 2207 } 2208 case ISD::ANY_EXTEND: { 2209 EVT InVT = Op.getOperand(0).getValueType(); 2210 unsigned InBits = InVT.getScalarType().getSizeInBits(); 2211 KnownZero = KnownZero.trunc(InBits); 2212 KnownOne = KnownOne.trunc(InBits); 2213 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2214 KnownZero = KnownZero.zext(BitWidth); 2215 KnownOne = KnownOne.zext(BitWidth); 2216 break; 2217 } 2218 case ISD::TRUNCATE: { 2219 EVT InVT = Op.getOperand(0).getValueType(); 2220 unsigned InBits = InVT.getScalarType().getSizeInBits(); 2221 KnownZero = KnownZero.zext(InBits); 2222 KnownOne = KnownOne.zext(InBits); 2223 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2224 KnownZero = KnownZero.trunc(BitWidth); 2225 KnownOne = KnownOne.trunc(BitWidth); 2226 break; 2227 } 2228 case ISD::AssertZext: { 2229 EVT VT = cast<VTSDNode>(Op.getOperand(1))->getVT(); 2230 APInt InMask = APInt::getLowBitsSet(BitWidth, VT.getSizeInBits()); 2231 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2232 KnownZero |= (~InMask); 2233 KnownOne &= (~KnownZero); 2234 break; 2235 } 2236 case ISD::FGETSIGN: 2237 // All bits are zero except the low bit. 2238 KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - 1); 2239 break; 2240 2241 case ISD::SUB: { 2242 if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0))) { 2243 // We know that the top bits of C-X are clear if X contains less bits 2244 // than C (i.e. no wrap-around can happen). For example, 20-X is 2245 // positive if we can prove that X is >= 0 and < 16. 2246 if (CLHS->getAPIntValue().isNonNegative()) { 2247 unsigned NLZ = (CLHS->getAPIntValue()+1).countLeadingZeros(); 2248 // NLZ can't be BitWidth with no sign bit 2249 APInt MaskV = APInt::getHighBitsSet(BitWidth, NLZ+1); 2250 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2251 2252 // If all of the MaskV bits are known to be zero, then we know the 2253 // output top bits are zero, because we now know that the output is 2254 // from [0-C]. 2255 if ((KnownZero2 & MaskV) == MaskV) { 2256 unsigned NLZ2 = CLHS->getAPIntValue().countLeadingZeros(); 2257 // Top bits known zero. 2258 KnownZero = APInt::getHighBitsSet(BitWidth, NLZ2); 2259 } 2260 } 2261 } 2262 } 2263 // fall through 2264 case ISD::ADD: 2265 case ISD::ADDE: { 2266 // Output known-0 bits are known if clear or set in both the low clear bits 2267 // common to both LHS & RHS. For example, 8+(X<<3) is known to have the 2268 // low 3 bits clear. 2269 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 2270 unsigned KnownZeroOut = KnownZero2.countTrailingOnes(); 2271 2272 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2273 KnownZeroOut = std::min(KnownZeroOut, 2274 KnownZero2.countTrailingOnes()); 2275 2276 if (Op.getOpcode() == ISD::ADD) { 2277 KnownZero |= APInt::getLowBitsSet(BitWidth, KnownZeroOut); 2278 break; 2279 } 2280 2281 // With ADDE, a carry bit may be added in, so we can only use this 2282 // information if we know (at least) that the low two bits are clear. We 2283 // then return to the caller that the low bit is unknown but that other bits 2284 // are known zero. 2285 if (KnownZeroOut >= 2) // ADDE 2286 KnownZero |= APInt::getBitsSet(BitWidth, 1, KnownZeroOut); 2287 break; 2288 } 2289 case ISD::SREM: 2290 if (ConstantSDNode *Rem = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2291 const APInt &RA = Rem->getAPIntValue().abs(); 2292 if (RA.isPowerOf2()) { 2293 APInt LowBits = RA - 1; 2294 computeKnownBits(Op.getOperand(0), KnownZero2,KnownOne2,Depth+1); 2295 2296 // The low bits of the first operand are unchanged by the srem. 2297 KnownZero = KnownZero2 & LowBits; 2298 KnownOne = KnownOne2 & LowBits; 2299 2300 // If the first operand is non-negative or has all low bits zero, then 2301 // the upper bits are all zero. 2302 if (KnownZero2[BitWidth-1] || ((KnownZero2 & LowBits) == LowBits)) 2303 KnownZero |= ~LowBits; 2304 2305 // If the first operand is negative and not all low bits are zero, then 2306 // the upper bits are all one. 2307 if (KnownOne2[BitWidth-1] && ((KnownOne2 & LowBits) != 0)) 2308 KnownOne |= ~LowBits; 2309 assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?"); 2310 } 2311 } 2312 break; 2313 case ISD::UREM: { 2314 if (ConstantSDNode *Rem = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2315 const APInt &RA = Rem->getAPIntValue(); 2316 if (RA.isPowerOf2()) { 2317 APInt LowBits = (RA - 1); 2318 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth + 1); 2319 2320 // The upper bits are all zero, the lower ones are unchanged. 2321 KnownZero = KnownZero2 | ~LowBits; 2322 KnownOne = KnownOne2 & LowBits; 2323 break; 2324 } 2325 } 2326 2327 // Since the result is less than or equal to either operand, any leading 2328 // zero bits in either operand must also exist in the result. 2329 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2330 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2331 2332 uint32_t Leaders = std::max(KnownZero.countLeadingOnes(), 2333 KnownZero2.countLeadingOnes()); 2334 KnownOne.clearAllBits(); 2335 KnownZero = APInt::getHighBitsSet(BitWidth, Leaders); 2336 break; 2337 } 2338 case ISD::FrameIndex: 2339 case ISD::TargetFrameIndex: 2340 if (unsigned Align = InferPtrAlignment(Op)) { 2341 // The low bits are known zero if the pointer is aligned. 2342 KnownZero = APInt::getLowBitsSet(BitWidth, Log2_32(Align)); 2343 break; 2344 } 2345 break; 2346 2347 default: 2348 if (Op.getOpcode() < ISD::BUILTIN_OP_END) 2349 break; 2350 // Fallthrough 2351 case ISD::INTRINSIC_WO_CHAIN: 2352 case ISD::INTRINSIC_W_CHAIN: 2353 case ISD::INTRINSIC_VOID: 2354 // Allow the target to implement this method for its nodes. 2355 TLI->computeKnownBitsForTargetNode(Op, KnownZero, KnownOne, *this, Depth); 2356 break; 2357 } 2358 2359 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 2360 } 2361 2362 /// ComputeNumSignBits - Return the number of times the sign bit of the 2363 /// register is replicated into the other bits. We know that at least 1 bit 2364 /// is always equal to the sign bit (itself), but other cases can give us 2365 /// information. For example, immediately after an "SRA X, 2", we know that 2366 /// the top 3 bits are all equal to each other, so we return 3. 2367 unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, unsigned Depth) const{ 2368 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 2369 EVT VT = Op.getValueType(); 2370 assert(VT.isInteger() && "Invalid VT!"); 2371 unsigned VTBits = VT.getScalarType().getSizeInBits(); 2372 unsigned Tmp, Tmp2; 2373 unsigned FirstAnswer = 1; 2374 2375 if (Depth == 6) 2376 return 1; // Limit search depth. 2377 2378 switch (Op.getOpcode()) { 2379 default: break; 2380 case ISD::AssertSext: 2381 Tmp = cast<VTSDNode>(Op.getOperand(1))->getVT().getSizeInBits(); 2382 return VTBits-Tmp+1; 2383 case ISD::AssertZext: 2384 Tmp = cast<VTSDNode>(Op.getOperand(1))->getVT().getSizeInBits(); 2385 return VTBits-Tmp; 2386 2387 case ISD::Constant: { 2388 const APInt &Val = cast<ConstantSDNode>(Op)->getAPIntValue(); 2389 return Val.getNumSignBits(); 2390 } 2391 2392 case ISD::SIGN_EXTEND: 2393 Tmp = 2394 VTBits-Op.getOperand(0).getValueType().getScalarType().getSizeInBits(); 2395 return ComputeNumSignBits(Op.getOperand(0), Depth+1) + Tmp; 2396 2397 case ISD::SIGN_EXTEND_INREG: 2398 // Max of the input and what this extends. 2399 Tmp = 2400 cast<VTSDNode>(Op.getOperand(1))->getVT().getScalarType().getSizeInBits(); 2401 Tmp = VTBits-Tmp+1; 2402 2403 Tmp2 = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2404 return std::max(Tmp, Tmp2); 2405 2406 case ISD::SRA: 2407 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2408 // SRA X, C -> adds C sign bits. 2409 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2410 Tmp += C->getZExtValue(); 2411 if (Tmp > VTBits) Tmp = VTBits; 2412 } 2413 return Tmp; 2414 case ISD::SHL: 2415 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2416 // shl destroys sign bits. 2417 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2418 if (C->getZExtValue() >= VTBits || // Bad shift. 2419 C->getZExtValue() >= Tmp) break; // Shifted all sign bits out. 2420 return Tmp - C->getZExtValue(); 2421 } 2422 break; 2423 case ISD::AND: 2424 case ISD::OR: 2425 case ISD::XOR: // NOT is handled here. 2426 // Logical binary ops preserve the number of sign bits at the worst. 2427 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2428 if (Tmp != 1) { 2429 Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1); 2430 FirstAnswer = std::min(Tmp, Tmp2); 2431 // We computed what we know about the sign bits as our first 2432 // answer. Now proceed to the generic code that uses 2433 // computeKnownBits, and pick whichever answer is better. 2434 } 2435 break; 2436 2437 case ISD::SELECT: 2438 Tmp = ComputeNumSignBits(Op.getOperand(1), Depth+1); 2439 if (Tmp == 1) return 1; // Early out. 2440 Tmp2 = ComputeNumSignBits(Op.getOperand(2), Depth+1); 2441 return std::min(Tmp, Tmp2); 2442 2443 case ISD::SADDO: 2444 case ISD::UADDO: 2445 case ISD::SSUBO: 2446 case ISD::USUBO: 2447 case ISD::SMULO: 2448 case ISD::UMULO: 2449 if (Op.getResNo() != 1) 2450 break; 2451 // The boolean result conforms to getBooleanContents. Fall through. 2452 // If setcc returns 0/-1, all bits are sign bits. 2453 // We know that we have an integer-based boolean since these operations 2454 // are only available for integer. 2455 if (TLI->getBooleanContents(Op.getValueType().isVector(), false) == 2456 TargetLowering::ZeroOrNegativeOneBooleanContent) 2457 return VTBits; 2458 break; 2459 case ISD::SETCC: 2460 // If setcc returns 0/-1, all bits are sign bits. 2461 if (TLI->getBooleanContents(Op.getOperand(0).getValueType()) == 2462 TargetLowering::ZeroOrNegativeOneBooleanContent) 2463 return VTBits; 2464 break; 2465 case ISD::ROTL: 2466 case ISD::ROTR: 2467 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2468 unsigned RotAmt = C->getZExtValue() & (VTBits-1); 2469 2470 // Handle rotate right by N like a rotate left by 32-N. 2471 if (Op.getOpcode() == ISD::ROTR) 2472 RotAmt = (VTBits-RotAmt) & (VTBits-1); 2473 2474 // If we aren't rotating out all of the known-in sign bits, return the 2475 // number that are left. This handles rotl(sext(x), 1) for example. 2476 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2477 if (Tmp > RotAmt+1) return Tmp-RotAmt; 2478 } 2479 break; 2480 case ISD::ADD: 2481 // Add can have at most one carry bit. Thus we know that the output 2482 // is, at worst, one more bit than the inputs. 2483 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2484 if (Tmp == 1) return 1; // Early out. 2485 2486 // Special case decrementing a value (ADD X, -1): 2487 if (ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Op.getOperand(1))) 2488 if (CRHS->isAllOnesValue()) { 2489 APInt KnownZero, KnownOne; 2490 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2491 2492 // If the input is known to be 0 or 1, the output is 0/-1, which is all 2493 // sign bits set. 2494 if ((KnownZero | APInt(VTBits, 1)).isAllOnesValue()) 2495 return VTBits; 2496 2497 // If we are subtracting one from a positive number, there is no carry 2498 // out of the result. 2499 if (KnownZero.isNegative()) 2500 return Tmp; 2501 } 2502 2503 Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1); 2504 if (Tmp2 == 1) return 1; 2505 return std::min(Tmp, Tmp2)-1; 2506 2507 case ISD::SUB: 2508 Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1); 2509 if (Tmp2 == 1) return 1; 2510 2511 // Handle NEG. 2512 if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0))) 2513 if (CLHS->isNullValue()) { 2514 APInt KnownZero, KnownOne; 2515 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 2516 // If the input is known to be 0 or 1, the output is 0/-1, which is all 2517 // sign bits set. 2518 if ((KnownZero | APInt(VTBits, 1)).isAllOnesValue()) 2519 return VTBits; 2520 2521 // If the input is known to be positive (the sign bit is known clear), 2522 // the output of the NEG has the same number of sign bits as the input. 2523 if (KnownZero.isNegative()) 2524 return Tmp2; 2525 2526 // Otherwise, we treat this like a SUB. 2527 } 2528 2529 // Sub can have at most one carry bit. Thus we know that the output 2530 // is, at worst, one more bit than the inputs. 2531 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2532 if (Tmp == 1) return 1; // Early out. 2533 return std::min(Tmp, Tmp2)-1; 2534 case ISD::TRUNCATE: 2535 // FIXME: it's tricky to do anything useful for this, but it is an important 2536 // case for targets like X86. 2537 break; 2538 } 2539 2540 // If we are looking at the loaded value of the SDNode. 2541 if (Op.getResNo() == 0) { 2542 // Handle LOADX separately here. EXTLOAD case will fallthrough. 2543 if (LoadSDNode *LD = dyn_cast<LoadSDNode>(Op)) { 2544 unsigned ExtType = LD->getExtensionType(); 2545 switch (ExtType) { 2546 default: break; 2547 case ISD::SEXTLOAD: // '17' bits known 2548 Tmp = LD->getMemoryVT().getScalarType().getSizeInBits(); 2549 return VTBits-Tmp+1; 2550 case ISD::ZEXTLOAD: // '16' bits known 2551 Tmp = LD->getMemoryVT().getScalarType().getSizeInBits(); 2552 return VTBits-Tmp; 2553 } 2554 } 2555 } 2556 2557 // Allow the target to implement this method for its nodes. 2558 if (Op.getOpcode() >= ISD::BUILTIN_OP_END || 2559 Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN || 2560 Op.getOpcode() == ISD::INTRINSIC_W_CHAIN || 2561 Op.getOpcode() == ISD::INTRINSIC_VOID) { 2562 unsigned NumBits = TLI->ComputeNumSignBitsForTargetNode(Op, *this, Depth); 2563 if (NumBits > 1) FirstAnswer = std::max(FirstAnswer, NumBits); 2564 } 2565 2566 // Finally, if we can prove that the top bits of the result are 0's or 1's, 2567 // use this information. 2568 APInt KnownZero, KnownOne; 2569 computeKnownBits(Op, KnownZero, KnownOne, Depth); 2570 2571 APInt Mask; 2572 if (KnownZero.isNegative()) { // sign bit is 0 2573 Mask = KnownZero; 2574 } else if (KnownOne.isNegative()) { // sign bit is 1; 2575 Mask = KnownOne; 2576 } else { 2577 // Nothing known. 2578 return FirstAnswer; 2579 } 2580 2581 // Okay, we know that the sign bit in Mask is set. Use CLZ to determine 2582 // the number of identical bits in the top of the input value. 2583 Mask = ~Mask; 2584 Mask <<= Mask.getBitWidth()-VTBits; 2585 // Return # leading zeros. We use 'min' here in case Val was zero before 2586 // shifting. We don't want to return '64' as for an i32 "0". 2587 return std::max(FirstAnswer, std::min(VTBits, Mask.countLeadingZeros())); 2588 } 2589 2590 /// isBaseWithConstantOffset - Return true if the specified operand is an 2591 /// ISD::ADD with a ConstantSDNode on the right-hand side, or if it is an 2592 /// ISD::OR with a ConstantSDNode that is guaranteed to have the same 2593 /// semantics as an ADD. This handles the equivalence: 2594 /// X|Cst == X+Cst iff X&Cst = 0. 2595 bool SelectionDAG::isBaseWithConstantOffset(SDValue Op) const { 2596 if ((Op.getOpcode() != ISD::ADD && Op.getOpcode() != ISD::OR) || 2597 !isa<ConstantSDNode>(Op.getOperand(1))) 2598 return false; 2599 2600 if (Op.getOpcode() == ISD::OR && 2601 !MaskedValueIsZero(Op.getOperand(0), 2602 cast<ConstantSDNode>(Op.getOperand(1))->getAPIntValue())) 2603 return false; 2604 2605 return true; 2606 } 2607 2608 2609 bool SelectionDAG::isKnownNeverNaN(SDValue Op) const { 2610 // If we're told that NaNs won't happen, assume they won't. 2611 if (getTarget().Options.NoNaNsFPMath) 2612 return true; 2613 2614 // If the value is a constant, we can obviously see if it is a NaN or not. 2615 if (const ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Op)) 2616 return !C->getValueAPF().isNaN(); 2617 2618 // TODO: Recognize more cases here. 2619 2620 return false; 2621 } 2622 2623 bool SelectionDAG::isKnownNeverZero(SDValue Op) const { 2624 // If the value is a constant, we can obviously see if it is a zero or not. 2625 if (const ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Op)) 2626 return !C->isZero(); 2627 2628 // TODO: Recognize more cases here. 2629 switch (Op.getOpcode()) { 2630 default: break; 2631 case ISD::OR: 2632 if (const ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) 2633 return !C->isNullValue(); 2634 break; 2635 } 2636 2637 return false; 2638 } 2639 2640 bool SelectionDAG::isEqualTo(SDValue A, SDValue B) const { 2641 // Check the obvious case. 2642 if (A == B) return true; 2643 2644 // For for negative and positive zero. 2645 if (const ConstantFPSDNode *CA = dyn_cast<ConstantFPSDNode>(A)) 2646 if (const ConstantFPSDNode *CB = dyn_cast<ConstantFPSDNode>(B)) 2647 if (CA->isZero() && CB->isZero()) return true; 2648 2649 // Otherwise they may not be equal. 2650 return false; 2651 } 2652 2653 /// getNode - Gets or creates the specified node. 2654 /// 2655 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT) { 2656 FoldingSetNodeID ID; 2657 AddNodeIDNode(ID, Opcode, getVTList(VT), None); 2658 void *IP = nullptr; 2659 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 2660 return SDValue(E, 0); 2661 2662 SDNode *N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), 2663 DL.getDebugLoc(), getVTList(VT)); 2664 CSEMap.InsertNode(N, IP); 2665 2666 InsertNode(N); 2667 return SDValue(N, 0); 2668 } 2669 2670 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, 2671 EVT VT, SDValue Operand) { 2672 // Constant fold unary operations with an integer constant operand. Even 2673 // opaque constant will be folded, because the folding of unary operations 2674 // doesn't create new constants with different values. Nevertheless, the 2675 // opaque flag is preserved during folding to prevent future folding with 2676 // other constants. 2677 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand.getNode())) { 2678 const APInt &Val = C->getAPIntValue(); 2679 switch (Opcode) { 2680 default: break; 2681 case ISD::SIGN_EXTEND: 2682 return getConstant(Val.sextOrTrunc(VT.getSizeInBits()), VT, 2683 C->isTargetOpcode(), C->isOpaque()); 2684 case ISD::ANY_EXTEND: 2685 case ISD::ZERO_EXTEND: 2686 case ISD::TRUNCATE: 2687 return getConstant(Val.zextOrTrunc(VT.getSizeInBits()), VT, 2688 C->isTargetOpcode(), C->isOpaque()); 2689 case ISD::UINT_TO_FP: 2690 case ISD::SINT_TO_FP: { 2691 APFloat apf(EVTToAPFloatSemantics(VT), 2692 APInt::getNullValue(VT.getSizeInBits())); 2693 (void)apf.convertFromAPInt(Val, 2694 Opcode==ISD::SINT_TO_FP, 2695 APFloat::rmNearestTiesToEven); 2696 return getConstantFP(apf, VT); 2697 } 2698 case ISD::BITCAST: 2699 if (VT == MVT::f32 && C->getValueType(0) == MVT::i32) 2700 return getConstantFP(APFloat(APFloat::IEEEsingle, Val), VT); 2701 else if (VT == MVT::f64 && C->getValueType(0) == MVT::i64) 2702 return getConstantFP(APFloat(APFloat::IEEEdouble, Val), VT); 2703 break; 2704 case ISD::BSWAP: 2705 return getConstant(Val.byteSwap(), VT, C->isTargetOpcode(), 2706 C->isOpaque()); 2707 case ISD::CTPOP: 2708 return getConstant(Val.countPopulation(), VT, C->isTargetOpcode(), 2709 C->isOpaque()); 2710 case ISD::CTLZ: 2711 case ISD::CTLZ_ZERO_UNDEF: 2712 return getConstant(Val.countLeadingZeros(), VT, C->isTargetOpcode(), 2713 C->isOpaque()); 2714 case ISD::CTTZ: 2715 case ISD::CTTZ_ZERO_UNDEF: 2716 return getConstant(Val.countTrailingZeros(), VT, C->isTargetOpcode(), 2717 C->isOpaque()); 2718 } 2719 } 2720 2721 // Constant fold unary operations with a floating point constant operand. 2722 if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Operand.getNode())) { 2723 APFloat V = C->getValueAPF(); // make copy 2724 switch (Opcode) { 2725 case ISD::FNEG: 2726 V.changeSign(); 2727 return getConstantFP(V, VT); 2728 case ISD::FABS: 2729 V.clearSign(); 2730 return getConstantFP(V, VT); 2731 case ISD::FCEIL: { 2732 APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardPositive); 2733 if (fs == APFloat::opOK || fs == APFloat::opInexact) 2734 return getConstantFP(V, VT); 2735 break; 2736 } 2737 case ISD::FTRUNC: { 2738 APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardZero); 2739 if (fs == APFloat::opOK || fs == APFloat::opInexact) 2740 return getConstantFP(V, VT); 2741 break; 2742 } 2743 case ISD::FFLOOR: { 2744 APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardNegative); 2745 if (fs == APFloat::opOK || fs == APFloat::opInexact) 2746 return getConstantFP(V, VT); 2747 break; 2748 } 2749 case ISD::FP_EXTEND: { 2750 bool ignored; 2751 // This can return overflow, underflow, or inexact; we don't care. 2752 // FIXME need to be more flexible about rounding mode. 2753 (void)V.convert(EVTToAPFloatSemantics(VT), 2754 APFloat::rmNearestTiesToEven, &ignored); 2755 return getConstantFP(V, VT); 2756 } 2757 case ISD::FP_TO_SINT: 2758 case ISD::FP_TO_UINT: { 2759 integerPart x[2]; 2760 bool ignored; 2761 assert(integerPartWidth >= 64); 2762 // FIXME need to be more flexible about rounding mode. 2763 APFloat::opStatus s = V.convertToInteger(x, VT.getSizeInBits(), 2764 Opcode==ISD::FP_TO_SINT, 2765 APFloat::rmTowardZero, &ignored); 2766 if (s==APFloat::opInvalidOp) // inexact is OK, in fact usual 2767 break; 2768 APInt api(VT.getSizeInBits(), x); 2769 return getConstant(api, VT); 2770 } 2771 case ISD::BITCAST: 2772 if (VT == MVT::i32 && C->getValueType(0) == MVT::f32) 2773 return getConstant((uint32_t)V.bitcastToAPInt().getZExtValue(), VT); 2774 else if (VT == MVT::i64 && C->getValueType(0) == MVT::f64) 2775 return getConstant(V.bitcastToAPInt().getZExtValue(), VT); 2776 break; 2777 } 2778 } 2779 2780 // Constant fold unary operations with a vector integer operand. 2781 if (BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(Operand.getNode())) { 2782 if (BV->isConstant()) { 2783 switch (Opcode) { 2784 default: 2785 // FIXME: Entirely reasonable to perform folding of other unary 2786 // operations here as the need arises. 2787 break; 2788 case ISD::UINT_TO_FP: 2789 case ISD::SINT_TO_FP: { 2790 SmallVector<SDValue, 8> Ops; 2791 for (int i = 0, e = VT.getVectorNumElements(); i != e; ++i) { 2792 SDValue OpN = BV->getOperand(i); 2793 // Let the above scalar folding handle the conversion of each 2794 // element. 2795 OpN = getNode(ISD::SINT_TO_FP, DL, VT.getVectorElementType(), 2796 OpN); 2797 Ops.push_back(OpN); 2798 } 2799 return getNode(ISD::BUILD_VECTOR, DL, VT, Ops); 2800 } 2801 } 2802 } 2803 } 2804 2805 unsigned OpOpcode = Operand.getNode()->getOpcode(); 2806 switch (Opcode) { 2807 case ISD::TokenFactor: 2808 case ISD::MERGE_VALUES: 2809 case ISD::CONCAT_VECTORS: 2810 return Operand; // Factor, merge or concat of one node? No need. 2811 case ISD::FP_ROUND: llvm_unreachable("Invalid method to make FP_ROUND node"); 2812 case ISD::FP_EXTEND: 2813 assert(VT.isFloatingPoint() && 2814 Operand.getValueType().isFloatingPoint() && "Invalid FP cast!"); 2815 if (Operand.getValueType() == VT) return Operand; // noop conversion. 2816 assert((!VT.isVector() || 2817 VT.getVectorNumElements() == 2818 Operand.getValueType().getVectorNumElements()) && 2819 "Vector element count mismatch!"); 2820 if (Operand.getOpcode() == ISD::UNDEF) 2821 return getUNDEF(VT); 2822 break; 2823 case ISD::SIGN_EXTEND: 2824 assert(VT.isInteger() && Operand.getValueType().isInteger() && 2825 "Invalid SIGN_EXTEND!"); 2826 if (Operand.getValueType() == VT) return Operand; // noop extension 2827 assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) && 2828 "Invalid sext node, dst < src!"); 2829 assert((!VT.isVector() || 2830 VT.getVectorNumElements() == 2831 Operand.getValueType().getVectorNumElements()) && 2832 "Vector element count mismatch!"); 2833 if (OpOpcode == ISD::SIGN_EXTEND || OpOpcode == ISD::ZERO_EXTEND) 2834 return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0)); 2835 else if (OpOpcode == ISD::UNDEF) 2836 // sext(undef) = 0, because the top bits will all be the same. 2837 return getConstant(0, VT); 2838 break; 2839 case ISD::ZERO_EXTEND: 2840 assert(VT.isInteger() && Operand.getValueType().isInteger() && 2841 "Invalid ZERO_EXTEND!"); 2842 if (Operand.getValueType() == VT) return Operand; // noop extension 2843 assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) && 2844 "Invalid zext node, dst < src!"); 2845 assert((!VT.isVector() || 2846 VT.getVectorNumElements() == 2847 Operand.getValueType().getVectorNumElements()) && 2848 "Vector element count mismatch!"); 2849 if (OpOpcode == ISD::ZERO_EXTEND) // (zext (zext x)) -> (zext x) 2850 return getNode(ISD::ZERO_EXTEND, DL, VT, 2851 Operand.getNode()->getOperand(0)); 2852 else if (OpOpcode == ISD::UNDEF) 2853 // zext(undef) = 0, because the top bits will be zero. 2854 return getConstant(0, VT); 2855 break; 2856 case ISD::ANY_EXTEND: 2857 assert(VT.isInteger() && Operand.getValueType().isInteger() && 2858 "Invalid ANY_EXTEND!"); 2859 if (Operand.getValueType() == VT) return Operand; // noop extension 2860 assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) && 2861 "Invalid anyext node, dst < src!"); 2862 assert((!VT.isVector() || 2863 VT.getVectorNumElements() == 2864 Operand.getValueType().getVectorNumElements()) && 2865 "Vector element count mismatch!"); 2866 2867 if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND || 2868 OpOpcode == ISD::ANY_EXTEND) 2869 // (ext (zext x)) -> (zext x) and (ext (sext x)) -> (sext x) 2870 return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0)); 2871 else if (OpOpcode == ISD::UNDEF) 2872 return getUNDEF(VT); 2873 2874 // (ext (trunx x)) -> x 2875 if (OpOpcode == ISD::TRUNCATE) { 2876 SDValue OpOp = Operand.getNode()->getOperand(0); 2877 if (OpOp.getValueType() == VT) 2878 return OpOp; 2879 } 2880 break; 2881 case ISD::TRUNCATE: 2882 assert(VT.isInteger() && Operand.getValueType().isInteger() && 2883 "Invalid TRUNCATE!"); 2884 if (Operand.getValueType() == VT) return Operand; // noop truncate 2885 assert(Operand.getValueType().getScalarType().bitsGT(VT.getScalarType()) && 2886 "Invalid truncate node, src < dst!"); 2887 assert((!VT.isVector() || 2888 VT.getVectorNumElements() == 2889 Operand.getValueType().getVectorNumElements()) && 2890 "Vector element count mismatch!"); 2891 if (OpOpcode == ISD::TRUNCATE) 2892 return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0)); 2893 if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND || 2894 OpOpcode == ISD::ANY_EXTEND) { 2895 // If the source is smaller than the dest, we still need an extend. 2896 if (Operand.getNode()->getOperand(0).getValueType().getScalarType() 2897 .bitsLT(VT.getScalarType())) 2898 return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0)); 2899 if (Operand.getNode()->getOperand(0).getValueType().bitsGT(VT)) 2900 return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0)); 2901 return Operand.getNode()->getOperand(0); 2902 } 2903 if (OpOpcode == ISD::UNDEF) 2904 return getUNDEF(VT); 2905 break; 2906 case ISD::BITCAST: 2907 // Basic sanity checking. 2908 assert(VT.getSizeInBits() == Operand.getValueType().getSizeInBits() 2909 && "Cannot BITCAST between types of different sizes!"); 2910 if (VT == Operand.getValueType()) return Operand; // noop conversion. 2911 if (OpOpcode == ISD::BITCAST) // bitconv(bitconv(x)) -> bitconv(x) 2912 return getNode(ISD::BITCAST, DL, VT, Operand.getOperand(0)); 2913 if (OpOpcode == ISD::UNDEF) 2914 return getUNDEF(VT); 2915 break; 2916 case ISD::SCALAR_TO_VECTOR: 2917 assert(VT.isVector() && !Operand.getValueType().isVector() && 2918 (VT.getVectorElementType() == Operand.getValueType() || 2919 (VT.getVectorElementType().isInteger() && 2920 Operand.getValueType().isInteger() && 2921 VT.getVectorElementType().bitsLE(Operand.getValueType()))) && 2922 "Illegal SCALAR_TO_VECTOR node!"); 2923 if (OpOpcode == ISD::UNDEF) 2924 return getUNDEF(VT); 2925 // scalar_to_vector(extract_vector_elt V, 0) -> V, top bits are undefined. 2926 if (OpOpcode == ISD::EXTRACT_VECTOR_ELT && 2927 isa<ConstantSDNode>(Operand.getOperand(1)) && 2928 Operand.getConstantOperandVal(1) == 0 && 2929 Operand.getOperand(0).getValueType() == VT) 2930 return Operand.getOperand(0); 2931 break; 2932 case ISD::FNEG: 2933 // -(X-Y) -> (Y-X) is unsafe because when X==Y, -0.0 != +0.0 2934 if (getTarget().Options.UnsafeFPMath && OpOpcode == ISD::FSUB) 2935 return getNode(ISD::FSUB, DL, VT, Operand.getNode()->getOperand(1), 2936 Operand.getNode()->getOperand(0)); 2937 if (OpOpcode == ISD::FNEG) // --X -> X 2938 return Operand.getNode()->getOperand(0); 2939 break; 2940 case ISD::FABS: 2941 if (OpOpcode == ISD::FNEG) // abs(-X) -> abs(X) 2942 return getNode(ISD::FABS, DL, VT, Operand.getNode()->getOperand(0)); 2943 break; 2944 } 2945 2946 SDNode *N; 2947 SDVTList VTs = getVTList(VT); 2948 if (VT != MVT::Glue) { // Don't CSE flag producing nodes 2949 FoldingSetNodeID ID; 2950 SDValue Ops[1] = { Operand }; 2951 AddNodeIDNode(ID, Opcode, VTs, Ops); 2952 void *IP = nullptr; 2953 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 2954 return SDValue(E, 0); 2955 2956 N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(), 2957 DL.getDebugLoc(), VTs, Operand); 2958 CSEMap.InsertNode(N, IP); 2959 } else { 2960 N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(), 2961 DL.getDebugLoc(), VTs, Operand); 2962 } 2963 2964 InsertNode(N); 2965 return SDValue(N, 0); 2966 } 2967 2968 SDValue SelectionDAG::FoldConstantArithmetic(unsigned Opcode, EVT VT, 2969 SDNode *Cst1, SDNode *Cst2) { 2970 // If the opcode is a target-specific ISD node, there's nothing we can 2971 // do here and the operand rules may not line up with the below, so 2972 // bail early. 2973 if (Opcode >= ISD::BUILTIN_OP_END) 2974 return SDValue(); 2975 2976 SmallVector<std::pair<ConstantSDNode *, ConstantSDNode *>, 4> Inputs; 2977 SmallVector<SDValue, 4> Outputs; 2978 EVT SVT = VT.getScalarType(); 2979 2980 ConstantSDNode *Scalar1 = dyn_cast<ConstantSDNode>(Cst1); 2981 ConstantSDNode *Scalar2 = dyn_cast<ConstantSDNode>(Cst2); 2982 if (Scalar1 && Scalar2 && (Scalar1->isOpaque() || Scalar2->isOpaque())) 2983 return SDValue(); 2984 2985 if (Scalar1 && Scalar2) 2986 // Scalar instruction. 2987 Inputs.push_back(std::make_pair(Scalar1, Scalar2)); 2988 else { 2989 // For vectors extract each constant element into Inputs so we can constant 2990 // fold them individually. 2991 BuildVectorSDNode *BV1 = dyn_cast<BuildVectorSDNode>(Cst1); 2992 BuildVectorSDNode *BV2 = dyn_cast<BuildVectorSDNode>(Cst2); 2993 if (!BV1 || !BV2) 2994 return SDValue(); 2995 2996 assert(BV1->getNumOperands() == BV2->getNumOperands() && "Out of sync!"); 2997 2998 for (unsigned I = 0, E = BV1->getNumOperands(); I != E; ++I) { 2999 ConstantSDNode *V1 = dyn_cast<ConstantSDNode>(BV1->getOperand(I)); 3000 ConstantSDNode *V2 = dyn_cast<ConstantSDNode>(BV2->getOperand(I)); 3001 if (!V1 || !V2) // Not a constant, bail. 3002 return SDValue(); 3003 3004 if (V1->isOpaque() || V2->isOpaque()) 3005 return SDValue(); 3006 3007 // Avoid BUILD_VECTOR nodes that perform implicit truncation. 3008 // FIXME: This is valid and could be handled by truncating the APInts. 3009 if (V1->getValueType(0) != SVT || V2->getValueType(0) != SVT) 3010 return SDValue(); 3011 3012 Inputs.push_back(std::make_pair(V1, V2)); 3013 } 3014 } 3015 3016 // We have a number of constant values, constant fold them element by element. 3017 for (unsigned I = 0, E = Inputs.size(); I != E; ++I) { 3018 const APInt &C1 = Inputs[I].first->getAPIntValue(); 3019 const APInt &C2 = Inputs[I].second->getAPIntValue(); 3020 3021 switch (Opcode) { 3022 case ISD::ADD: 3023 Outputs.push_back(getConstant(C1 + C2, SVT)); 3024 break; 3025 case ISD::SUB: 3026 Outputs.push_back(getConstant(C1 - C2, SVT)); 3027 break; 3028 case ISD::MUL: 3029 Outputs.push_back(getConstant(C1 * C2, SVT)); 3030 break; 3031 case ISD::UDIV: 3032 if (!C2.getBoolValue()) 3033 return SDValue(); 3034 Outputs.push_back(getConstant(C1.udiv(C2), SVT)); 3035 break; 3036 case ISD::UREM: 3037 if (!C2.getBoolValue()) 3038 return SDValue(); 3039 Outputs.push_back(getConstant(C1.urem(C2), SVT)); 3040 break; 3041 case ISD::SDIV: 3042 if (!C2.getBoolValue()) 3043 return SDValue(); 3044 Outputs.push_back(getConstant(C1.sdiv(C2), SVT)); 3045 break; 3046 case ISD::SREM: 3047 if (!C2.getBoolValue()) 3048 return SDValue(); 3049 Outputs.push_back(getConstant(C1.srem(C2), SVT)); 3050 break; 3051 case ISD::AND: 3052 Outputs.push_back(getConstant(C1 & C2, SVT)); 3053 break; 3054 case ISD::OR: 3055 Outputs.push_back(getConstant(C1 | C2, SVT)); 3056 break; 3057 case ISD::XOR: 3058 Outputs.push_back(getConstant(C1 ^ C2, SVT)); 3059 break; 3060 case ISD::SHL: 3061 Outputs.push_back(getConstant(C1 << C2, SVT)); 3062 break; 3063 case ISD::SRL: 3064 Outputs.push_back(getConstant(C1.lshr(C2), SVT)); 3065 break; 3066 case ISD::SRA: 3067 Outputs.push_back(getConstant(C1.ashr(C2), SVT)); 3068 break; 3069 case ISD::ROTL: 3070 Outputs.push_back(getConstant(C1.rotl(C2), SVT)); 3071 break; 3072 case ISD::ROTR: 3073 Outputs.push_back(getConstant(C1.rotr(C2), SVT)); 3074 break; 3075 default: 3076 return SDValue(); 3077 } 3078 } 3079 3080 assert((Scalar1 && Scalar2) || (VT.getVectorNumElements() == Outputs.size() && 3081 "Expected a scalar or vector!")); 3082 3083 // Handle the scalar case first. 3084 if (!VT.isVector()) 3085 return Outputs.back(); 3086 3087 // We may have a vector type but a scalar result. Create a splat. 3088 Outputs.resize(VT.getVectorNumElements(), Outputs.back()); 3089 3090 // Build a big vector out of the scalar elements we generated. 3091 return getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Outputs); 3092 } 3093 3094 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, SDValue N1, 3095 SDValue N2, bool nuw, bool nsw, bool exact) { 3096 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode()); 3097 ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.getNode()); 3098 switch (Opcode) { 3099 default: break; 3100 case ISD::TokenFactor: 3101 assert(VT == MVT::Other && N1.getValueType() == MVT::Other && 3102 N2.getValueType() == MVT::Other && "Invalid token factor!"); 3103 // Fold trivial token factors. 3104 if (N1.getOpcode() == ISD::EntryToken) return N2; 3105 if (N2.getOpcode() == ISD::EntryToken) return N1; 3106 if (N1 == N2) return N1; 3107 break; 3108 case ISD::CONCAT_VECTORS: 3109 // Concat of UNDEFs is UNDEF. 3110 if (N1.getOpcode() == ISD::UNDEF && 3111 N2.getOpcode() == ISD::UNDEF) 3112 return getUNDEF(VT); 3113 3114 // A CONCAT_VECTOR with all operands BUILD_VECTOR can be simplified to 3115 // one big BUILD_VECTOR. 3116 if (N1.getOpcode() == ISD::BUILD_VECTOR && 3117 N2.getOpcode() == ISD::BUILD_VECTOR) { 3118 SmallVector<SDValue, 16> Elts(N1.getNode()->op_begin(), 3119 N1.getNode()->op_end()); 3120 Elts.append(N2.getNode()->op_begin(), N2.getNode()->op_end()); 3121 return getNode(ISD::BUILD_VECTOR, DL, VT, Elts); 3122 } 3123 break; 3124 case ISD::AND: 3125 assert(VT.isInteger() && "This operator does not apply to FP types!"); 3126 assert(N1.getValueType() == N2.getValueType() && 3127 N1.getValueType() == VT && "Binary operator types must match!"); 3128 // (X & 0) -> 0. This commonly occurs when legalizing i64 values, so it's 3129 // worth handling here. 3130 if (N2C && N2C->isNullValue()) 3131 return N2; 3132 if (N2C && N2C->isAllOnesValue()) // X & -1 -> X 3133 return N1; 3134 break; 3135 case ISD::OR: 3136 case ISD::XOR: 3137 case ISD::ADD: 3138 case ISD::SUB: 3139 assert(VT.isInteger() && "This operator does not apply to FP types!"); 3140 assert(N1.getValueType() == N2.getValueType() && 3141 N1.getValueType() == VT && "Binary operator types must match!"); 3142 // (X ^|+- 0) -> X. This commonly occurs when legalizing i64 values, so 3143 // it's worth handling here. 3144 if (N2C && N2C->isNullValue()) 3145 return N1; 3146 break; 3147 case ISD::UDIV: 3148 case ISD::UREM: 3149 case ISD::MULHU: 3150 case ISD::MULHS: 3151 case ISD::MUL: 3152 case ISD::SDIV: 3153 case ISD::SREM: 3154 assert(VT.isInteger() && "This operator does not apply to FP types!"); 3155 assert(N1.getValueType() == N2.getValueType() && 3156 N1.getValueType() == VT && "Binary operator types must match!"); 3157 break; 3158 case ISD::FADD: 3159 case ISD::FSUB: 3160 case ISD::FMUL: 3161 case ISD::FDIV: 3162 case ISD::FREM: 3163 if (getTarget().Options.UnsafeFPMath) { 3164 if (Opcode == ISD::FADD) { 3165 // 0+x --> x 3166 if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1)) 3167 if (CFP->getValueAPF().isZero()) 3168 return N2; 3169 // x+0 --> x 3170 if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2)) 3171 if (CFP->getValueAPF().isZero()) 3172 return N1; 3173 } else if (Opcode == ISD::FSUB) { 3174 // x-0 --> x 3175 if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2)) 3176 if (CFP->getValueAPF().isZero()) 3177 return N1; 3178 } else if (Opcode == ISD::FMUL) { 3179 ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1); 3180 SDValue V = N2; 3181 3182 // If the first operand isn't the constant, try the second 3183 if (!CFP) { 3184 CFP = dyn_cast<ConstantFPSDNode>(N2); 3185 V = N1; 3186 } 3187 3188 if (CFP) { 3189 // 0*x --> 0 3190 if (CFP->isZero()) 3191 return SDValue(CFP,0); 3192 // 1*x --> x 3193 if (CFP->isExactlyValue(1.0)) 3194 return V; 3195 } 3196 } 3197 } 3198 assert(VT.isFloatingPoint() && "This operator only applies to FP types!"); 3199 assert(N1.getValueType() == N2.getValueType() && 3200 N1.getValueType() == VT && "Binary operator types must match!"); 3201 break; 3202 case ISD::FCOPYSIGN: // N1 and result must match. N1/N2 need not match. 3203 assert(N1.getValueType() == VT && 3204 N1.getValueType().isFloatingPoint() && 3205 N2.getValueType().isFloatingPoint() && 3206 "Invalid FCOPYSIGN!"); 3207 break; 3208 case ISD::SHL: 3209 case ISD::SRA: 3210 case ISD::SRL: 3211 case ISD::ROTL: 3212 case ISD::ROTR: 3213 assert(VT == N1.getValueType() && 3214 "Shift operators return type must be the same as their first arg"); 3215 assert(VT.isInteger() && N2.getValueType().isInteger() && 3216 "Shifts only work on integers"); 3217 assert((!VT.isVector() || VT == N2.getValueType()) && 3218 "Vector shift amounts must be in the same as their first arg"); 3219 // Verify that the shift amount VT is bit enough to hold valid shift 3220 // amounts. This catches things like trying to shift an i1024 value by an 3221 // i8, which is easy to fall into in generic code that uses 3222 // TLI.getShiftAmount(). 3223 assert(N2.getValueType().getSizeInBits() >= 3224 Log2_32_Ceil(N1.getValueType().getSizeInBits()) && 3225 "Invalid use of small shift amount with oversized value!"); 3226 3227 // Always fold shifts of i1 values so the code generator doesn't need to 3228 // handle them. Since we know the size of the shift has to be less than the 3229 // size of the value, the shift/rotate count is guaranteed to be zero. 3230 if (VT == MVT::i1) 3231 return N1; 3232 if (N2C && N2C->isNullValue()) 3233 return N1; 3234 break; 3235 case ISD::FP_ROUND_INREG: { 3236 EVT EVT = cast<VTSDNode>(N2)->getVT(); 3237 assert(VT == N1.getValueType() && "Not an inreg round!"); 3238 assert(VT.isFloatingPoint() && EVT.isFloatingPoint() && 3239 "Cannot FP_ROUND_INREG integer types"); 3240 assert(EVT.isVector() == VT.isVector() && 3241 "FP_ROUND_INREG type should be vector iff the operand " 3242 "type is vector!"); 3243 assert((!EVT.isVector() || 3244 EVT.getVectorNumElements() == VT.getVectorNumElements()) && 3245 "Vector element counts must match in FP_ROUND_INREG"); 3246 assert(EVT.bitsLE(VT) && "Not rounding down!"); 3247 (void)EVT; 3248 if (cast<VTSDNode>(N2)->getVT() == VT) return N1; // Not actually rounding. 3249 break; 3250 } 3251 case ISD::FP_ROUND: 3252 assert(VT.isFloatingPoint() && 3253 N1.getValueType().isFloatingPoint() && 3254 VT.bitsLE(N1.getValueType()) && 3255 isa<ConstantSDNode>(N2) && "Invalid FP_ROUND!"); 3256 if (N1.getValueType() == VT) return N1; // noop conversion. 3257 break; 3258 case ISD::AssertSext: 3259 case ISD::AssertZext: { 3260 EVT EVT = cast<VTSDNode>(N2)->getVT(); 3261 assert(VT == N1.getValueType() && "Not an inreg extend!"); 3262 assert(VT.isInteger() && EVT.isInteger() && 3263 "Cannot *_EXTEND_INREG FP types"); 3264 assert(!EVT.isVector() && 3265 "AssertSExt/AssertZExt type should be the vector element type " 3266 "rather than the vector type!"); 3267 assert(EVT.bitsLE(VT) && "Not extending!"); 3268 if (VT == EVT) return N1; // noop assertion. 3269 break; 3270 } 3271 case ISD::SIGN_EXTEND_INREG: { 3272 EVT EVT = cast<VTSDNode>(N2)->getVT(); 3273 assert(VT == N1.getValueType() && "Not an inreg extend!"); 3274 assert(VT.isInteger() && EVT.isInteger() && 3275 "Cannot *_EXTEND_INREG FP types"); 3276 assert(EVT.isVector() == VT.isVector() && 3277 "SIGN_EXTEND_INREG type should be vector iff the operand " 3278 "type is vector!"); 3279 assert((!EVT.isVector() || 3280 EVT.getVectorNumElements() == VT.getVectorNumElements()) && 3281 "Vector element counts must match in SIGN_EXTEND_INREG"); 3282 assert(EVT.bitsLE(VT) && "Not extending!"); 3283 if (EVT == VT) return N1; // Not actually extending 3284 3285 if (N1C) { 3286 APInt Val = N1C->getAPIntValue(); 3287 unsigned FromBits = EVT.getScalarType().getSizeInBits(); 3288 Val <<= Val.getBitWidth()-FromBits; 3289 Val = Val.ashr(Val.getBitWidth()-FromBits); 3290 return getConstant(Val, VT); 3291 } 3292 break; 3293 } 3294 case ISD::EXTRACT_VECTOR_ELT: 3295 // EXTRACT_VECTOR_ELT of an UNDEF is an UNDEF. 3296 if (N1.getOpcode() == ISD::UNDEF) 3297 return getUNDEF(VT); 3298 3299 // EXTRACT_VECTOR_ELT of CONCAT_VECTORS is often formed while lowering is 3300 // expanding copies of large vectors from registers. 3301 if (N2C && 3302 N1.getOpcode() == ISD::CONCAT_VECTORS && 3303 N1.getNumOperands() > 0) { 3304 unsigned Factor = 3305 N1.getOperand(0).getValueType().getVectorNumElements(); 3306 return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, 3307 N1.getOperand(N2C->getZExtValue() / Factor), 3308 getConstant(N2C->getZExtValue() % Factor, 3309 N2.getValueType())); 3310 } 3311 3312 // EXTRACT_VECTOR_ELT of BUILD_VECTOR is often formed while lowering is 3313 // expanding large vector constants. 3314 if (N2C && N1.getOpcode() == ISD::BUILD_VECTOR) { 3315 SDValue Elt = N1.getOperand(N2C->getZExtValue()); 3316 3317 if (VT != Elt.getValueType()) 3318 // If the vector element type is not legal, the BUILD_VECTOR operands 3319 // are promoted and implicitly truncated, and the result implicitly 3320 // extended. Make that explicit here. 3321 Elt = getAnyExtOrTrunc(Elt, DL, VT); 3322 3323 return Elt; 3324 } 3325 3326 // EXTRACT_VECTOR_ELT of INSERT_VECTOR_ELT is often formed when vector 3327 // operations are lowered to scalars. 3328 if (N1.getOpcode() == ISD::INSERT_VECTOR_ELT) { 3329 // If the indices are the same, return the inserted element else 3330 // if the indices are known different, extract the element from 3331 // the original vector. 3332 SDValue N1Op2 = N1.getOperand(2); 3333 ConstantSDNode *N1Op2C = dyn_cast<ConstantSDNode>(N1Op2.getNode()); 3334 3335 if (N1Op2C && N2C) { 3336 if (N1Op2C->getZExtValue() == N2C->getZExtValue()) { 3337 if (VT == N1.getOperand(1).getValueType()) 3338 return N1.getOperand(1); 3339 else 3340 return getSExtOrTrunc(N1.getOperand(1), DL, VT); 3341 } 3342 3343 return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, N1.getOperand(0), N2); 3344 } 3345 } 3346 break; 3347 case ISD::EXTRACT_ELEMENT: 3348 assert(N2C && (unsigned)N2C->getZExtValue() < 2 && "Bad EXTRACT_ELEMENT!"); 3349 assert(!N1.getValueType().isVector() && !VT.isVector() && 3350 (N1.getValueType().isInteger() == VT.isInteger()) && 3351 N1.getValueType() != VT && 3352 "Wrong types for EXTRACT_ELEMENT!"); 3353 3354 // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding 3355 // 64-bit integers into 32-bit parts. Instead of building the extract of 3356 // the BUILD_PAIR, only to have legalize rip it apart, just do it now. 3357 if (N1.getOpcode() == ISD::BUILD_PAIR) 3358 return N1.getOperand(N2C->getZExtValue()); 3359 3360 // EXTRACT_ELEMENT of a constant int is also very common. 3361 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) { 3362 unsigned ElementSize = VT.getSizeInBits(); 3363 unsigned Shift = ElementSize * N2C->getZExtValue(); 3364 APInt ShiftedVal = C->getAPIntValue().lshr(Shift); 3365 return getConstant(ShiftedVal.trunc(ElementSize), VT); 3366 } 3367 break; 3368 case ISD::EXTRACT_SUBVECTOR: { 3369 SDValue Index = N2; 3370 if (VT.isSimple() && N1.getValueType().isSimple()) { 3371 assert(VT.isVector() && N1.getValueType().isVector() && 3372 "Extract subvector VTs must be a vectors!"); 3373 assert(VT.getVectorElementType() == 3374 N1.getValueType().getVectorElementType() && 3375 "Extract subvector VTs must have the same element type!"); 3376 assert(VT.getSimpleVT() <= N1.getSimpleValueType() && 3377 "Extract subvector must be from larger vector to smaller vector!"); 3378 3379 if (isa<ConstantSDNode>(Index.getNode())) { 3380 assert((VT.getVectorNumElements() + 3381 cast<ConstantSDNode>(Index.getNode())->getZExtValue() 3382 <= N1.getValueType().getVectorNumElements()) 3383 && "Extract subvector overflow!"); 3384 } 3385 3386 // Trivial extraction. 3387 if (VT.getSimpleVT() == N1.getSimpleValueType()) 3388 return N1; 3389 } 3390 break; 3391 } 3392 } 3393 3394 // Perform trivial constant folding. 3395 SDValue SV = FoldConstantArithmetic(Opcode, VT, N1.getNode(), N2.getNode()); 3396 if (SV.getNode()) return SV; 3397 3398 // Canonicalize constant to RHS if commutative. 3399 if (N1C && !N2C && isCommutativeBinOp(Opcode)) { 3400 std::swap(N1C, N2C); 3401 std::swap(N1, N2); 3402 } 3403 3404 // Constant fold FP operations. 3405 bool HasFPExceptions = TLI->hasFloatingPointExceptions(); 3406 ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1.getNode()); 3407 ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2.getNode()); 3408 if (N1CFP) { 3409 if (!N2CFP && isCommutativeBinOp(Opcode)) { 3410 // Canonicalize constant to RHS if commutative. 3411 std::swap(N1CFP, N2CFP); 3412 std::swap(N1, N2); 3413 } else if (N2CFP) { 3414 APFloat V1 = N1CFP->getValueAPF(), V2 = N2CFP->getValueAPF(); 3415 APFloat::opStatus s; 3416 switch (Opcode) { 3417 case ISD::FADD: 3418 s = V1.add(V2, APFloat::rmNearestTiesToEven); 3419 if (!HasFPExceptions || s != APFloat::opInvalidOp) 3420 return getConstantFP(V1, VT); 3421 break; 3422 case ISD::FSUB: 3423 s = V1.subtract(V2, APFloat::rmNearestTiesToEven); 3424 if (!HasFPExceptions || s!=APFloat::opInvalidOp) 3425 return getConstantFP(V1, VT); 3426 break; 3427 case ISD::FMUL: 3428 s = V1.multiply(V2, APFloat::rmNearestTiesToEven); 3429 if (!HasFPExceptions || s!=APFloat::opInvalidOp) 3430 return getConstantFP(V1, VT); 3431 break; 3432 case ISD::FDIV: 3433 s = V1.divide(V2, APFloat::rmNearestTiesToEven); 3434 if (!HasFPExceptions || (s!=APFloat::opInvalidOp && 3435 s!=APFloat::opDivByZero)) { 3436 return getConstantFP(V1, VT); 3437 } 3438 break; 3439 case ISD::FREM : 3440 s = V1.mod(V2, APFloat::rmNearestTiesToEven); 3441 if (!HasFPExceptions || (s!=APFloat::opInvalidOp && 3442 s!=APFloat::opDivByZero)) { 3443 return getConstantFP(V1, VT); 3444 } 3445 break; 3446 case ISD::FCOPYSIGN: 3447 V1.copySign(V2); 3448 return getConstantFP(V1, VT); 3449 default: break; 3450 } 3451 } 3452 3453 if (Opcode == ISD::FP_ROUND) { 3454 APFloat V = N1CFP->getValueAPF(); // make copy 3455 bool ignored; 3456 // This can return overflow, underflow, or inexact; we don't care. 3457 // FIXME need to be more flexible about rounding mode. 3458 (void)V.convert(EVTToAPFloatSemantics(VT), 3459 APFloat::rmNearestTiesToEven, &ignored); 3460 return getConstantFP(V, VT); 3461 } 3462 } 3463 3464 // Canonicalize an UNDEF to the RHS, even over a constant. 3465 if (N1.getOpcode() == ISD::UNDEF) { 3466 if (isCommutativeBinOp(Opcode)) { 3467 std::swap(N1, N2); 3468 } else { 3469 switch (Opcode) { 3470 case ISD::FP_ROUND_INREG: 3471 case ISD::SIGN_EXTEND_INREG: 3472 case ISD::SUB: 3473 case ISD::FSUB: 3474 case ISD::FDIV: 3475 case ISD::FREM: 3476 case ISD::SRA: 3477 return N1; // fold op(undef, arg2) -> undef 3478 case ISD::UDIV: 3479 case ISD::SDIV: 3480 case ISD::UREM: 3481 case ISD::SREM: 3482 case ISD::SRL: 3483 case ISD::SHL: 3484 if (!VT.isVector()) 3485 return getConstant(0, VT); // fold op(undef, arg2) -> 0 3486 // For vectors, we can't easily build an all zero vector, just return 3487 // the LHS. 3488 return N2; 3489 } 3490 } 3491 } 3492 3493 // Fold a bunch of operators when the RHS is undef. 3494 if (N2.getOpcode() == ISD::UNDEF) { 3495 switch (Opcode) { 3496 case ISD::XOR: 3497 if (N1.getOpcode() == ISD::UNDEF) 3498 // Handle undef ^ undef -> 0 special case. This is a common 3499 // idiom (misuse). 3500 return getConstant(0, VT); 3501 // fallthrough 3502 case ISD::ADD: 3503 case ISD::ADDC: 3504 case ISD::ADDE: 3505 case ISD::SUB: 3506 case ISD::UDIV: 3507 case ISD::SDIV: 3508 case ISD::UREM: 3509 case ISD::SREM: 3510 return N2; // fold op(arg1, undef) -> undef 3511 case ISD::FADD: 3512 case ISD::FSUB: 3513 case ISD::FMUL: 3514 case ISD::FDIV: 3515 case ISD::FREM: 3516 if (getTarget().Options.UnsafeFPMath) 3517 return N2; 3518 break; 3519 case ISD::MUL: 3520 case ISD::AND: 3521 case ISD::SRL: 3522 case ISD::SHL: 3523 if (!VT.isVector()) 3524 return getConstant(0, VT); // fold op(arg1, undef) -> 0 3525 // For vectors, we can't easily build an all zero vector, just return 3526 // the LHS. 3527 return N1; 3528 case ISD::OR: 3529 if (!VT.isVector()) 3530 return getConstant(APInt::getAllOnesValue(VT.getSizeInBits()), VT); 3531 // For vectors, we can't easily build an all one vector, just return 3532 // the LHS. 3533 return N1; 3534 case ISD::SRA: 3535 return N1; 3536 } 3537 } 3538 3539 // Memoize this node if possible. 3540 BinarySDNode *N; 3541 SDVTList VTs = getVTList(VT); 3542 const bool BinOpHasFlags = isBinOpWithFlags(Opcode); 3543 if (VT != MVT::Glue) { 3544 SDValue Ops[] = {N1, N2}; 3545 FoldingSetNodeID ID; 3546 AddNodeIDNode(ID, Opcode, VTs, Ops); 3547 if (BinOpHasFlags) 3548 AddBinaryNodeIDCustom(ID, Opcode, nuw, nsw, exact); 3549 void *IP = nullptr; 3550 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 3551 return SDValue(E, 0); 3552 3553 N = GetBinarySDNode(Opcode, DL, VTs, N1, N2, nuw, nsw, exact); 3554 3555 CSEMap.InsertNode(N, IP); 3556 } else { 3557 3558 N = GetBinarySDNode(Opcode, DL, VTs, N1, N2, nuw, nsw, exact); 3559 } 3560 3561 InsertNode(N); 3562 return SDValue(N, 0); 3563 } 3564 3565 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 3566 SDValue N1, SDValue N2, SDValue N3) { 3567 // Perform various simplifications. 3568 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode()); 3569 switch (Opcode) { 3570 case ISD::FMA: { 3571 ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1); 3572 ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2); 3573 ConstantFPSDNode *N3CFP = dyn_cast<ConstantFPSDNode>(N3); 3574 if (N1CFP && N2CFP && N3CFP) { 3575 APFloat V1 = N1CFP->getValueAPF(); 3576 const APFloat &V2 = N2CFP->getValueAPF(); 3577 const APFloat &V3 = N3CFP->getValueAPF(); 3578 APFloat::opStatus s = 3579 V1.fusedMultiplyAdd(V2, V3, APFloat::rmNearestTiesToEven); 3580 if (s != APFloat::opInvalidOp) 3581 return getConstantFP(V1, VT); 3582 } 3583 break; 3584 } 3585 case ISD::CONCAT_VECTORS: 3586 // A CONCAT_VECTOR with all operands BUILD_VECTOR can be simplified to 3587 // one big BUILD_VECTOR. 3588 if (N1.getOpcode() == ISD::BUILD_VECTOR && 3589 N2.getOpcode() == ISD::BUILD_VECTOR && 3590 N3.getOpcode() == ISD::BUILD_VECTOR) { 3591 SmallVector<SDValue, 16> Elts(N1.getNode()->op_begin(), 3592 N1.getNode()->op_end()); 3593 Elts.append(N2.getNode()->op_begin(), N2.getNode()->op_end()); 3594 Elts.append(N3.getNode()->op_begin(), N3.getNode()->op_end()); 3595 return getNode(ISD::BUILD_VECTOR, DL, VT, Elts); 3596 } 3597 break; 3598 case ISD::SETCC: { 3599 // Use FoldSetCC to simplify SETCC's. 3600 SDValue Simp = FoldSetCC(VT, N1, N2, cast<CondCodeSDNode>(N3)->get(), DL); 3601 if (Simp.getNode()) return Simp; 3602 break; 3603 } 3604 case ISD::SELECT: 3605 if (N1C) { 3606 if (N1C->getZExtValue()) 3607 return N2; // select true, X, Y -> X 3608 return N3; // select false, X, Y -> Y 3609 } 3610 3611 if (N2 == N3) return N2; // select C, X, X -> X 3612 break; 3613 case ISD::VECTOR_SHUFFLE: 3614 llvm_unreachable("should use getVectorShuffle constructor!"); 3615 case ISD::INSERT_SUBVECTOR: { 3616 SDValue Index = N3; 3617 if (VT.isSimple() && N1.getValueType().isSimple() 3618 && N2.getValueType().isSimple()) { 3619 assert(VT.isVector() && N1.getValueType().isVector() && 3620 N2.getValueType().isVector() && 3621 "Insert subvector VTs must be a vectors"); 3622 assert(VT == N1.getValueType() && 3623 "Dest and insert subvector source types must match!"); 3624 assert(N2.getSimpleValueType() <= N1.getSimpleValueType() && 3625 "Insert subvector must be from smaller vector to larger vector!"); 3626 if (isa<ConstantSDNode>(Index.getNode())) { 3627 assert((N2.getValueType().getVectorNumElements() + 3628 cast<ConstantSDNode>(Index.getNode())->getZExtValue() 3629 <= VT.getVectorNumElements()) 3630 && "Insert subvector overflow!"); 3631 } 3632 3633 // Trivial insertion. 3634 if (VT.getSimpleVT() == N2.getSimpleValueType()) 3635 return N2; 3636 } 3637 break; 3638 } 3639 case ISD::BITCAST: 3640 // Fold bit_convert nodes from a type to themselves. 3641 if (N1.getValueType() == VT) 3642 return N1; 3643 break; 3644 } 3645 3646 // Memoize node if it doesn't produce a flag. 3647 SDNode *N; 3648 SDVTList VTs = getVTList(VT); 3649 if (VT != MVT::Glue) { 3650 SDValue Ops[] = { N1, N2, N3 }; 3651 FoldingSetNodeID ID; 3652 AddNodeIDNode(ID, Opcode, VTs, Ops); 3653 void *IP = nullptr; 3654 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 3655 return SDValue(E, 0); 3656 3657 N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(), 3658 DL.getDebugLoc(), VTs, N1, N2, N3); 3659 CSEMap.InsertNode(N, IP); 3660 } else { 3661 N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(), 3662 DL.getDebugLoc(), VTs, N1, N2, N3); 3663 } 3664 3665 InsertNode(N); 3666 return SDValue(N, 0); 3667 } 3668 3669 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 3670 SDValue N1, SDValue N2, SDValue N3, 3671 SDValue N4) { 3672 SDValue Ops[] = { N1, N2, N3, N4 }; 3673 return getNode(Opcode, DL, VT, Ops); 3674 } 3675 3676 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 3677 SDValue N1, SDValue N2, SDValue N3, 3678 SDValue N4, SDValue N5) { 3679 SDValue Ops[] = { N1, N2, N3, N4, N5 }; 3680 return getNode(Opcode, DL, VT, Ops); 3681 } 3682 3683 /// getStackArgumentTokenFactor - Compute a TokenFactor to force all 3684 /// the incoming stack arguments to be loaded from the stack. 3685 SDValue SelectionDAG::getStackArgumentTokenFactor(SDValue Chain) { 3686 SmallVector<SDValue, 8> ArgChains; 3687 3688 // Include the original chain at the beginning of the list. When this is 3689 // used by target LowerCall hooks, this helps legalize find the 3690 // CALLSEQ_BEGIN node. 3691 ArgChains.push_back(Chain); 3692 3693 // Add a chain value for each stack argument. 3694 for (SDNode::use_iterator U = getEntryNode().getNode()->use_begin(), 3695 UE = getEntryNode().getNode()->use_end(); U != UE; ++U) 3696 if (LoadSDNode *L = dyn_cast<LoadSDNode>(*U)) 3697 if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(L->getBasePtr())) 3698 if (FI->getIndex() < 0) 3699 ArgChains.push_back(SDValue(L, 1)); 3700 3701 // Build a tokenfactor for all the chains. 3702 return getNode(ISD::TokenFactor, SDLoc(Chain), MVT::Other, ArgChains); 3703 } 3704 3705 /// getMemsetValue - Vectorized representation of the memset value 3706 /// operand. 3707 static SDValue getMemsetValue(SDValue Value, EVT VT, SelectionDAG &DAG, 3708 SDLoc dl) { 3709 assert(Value.getOpcode() != ISD::UNDEF); 3710 3711 unsigned NumBits = VT.getScalarType().getSizeInBits(); 3712 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Value)) { 3713 assert(C->getAPIntValue().getBitWidth() == 8); 3714 APInt Val = APInt::getSplat(NumBits, C->getAPIntValue()); 3715 if (VT.isInteger()) 3716 return DAG.getConstant(Val, VT); 3717 return DAG.getConstantFP(APFloat(DAG.EVTToAPFloatSemantics(VT), Val), VT); 3718 } 3719 3720 Value = DAG.getNode(ISD::ZERO_EXTEND, dl, VT, Value); 3721 if (NumBits > 8) { 3722 // Use a multiplication with 0x010101... to extend the input to the 3723 // required length. 3724 APInt Magic = APInt::getSplat(NumBits, APInt(8, 0x01)); 3725 Value = DAG.getNode(ISD::MUL, dl, VT, Value, DAG.getConstant(Magic, VT)); 3726 } 3727 3728 return Value; 3729 } 3730 3731 /// getMemsetStringVal - Similar to getMemsetValue. Except this is only 3732 /// used when a memcpy is turned into a memset when the source is a constant 3733 /// string ptr. 3734 static SDValue getMemsetStringVal(EVT VT, SDLoc dl, SelectionDAG &DAG, 3735 const TargetLowering &TLI, StringRef Str) { 3736 // Handle vector with all elements zero. 3737 if (Str.empty()) { 3738 if (VT.isInteger()) 3739 return DAG.getConstant(0, VT); 3740 else if (VT == MVT::f32 || VT == MVT::f64 || VT == MVT::f128) 3741 return DAG.getConstantFP(0.0, VT); 3742 else if (VT.isVector()) { 3743 unsigned NumElts = VT.getVectorNumElements(); 3744 MVT EltVT = (VT.getVectorElementType() == MVT::f32) ? MVT::i32 : MVT::i64; 3745 return DAG.getNode(ISD::BITCAST, dl, VT, 3746 DAG.getConstant(0, EVT::getVectorVT(*DAG.getContext(), 3747 EltVT, NumElts))); 3748 } else 3749 llvm_unreachable("Expected type!"); 3750 } 3751 3752 assert(!VT.isVector() && "Can't handle vector type here!"); 3753 unsigned NumVTBits = VT.getSizeInBits(); 3754 unsigned NumVTBytes = NumVTBits / 8; 3755 unsigned NumBytes = std::min(NumVTBytes, unsigned(Str.size())); 3756 3757 APInt Val(NumVTBits, 0); 3758 if (TLI.isLittleEndian()) { 3759 for (unsigned i = 0; i != NumBytes; ++i) 3760 Val |= (uint64_t)(unsigned char)Str[i] << i*8; 3761 } else { 3762 for (unsigned i = 0; i != NumBytes; ++i) 3763 Val |= (uint64_t)(unsigned char)Str[i] << (NumVTBytes-i-1)*8; 3764 } 3765 3766 // If the "cost" of materializing the integer immediate is less than the cost 3767 // of a load, then it is cost effective to turn the load into the immediate. 3768 Type *Ty = VT.getTypeForEVT(*DAG.getContext()); 3769 if (TLI.shouldConvertConstantLoadToIntImm(Val, Ty)) 3770 return DAG.getConstant(Val, VT); 3771 return SDValue(nullptr, 0); 3772 } 3773 3774 /// getMemBasePlusOffset - Returns base and offset node for the 3775 /// 3776 static SDValue getMemBasePlusOffset(SDValue Base, unsigned Offset, SDLoc dl, 3777 SelectionDAG &DAG) { 3778 EVT VT = Base.getValueType(); 3779 return DAG.getNode(ISD::ADD, dl, 3780 VT, Base, DAG.getConstant(Offset, VT)); 3781 } 3782 3783 /// isMemSrcFromString - Returns true if memcpy source is a string constant. 3784 /// 3785 static bool isMemSrcFromString(SDValue Src, StringRef &Str) { 3786 unsigned SrcDelta = 0; 3787 GlobalAddressSDNode *G = nullptr; 3788 if (Src.getOpcode() == ISD::GlobalAddress) 3789 G = cast<GlobalAddressSDNode>(Src); 3790 else if (Src.getOpcode() == ISD::ADD && 3791 Src.getOperand(0).getOpcode() == ISD::GlobalAddress && 3792 Src.getOperand(1).getOpcode() == ISD::Constant) { 3793 G = cast<GlobalAddressSDNode>(Src.getOperand(0)); 3794 SrcDelta = cast<ConstantSDNode>(Src.getOperand(1))->getZExtValue(); 3795 } 3796 if (!G) 3797 return false; 3798 3799 return getConstantStringInfo(G->getGlobal(), Str, SrcDelta, false); 3800 } 3801 3802 /// FindOptimalMemOpLowering - Determines the optimial series memory ops 3803 /// to replace the memset / memcpy. Return true if the number of memory ops 3804 /// is below the threshold. It returns the types of the sequence of 3805 /// memory ops to perform memset / memcpy by reference. 3806 static bool FindOptimalMemOpLowering(std::vector<EVT> &MemOps, 3807 unsigned Limit, uint64_t Size, 3808 unsigned DstAlign, unsigned SrcAlign, 3809 bool IsMemset, 3810 bool ZeroMemset, 3811 bool MemcpyStrSrc, 3812 bool AllowOverlap, 3813 SelectionDAG &DAG, 3814 const TargetLowering &TLI) { 3815 assert((SrcAlign == 0 || SrcAlign >= DstAlign) && 3816 "Expecting memcpy / memset source to meet alignment requirement!"); 3817 // If 'SrcAlign' is zero, that means the memory operation does not need to 3818 // load the value, i.e. memset or memcpy from constant string. Otherwise, 3819 // it's the inferred alignment of the source. 'DstAlign', on the other hand, 3820 // is the specified alignment of the memory operation. If it is zero, that 3821 // means it's possible to change the alignment of the destination. 3822 // 'MemcpyStrSrc' indicates whether the memcpy source is constant so it does 3823 // not need to be loaded. 3824 EVT VT = TLI.getOptimalMemOpType(Size, DstAlign, SrcAlign, 3825 IsMemset, ZeroMemset, MemcpyStrSrc, 3826 DAG.getMachineFunction()); 3827 3828 if (VT == MVT::Other) { 3829 unsigned AS = 0; 3830 if (DstAlign >= TLI.getDataLayout()->getPointerPrefAlignment(AS) || 3831 TLI.allowsMisalignedMemoryAccesses(VT, AS, DstAlign)) { 3832 VT = TLI.getPointerTy(); 3833 } else { 3834 switch (DstAlign & 7) { 3835 case 0: VT = MVT::i64; break; 3836 case 4: VT = MVT::i32; break; 3837 case 2: VT = MVT::i16; break; 3838 default: VT = MVT::i8; break; 3839 } 3840 } 3841 3842 MVT LVT = MVT::i64; 3843 while (!TLI.isTypeLegal(LVT)) 3844 LVT = (MVT::SimpleValueType)(LVT.SimpleTy - 1); 3845 assert(LVT.isInteger()); 3846 3847 if (VT.bitsGT(LVT)) 3848 VT = LVT; 3849 } 3850 3851 unsigned NumMemOps = 0; 3852 while (Size != 0) { 3853 unsigned VTSize = VT.getSizeInBits() / 8; 3854 while (VTSize > Size) { 3855 // For now, only use non-vector load / store's for the left-over pieces. 3856 EVT NewVT = VT; 3857 unsigned NewVTSize; 3858 3859 bool Found = false; 3860 if (VT.isVector() || VT.isFloatingPoint()) { 3861 NewVT = (VT.getSizeInBits() > 64) ? MVT::i64 : MVT::i32; 3862 if (TLI.isOperationLegalOrCustom(ISD::STORE, NewVT) && 3863 TLI.isSafeMemOpType(NewVT.getSimpleVT())) 3864 Found = true; 3865 else if (NewVT == MVT::i64 && 3866 TLI.isOperationLegalOrCustom(ISD::STORE, MVT::f64) && 3867 TLI.isSafeMemOpType(MVT::f64)) { 3868 // i64 is usually not legal on 32-bit targets, but f64 may be. 3869 NewVT = MVT::f64; 3870 Found = true; 3871 } 3872 } 3873 3874 if (!Found) { 3875 do { 3876 NewVT = (MVT::SimpleValueType)(NewVT.getSimpleVT().SimpleTy - 1); 3877 if (NewVT == MVT::i8) 3878 break; 3879 } while (!TLI.isSafeMemOpType(NewVT.getSimpleVT())); 3880 } 3881 NewVTSize = NewVT.getSizeInBits() / 8; 3882 3883 // If the new VT cannot cover all of the remaining bits, then consider 3884 // issuing a (or a pair of) unaligned and overlapping load / store. 3885 // FIXME: Only does this for 64-bit or more since we don't have proper 3886 // cost model for unaligned load / store. 3887 bool Fast; 3888 unsigned AS = 0; 3889 if (NumMemOps && AllowOverlap && 3890 VTSize >= 8 && NewVTSize < Size && 3891 TLI.allowsMisalignedMemoryAccesses(VT, AS, DstAlign, &Fast) && Fast) 3892 VTSize = Size; 3893 else { 3894 VT = NewVT; 3895 VTSize = NewVTSize; 3896 } 3897 } 3898 3899 if (++NumMemOps > Limit) 3900 return false; 3901 3902 MemOps.push_back(VT); 3903 Size -= VTSize; 3904 } 3905 3906 return true; 3907 } 3908 3909 static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, SDLoc dl, 3910 SDValue Chain, SDValue Dst, 3911 SDValue Src, uint64_t Size, 3912 unsigned Align, bool isVol, 3913 bool AlwaysInline, 3914 MachinePointerInfo DstPtrInfo, 3915 MachinePointerInfo SrcPtrInfo) { 3916 // Turn a memcpy of undef to nop. 3917 if (Src.getOpcode() == ISD::UNDEF) 3918 return Chain; 3919 3920 // Expand memcpy to a series of load and store ops if the size operand falls 3921 // below a certain threshold. 3922 // TODO: In the AlwaysInline case, if the size is big then generate a loop 3923 // rather than maybe a humongous number of loads and stores. 3924 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 3925 std::vector<EVT> MemOps; 3926 bool DstAlignCanChange = false; 3927 MachineFunction &MF = DAG.getMachineFunction(); 3928 MachineFrameInfo *MFI = MF.getFrameInfo(); 3929 bool OptSize = 3930 MF.getFunction()->getAttributes(). 3931 hasAttribute(AttributeSet::FunctionIndex, Attribute::OptimizeForSize); 3932 FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst); 3933 if (FI && !MFI->isFixedObjectIndex(FI->getIndex())) 3934 DstAlignCanChange = true; 3935 unsigned SrcAlign = DAG.InferPtrAlignment(Src); 3936 if (Align > SrcAlign) 3937 SrcAlign = Align; 3938 StringRef Str; 3939 bool CopyFromStr = isMemSrcFromString(Src, Str); 3940 bool isZeroStr = CopyFromStr && Str.empty(); 3941 unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemcpy(OptSize); 3942 3943 if (!FindOptimalMemOpLowering(MemOps, Limit, Size, 3944 (DstAlignCanChange ? 0 : Align), 3945 (isZeroStr ? 0 : SrcAlign), 3946 false, false, CopyFromStr, true, DAG, TLI)) 3947 return SDValue(); 3948 3949 if (DstAlignCanChange) { 3950 Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext()); 3951 unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty); 3952 3953 // Don't promote to an alignment that would require dynamic stack 3954 // realignment. 3955 const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo(); 3956 if (!TRI->needsStackRealignment(MF)) 3957 while (NewAlign > Align && 3958 TLI.getDataLayout()->exceedsNaturalStackAlignment(NewAlign)) 3959 NewAlign /= 2; 3960 3961 if (NewAlign > Align) { 3962 // Give the stack frame object a larger alignment if needed. 3963 if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign) 3964 MFI->setObjectAlignment(FI->getIndex(), NewAlign); 3965 Align = NewAlign; 3966 } 3967 } 3968 3969 SmallVector<SDValue, 8> OutChains; 3970 unsigned NumMemOps = MemOps.size(); 3971 uint64_t SrcOff = 0, DstOff = 0; 3972 for (unsigned i = 0; i != NumMemOps; ++i) { 3973 EVT VT = MemOps[i]; 3974 unsigned VTSize = VT.getSizeInBits() / 8; 3975 SDValue Value, Store; 3976 3977 if (VTSize > Size) { 3978 // Issuing an unaligned load / store pair that overlaps with the previous 3979 // pair. Adjust the offset accordingly. 3980 assert(i == NumMemOps-1 && i != 0); 3981 SrcOff -= VTSize - Size; 3982 DstOff -= VTSize - Size; 3983 } 3984 3985 if (CopyFromStr && 3986 (isZeroStr || (VT.isInteger() && !VT.isVector()))) { 3987 // It's unlikely a store of a vector immediate can be done in a single 3988 // instruction. It would require a load from a constantpool first. 3989 // We only handle zero vectors here. 3990 // FIXME: Handle other cases where store of vector immediate is done in 3991 // a single instruction. 3992 Value = getMemsetStringVal(VT, dl, DAG, TLI, Str.substr(SrcOff)); 3993 if (Value.getNode()) 3994 Store = DAG.getStore(Chain, dl, Value, 3995 getMemBasePlusOffset(Dst, DstOff, dl, DAG), 3996 DstPtrInfo.getWithOffset(DstOff), isVol, 3997 false, Align); 3998 } 3999 4000 if (!Store.getNode()) { 4001 // The type might not be legal for the target. This should only happen 4002 // if the type is smaller than a legal type, as on PPC, so the right 4003 // thing to do is generate a LoadExt/StoreTrunc pair. These simplify 4004 // to Load/Store if NVT==VT. 4005 // FIXME does the case above also need this? 4006 EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT); 4007 assert(NVT.bitsGE(VT)); 4008 Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain, 4009 getMemBasePlusOffset(Src, SrcOff, dl, DAG), 4010 SrcPtrInfo.getWithOffset(SrcOff), VT, isVol, false, 4011 false, MinAlign(SrcAlign, SrcOff)); 4012 Store = DAG.getTruncStore(Chain, dl, Value, 4013 getMemBasePlusOffset(Dst, DstOff, dl, DAG), 4014 DstPtrInfo.getWithOffset(DstOff), VT, isVol, 4015 false, Align); 4016 } 4017 OutChains.push_back(Store); 4018 SrcOff += VTSize; 4019 DstOff += VTSize; 4020 Size -= VTSize; 4021 } 4022 4023 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); 4024 } 4025 4026 static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, SDLoc dl, 4027 SDValue Chain, SDValue Dst, 4028 SDValue Src, uint64_t Size, 4029 unsigned Align, bool isVol, 4030 bool AlwaysInline, 4031 MachinePointerInfo DstPtrInfo, 4032 MachinePointerInfo SrcPtrInfo) { 4033 // Turn a memmove of undef to nop. 4034 if (Src.getOpcode() == ISD::UNDEF) 4035 return Chain; 4036 4037 // Expand memmove to a series of load and store ops if the size operand falls 4038 // below a certain threshold. 4039 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 4040 std::vector<EVT> MemOps; 4041 bool DstAlignCanChange = false; 4042 MachineFunction &MF = DAG.getMachineFunction(); 4043 MachineFrameInfo *MFI = MF.getFrameInfo(); 4044 bool OptSize = MF.getFunction()->getAttributes(). 4045 hasAttribute(AttributeSet::FunctionIndex, Attribute::OptimizeForSize); 4046 FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst); 4047 if (FI && !MFI->isFixedObjectIndex(FI->getIndex())) 4048 DstAlignCanChange = true; 4049 unsigned SrcAlign = DAG.InferPtrAlignment(Src); 4050 if (Align > SrcAlign) 4051 SrcAlign = Align; 4052 unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemmove(OptSize); 4053 4054 if (!FindOptimalMemOpLowering(MemOps, Limit, Size, 4055 (DstAlignCanChange ? 0 : Align), SrcAlign, 4056 false, false, false, false, DAG, TLI)) 4057 return SDValue(); 4058 4059 if (DstAlignCanChange) { 4060 Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext()); 4061 unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty); 4062 if (NewAlign > Align) { 4063 // Give the stack frame object a larger alignment if needed. 4064 if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign) 4065 MFI->setObjectAlignment(FI->getIndex(), NewAlign); 4066 Align = NewAlign; 4067 } 4068 } 4069 4070 uint64_t SrcOff = 0, DstOff = 0; 4071 SmallVector<SDValue, 8> LoadValues; 4072 SmallVector<SDValue, 8> LoadChains; 4073 SmallVector<SDValue, 8> OutChains; 4074 unsigned NumMemOps = MemOps.size(); 4075 for (unsigned i = 0; i < NumMemOps; i++) { 4076 EVT VT = MemOps[i]; 4077 unsigned VTSize = VT.getSizeInBits() / 8; 4078 SDValue Value; 4079 4080 Value = DAG.getLoad(VT, dl, Chain, 4081 getMemBasePlusOffset(Src, SrcOff, dl, DAG), 4082 SrcPtrInfo.getWithOffset(SrcOff), isVol, 4083 false, false, SrcAlign); 4084 LoadValues.push_back(Value); 4085 LoadChains.push_back(Value.getValue(1)); 4086 SrcOff += VTSize; 4087 } 4088 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, LoadChains); 4089 OutChains.clear(); 4090 for (unsigned i = 0; i < NumMemOps; i++) { 4091 EVT VT = MemOps[i]; 4092 unsigned VTSize = VT.getSizeInBits() / 8; 4093 SDValue Store; 4094 4095 Store = DAG.getStore(Chain, dl, LoadValues[i], 4096 getMemBasePlusOffset(Dst, DstOff, dl, DAG), 4097 DstPtrInfo.getWithOffset(DstOff), isVol, false, Align); 4098 OutChains.push_back(Store); 4099 DstOff += VTSize; 4100 } 4101 4102 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); 4103 } 4104 4105 /// \brief Lower the call to 'memset' intrinsic function into a series of store 4106 /// operations. 4107 /// 4108 /// \param DAG Selection DAG where lowered code is placed. 4109 /// \param dl Link to corresponding IR location. 4110 /// \param Chain Control flow dependency. 4111 /// \param Dst Pointer to destination memory location. 4112 /// \param Src Value of byte to write into the memory. 4113 /// \param Size Number of bytes to write. 4114 /// \param Align Alignment of the destination in bytes. 4115 /// \param isVol True if destination is volatile. 4116 /// \param DstPtrInfo IR information on the memory pointer. 4117 /// \returns New head in the control flow, if lowering was successful, empty 4118 /// SDValue otherwise. 4119 /// 4120 /// The function tries to replace 'llvm.memset' intrinsic with several store 4121 /// operations and value calculation code. This is usually profitable for small 4122 /// memory size. 4123 static SDValue getMemsetStores(SelectionDAG &DAG, SDLoc dl, 4124 SDValue Chain, SDValue Dst, 4125 SDValue Src, uint64_t Size, 4126 unsigned Align, bool isVol, 4127 MachinePointerInfo DstPtrInfo) { 4128 // Turn a memset of undef to nop. 4129 if (Src.getOpcode() == ISD::UNDEF) 4130 return Chain; 4131 4132 // Expand memset to a series of load/store ops if the size operand 4133 // falls below a certain threshold. 4134 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 4135 std::vector<EVT> MemOps; 4136 bool DstAlignCanChange = false; 4137 MachineFunction &MF = DAG.getMachineFunction(); 4138 MachineFrameInfo *MFI = MF.getFrameInfo(); 4139 bool OptSize = MF.getFunction()->getAttributes(). 4140 hasAttribute(AttributeSet::FunctionIndex, Attribute::OptimizeForSize); 4141 FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst); 4142 if (FI && !MFI->isFixedObjectIndex(FI->getIndex())) 4143 DstAlignCanChange = true; 4144 bool IsZeroVal = 4145 isa<ConstantSDNode>(Src) && cast<ConstantSDNode>(Src)->isNullValue(); 4146 if (!FindOptimalMemOpLowering(MemOps, TLI.getMaxStoresPerMemset(OptSize), 4147 Size, (DstAlignCanChange ? 0 : Align), 0, 4148 true, IsZeroVal, false, true, DAG, TLI)) 4149 return SDValue(); 4150 4151 if (DstAlignCanChange) { 4152 Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext()); 4153 unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty); 4154 if (NewAlign > Align) { 4155 // Give the stack frame object a larger alignment if needed. 4156 if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign) 4157 MFI->setObjectAlignment(FI->getIndex(), NewAlign); 4158 Align = NewAlign; 4159 } 4160 } 4161 4162 SmallVector<SDValue, 8> OutChains; 4163 uint64_t DstOff = 0; 4164 unsigned NumMemOps = MemOps.size(); 4165 4166 // Find the largest store and generate the bit pattern for it. 4167 EVT LargestVT = MemOps[0]; 4168 for (unsigned i = 1; i < NumMemOps; i++) 4169 if (MemOps[i].bitsGT(LargestVT)) 4170 LargestVT = MemOps[i]; 4171 SDValue MemSetValue = getMemsetValue(Src, LargestVT, DAG, dl); 4172 4173 for (unsigned i = 0; i < NumMemOps; i++) { 4174 EVT VT = MemOps[i]; 4175 unsigned VTSize = VT.getSizeInBits() / 8; 4176 if (VTSize > Size) { 4177 // Issuing an unaligned load / store pair that overlaps with the previous 4178 // pair. Adjust the offset accordingly. 4179 assert(i == NumMemOps-1 && i != 0); 4180 DstOff -= VTSize - Size; 4181 } 4182 4183 // If this store is smaller than the largest store see whether we can get 4184 // the smaller value for free with a truncate. 4185 SDValue Value = MemSetValue; 4186 if (VT.bitsLT(LargestVT)) { 4187 if (!LargestVT.isVector() && !VT.isVector() && 4188 TLI.isTruncateFree(LargestVT, VT)) 4189 Value = DAG.getNode(ISD::TRUNCATE, dl, VT, MemSetValue); 4190 else 4191 Value = getMemsetValue(Src, VT, DAG, dl); 4192 } 4193 assert(Value.getValueType() == VT && "Value with wrong type."); 4194 SDValue Store = DAG.getStore(Chain, dl, Value, 4195 getMemBasePlusOffset(Dst, DstOff, dl, DAG), 4196 DstPtrInfo.getWithOffset(DstOff), 4197 isVol, false, Align); 4198 OutChains.push_back(Store); 4199 DstOff += VT.getSizeInBits() / 8; 4200 Size -= VTSize; 4201 } 4202 4203 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); 4204 } 4205 4206 SDValue SelectionDAG::getMemcpy(SDValue Chain, SDLoc dl, SDValue Dst, 4207 SDValue Src, SDValue Size, 4208 unsigned Align, bool isVol, bool AlwaysInline, 4209 MachinePointerInfo DstPtrInfo, 4210 MachinePointerInfo SrcPtrInfo) { 4211 assert(Align && "The SDAG layer expects explicit alignment and reserves 0"); 4212 4213 // Check to see if we should lower the memcpy to loads and stores first. 4214 // For cases within the target-specified limits, this is the best choice. 4215 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 4216 if (ConstantSize) { 4217 // Memcpy with size zero? Just return the original chain. 4218 if (ConstantSize->isNullValue()) 4219 return Chain; 4220 4221 SDValue Result = getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src, 4222 ConstantSize->getZExtValue(),Align, 4223 isVol, false, DstPtrInfo, SrcPtrInfo); 4224 if (Result.getNode()) 4225 return Result; 4226 } 4227 4228 // Then check to see if we should lower the memcpy with target-specific 4229 // code. If the target chooses to do this, this is the next best. 4230 SDValue Result = 4231 TSI->EmitTargetCodeForMemcpy(*this, dl, Chain, Dst, Src, Size, Align, 4232 isVol, AlwaysInline, DstPtrInfo, SrcPtrInfo); 4233 if (Result.getNode()) 4234 return Result; 4235 4236 // If we really need inline code and the target declined to provide it, 4237 // use a (potentially long) sequence of loads and stores. 4238 if (AlwaysInline) { 4239 assert(ConstantSize && "AlwaysInline requires a constant size!"); 4240 return getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src, 4241 ConstantSize->getZExtValue(), Align, isVol, 4242 true, DstPtrInfo, SrcPtrInfo); 4243 } 4244 4245 // FIXME: If the memcpy is volatile (isVol), lowering it to a plain libc 4246 // memcpy is not guaranteed to be safe. libc memcpys aren't required to 4247 // respect volatile, so they may do things like read or write memory 4248 // beyond the given memory regions. But fixing this isn't easy, and most 4249 // people don't care. 4250 4251 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 4252 4253 // Emit a library call. 4254 TargetLowering::ArgListTy Args; 4255 TargetLowering::ArgListEntry Entry; 4256 Entry.Ty = TLI->getDataLayout()->getIntPtrType(*getContext()); 4257 Entry.Node = Dst; Args.push_back(Entry); 4258 Entry.Node = Src; Args.push_back(Entry); 4259 Entry.Node = Size; Args.push_back(Entry); 4260 // FIXME: pass in SDLoc 4261 TargetLowering::CallLoweringInfo CLI(*this); 4262 CLI.setDebugLoc(dl).setChain(Chain) 4263 .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMCPY), 4264 Type::getVoidTy(*getContext()), 4265 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMCPY), 4266 TLI->getPointerTy()), std::move(Args), 0) 4267 .setDiscardResult(); 4268 std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI); 4269 4270 return CallResult.second; 4271 } 4272 4273 SDValue SelectionDAG::getMemmove(SDValue Chain, SDLoc dl, SDValue Dst, 4274 SDValue Src, SDValue Size, 4275 unsigned Align, bool isVol, 4276 MachinePointerInfo DstPtrInfo, 4277 MachinePointerInfo SrcPtrInfo) { 4278 assert(Align && "The SDAG layer expects explicit alignment and reserves 0"); 4279 4280 // Check to see if we should lower the memmove to loads and stores first. 4281 // For cases within the target-specified limits, this is the best choice. 4282 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 4283 if (ConstantSize) { 4284 // Memmove with size zero? Just return the original chain. 4285 if (ConstantSize->isNullValue()) 4286 return Chain; 4287 4288 SDValue Result = 4289 getMemmoveLoadsAndStores(*this, dl, Chain, Dst, Src, 4290 ConstantSize->getZExtValue(), Align, isVol, 4291 false, DstPtrInfo, SrcPtrInfo); 4292 if (Result.getNode()) 4293 return Result; 4294 } 4295 4296 // Then check to see if we should lower the memmove with target-specific 4297 // code. If the target chooses to do this, this is the next best. 4298 SDValue Result = TSI->EmitTargetCodeForMemmove( 4299 *this, dl, Chain, Dst, Src, Size, Align, isVol, DstPtrInfo, SrcPtrInfo); 4300 if (Result.getNode()) 4301 return Result; 4302 4303 // FIXME: If the memmove is volatile, lowering it to plain libc memmove may 4304 // not be safe. See memcpy above for more details. 4305 4306 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 4307 4308 // Emit a library call. 4309 TargetLowering::ArgListTy Args; 4310 TargetLowering::ArgListEntry Entry; 4311 Entry.Ty = TLI->getDataLayout()->getIntPtrType(*getContext()); 4312 Entry.Node = Dst; Args.push_back(Entry); 4313 Entry.Node = Src; Args.push_back(Entry); 4314 Entry.Node = Size; Args.push_back(Entry); 4315 // FIXME: pass in SDLoc 4316 TargetLowering::CallLoweringInfo CLI(*this); 4317 CLI.setDebugLoc(dl).setChain(Chain) 4318 .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMMOVE), 4319 Type::getVoidTy(*getContext()), 4320 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMMOVE), 4321 TLI->getPointerTy()), std::move(Args), 0) 4322 .setDiscardResult(); 4323 std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI); 4324 4325 return CallResult.second; 4326 } 4327 4328 SDValue SelectionDAG::getMemset(SDValue Chain, SDLoc dl, SDValue Dst, 4329 SDValue Src, SDValue Size, 4330 unsigned Align, bool isVol, 4331 MachinePointerInfo DstPtrInfo) { 4332 assert(Align && "The SDAG layer expects explicit alignment and reserves 0"); 4333 4334 // Check to see if we should lower the memset to stores first. 4335 // For cases within the target-specified limits, this is the best choice. 4336 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 4337 if (ConstantSize) { 4338 // Memset with size zero? Just return the original chain. 4339 if (ConstantSize->isNullValue()) 4340 return Chain; 4341 4342 SDValue Result = 4343 getMemsetStores(*this, dl, Chain, Dst, Src, ConstantSize->getZExtValue(), 4344 Align, isVol, DstPtrInfo); 4345 4346 if (Result.getNode()) 4347 return Result; 4348 } 4349 4350 // Then check to see if we should lower the memset with target-specific 4351 // code. If the target chooses to do this, this is the next best. 4352 SDValue Result = TSI->EmitTargetCodeForMemset(*this, dl, Chain, Dst, Src, 4353 Size, Align, isVol, DstPtrInfo); 4354 if (Result.getNode()) 4355 return Result; 4356 4357 // Emit a library call. 4358 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 4359 Type *IntPtrTy = TLI->getDataLayout()->getIntPtrType(*getContext()); 4360 TargetLowering::ArgListTy Args; 4361 TargetLowering::ArgListEntry Entry; 4362 Entry.Node = Dst; Entry.Ty = IntPtrTy; 4363 Args.push_back(Entry); 4364 Entry.Node = Src; 4365 Entry.Ty = Src.getValueType().getTypeForEVT(*getContext()); 4366 Args.push_back(Entry); 4367 Entry.Node = Size; 4368 Entry.Ty = IntPtrTy; 4369 Args.push_back(Entry); 4370 4371 // FIXME: pass in SDLoc 4372 TargetLowering::CallLoweringInfo CLI(*this); 4373 CLI.setDebugLoc(dl).setChain(Chain) 4374 .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMSET), 4375 Type::getVoidTy(*getContext()), 4376 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMSET), 4377 TLI->getPointerTy()), std::move(Args), 0) 4378 .setDiscardResult(); 4379 4380 std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI); 4381 return CallResult.second; 4382 } 4383 4384 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4385 SDVTList VTList, ArrayRef<SDValue> Ops, 4386 MachineMemOperand *MMO, 4387 AtomicOrdering SuccessOrdering, 4388 AtomicOrdering FailureOrdering, 4389 SynchronizationScope SynchScope) { 4390 FoldingSetNodeID ID; 4391 ID.AddInteger(MemVT.getRawBits()); 4392 AddNodeIDNode(ID, Opcode, VTList, Ops); 4393 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 4394 void* IP = nullptr; 4395 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) { 4396 cast<AtomicSDNode>(E)->refineAlignment(MMO); 4397 return SDValue(E, 0); 4398 } 4399 4400 // Allocate the operands array for the node out of the BumpPtrAllocator, since 4401 // SDNode doesn't have access to it. This memory will be "leaked" when 4402 // the node is deallocated, but recovered when the allocator is released. 4403 // If the number of operands is less than 5 we use AtomicSDNode's internal 4404 // storage. 4405 unsigned NumOps = Ops.size(); 4406 SDUse *DynOps = NumOps > 4 ? OperandAllocator.Allocate<SDUse>(NumOps) 4407 : nullptr; 4408 4409 SDNode *N = new (NodeAllocator) AtomicSDNode(Opcode, dl.getIROrder(), 4410 dl.getDebugLoc(), VTList, MemVT, 4411 Ops.data(), DynOps, NumOps, MMO, 4412 SuccessOrdering, FailureOrdering, 4413 SynchScope); 4414 CSEMap.InsertNode(N, IP); 4415 InsertNode(N); 4416 return SDValue(N, 0); 4417 } 4418 4419 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4420 SDVTList VTList, ArrayRef<SDValue> Ops, 4421 MachineMemOperand *MMO, 4422 AtomicOrdering Ordering, 4423 SynchronizationScope SynchScope) { 4424 return getAtomic(Opcode, dl, MemVT, VTList, Ops, MMO, Ordering, 4425 Ordering, SynchScope); 4426 } 4427 4428 SDValue SelectionDAG::getAtomicCmpSwap( 4429 unsigned Opcode, SDLoc dl, EVT MemVT, SDVTList VTs, SDValue Chain, 4430 SDValue Ptr, SDValue Cmp, SDValue Swp, MachinePointerInfo PtrInfo, 4431 unsigned Alignment, AtomicOrdering SuccessOrdering, 4432 AtomicOrdering FailureOrdering, SynchronizationScope SynchScope) { 4433 assert(Opcode == ISD::ATOMIC_CMP_SWAP || 4434 Opcode == ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS); 4435 assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types"); 4436 4437 if (Alignment == 0) // Ensure that codegen never sees alignment 0 4438 Alignment = getEVTAlignment(MemVT); 4439 4440 MachineFunction &MF = getMachineFunction(); 4441 4442 // FIXME: Volatile isn't really correct; we should keep track of atomic 4443 // orderings in the memoperand. 4444 unsigned Flags = MachineMemOperand::MOVolatile; 4445 Flags |= MachineMemOperand::MOLoad; 4446 Flags |= MachineMemOperand::MOStore; 4447 4448 MachineMemOperand *MMO = 4449 MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment); 4450 4451 return getAtomicCmpSwap(Opcode, dl, MemVT, VTs, Chain, Ptr, Cmp, Swp, MMO, 4452 SuccessOrdering, FailureOrdering, SynchScope); 4453 } 4454 4455 SDValue SelectionDAG::getAtomicCmpSwap(unsigned Opcode, SDLoc dl, EVT MemVT, 4456 SDVTList VTs, SDValue Chain, SDValue Ptr, 4457 SDValue Cmp, SDValue Swp, 4458 MachineMemOperand *MMO, 4459 AtomicOrdering SuccessOrdering, 4460 AtomicOrdering FailureOrdering, 4461 SynchronizationScope SynchScope) { 4462 assert(Opcode == ISD::ATOMIC_CMP_SWAP || 4463 Opcode == ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS); 4464 assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types"); 4465 4466 SDValue Ops[] = {Chain, Ptr, Cmp, Swp}; 4467 return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, 4468 SuccessOrdering, FailureOrdering, SynchScope); 4469 } 4470 4471 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4472 SDValue Chain, 4473 SDValue Ptr, SDValue Val, 4474 const Value* PtrVal, 4475 unsigned Alignment, 4476 AtomicOrdering Ordering, 4477 SynchronizationScope SynchScope) { 4478 if (Alignment == 0) // Ensure that codegen never sees alignment 0 4479 Alignment = getEVTAlignment(MemVT); 4480 4481 MachineFunction &MF = getMachineFunction(); 4482 // An atomic store does not load. An atomic load does not store. 4483 // (An atomicrmw obviously both loads and stores.) 4484 // For now, atomics are considered to be volatile always, and they are 4485 // chained as such. 4486 // FIXME: Volatile isn't really correct; we should keep track of atomic 4487 // orderings in the memoperand. 4488 unsigned Flags = MachineMemOperand::MOVolatile; 4489 if (Opcode != ISD::ATOMIC_STORE) 4490 Flags |= MachineMemOperand::MOLoad; 4491 if (Opcode != ISD::ATOMIC_LOAD) 4492 Flags |= MachineMemOperand::MOStore; 4493 4494 MachineMemOperand *MMO = 4495 MF.getMachineMemOperand(MachinePointerInfo(PtrVal), Flags, 4496 MemVT.getStoreSize(), Alignment); 4497 4498 return getAtomic(Opcode, dl, MemVT, Chain, Ptr, Val, MMO, 4499 Ordering, SynchScope); 4500 } 4501 4502 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4503 SDValue Chain, 4504 SDValue Ptr, SDValue Val, 4505 MachineMemOperand *MMO, 4506 AtomicOrdering Ordering, 4507 SynchronizationScope SynchScope) { 4508 assert((Opcode == ISD::ATOMIC_LOAD_ADD || 4509 Opcode == ISD::ATOMIC_LOAD_SUB || 4510 Opcode == ISD::ATOMIC_LOAD_AND || 4511 Opcode == ISD::ATOMIC_LOAD_OR || 4512 Opcode == ISD::ATOMIC_LOAD_XOR || 4513 Opcode == ISD::ATOMIC_LOAD_NAND || 4514 Opcode == ISD::ATOMIC_LOAD_MIN || 4515 Opcode == ISD::ATOMIC_LOAD_MAX || 4516 Opcode == ISD::ATOMIC_LOAD_UMIN || 4517 Opcode == ISD::ATOMIC_LOAD_UMAX || 4518 Opcode == ISD::ATOMIC_SWAP || 4519 Opcode == ISD::ATOMIC_STORE) && 4520 "Invalid Atomic Op"); 4521 4522 EVT VT = Val.getValueType(); 4523 4524 SDVTList VTs = Opcode == ISD::ATOMIC_STORE ? getVTList(MVT::Other) : 4525 getVTList(VT, MVT::Other); 4526 SDValue Ops[] = {Chain, Ptr, Val}; 4527 return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, Ordering, SynchScope); 4528 } 4529 4530 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4531 EVT VT, SDValue Chain, 4532 SDValue Ptr, 4533 MachineMemOperand *MMO, 4534 AtomicOrdering Ordering, 4535 SynchronizationScope SynchScope) { 4536 assert(Opcode == ISD::ATOMIC_LOAD && "Invalid Atomic Op"); 4537 4538 SDVTList VTs = getVTList(VT, MVT::Other); 4539 SDValue Ops[] = {Chain, Ptr}; 4540 return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, Ordering, SynchScope); 4541 } 4542 4543 /// getMergeValues - Create a MERGE_VALUES node from the given operands. 4544 SDValue SelectionDAG::getMergeValues(ArrayRef<SDValue> Ops, SDLoc dl) { 4545 if (Ops.size() == 1) 4546 return Ops[0]; 4547 4548 SmallVector<EVT, 4> VTs; 4549 VTs.reserve(Ops.size()); 4550 for (unsigned i = 0; i < Ops.size(); ++i) 4551 VTs.push_back(Ops[i].getValueType()); 4552 return getNode(ISD::MERGE_VALUES, dl, getVTList(VTs), Ops); 4553 } 4554 4555 SDValue 4556 SelectionDAG::getMemIntrinsicNode(unsigned Opcode, SDLoc dl, SDVTList VTList, 4557 ArrayRef<SDValue> Ops, 4558 EVT MemVT, MachinePointerInfo PtrInfo, 4559 unsigned Align, bool Vol, 4560 bool ReadMem, bool WriteMem, unsigned Size) { 4561 if (Align == 0) // Ensure that codegen never sees alignment 0 4562 Align = getEVTAlignment(MemVT); 4563 4564 MachineFunction &MF = getMachineFunction(); 4565 unsigned Flags = 0; 4566 if (WriteMem) 4567 Flags |= MachineMemOperand::MOStore; 4568 if (ReadMem) 4569 Flags |= MachineMemOperand::MOLoad; 4570 if (Vol) 4571 Flags |= MachineMemOperand::MOVolatile; 4572 if (!Size) 4573 Size = MemVT.getStoreSize(); 4574 MachineMemOperand *MMO = 4575 MF.getMachineMemOperand(PtrInfo, Flags, Size, Align); 4576 4577 return getMemIntrinsicNode(Opcode, dl, VTList, Ops, MemVT, MMO); 4578 } 4579 4580 SDValue 4581 SelectionDAG::getMemIntrinsicNode(unsigned Opcode, SDLoc dl, SDVTList VTList, 4582 ArrayRef<SDValue> Ops, EVT MemVT, 4583 MachineMemOperand *MMO) { 4584 assert((Opcode == ISD::INTRINSIC_VOID || 4585 Opcode == ISD::INTRINSIC_W_CHAIN || 4586 Opcode == ISD::PREFETCH || 4587 Opcode == ISD::LIFETIME_START || 4588 Opcode == ISD::LIFETIME_END || 4589 (Opcode <= INT_MAX && 4590 (int)Opcode >= ISD::FIRST_TARGET_MEMORY_OPCODE)) && 4591 "Opcode is not a memory-accessing opcode!"); 4592 4593 // Memoize the node unless it returns a flag. 4594 MemIntrinsicSDNode *N; 4595 if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) { 4596 FoldingSetNodeID ID; 4597 AddNodeIDNode(ID, Opcode, VTList, Ops); 4598 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 4599 void *IP = nullptr; 4600 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) { 4601 cast<MemIntrinsicSDNode>(E)->refineAlignment(MMO); 4602 return SDValue(E, 0); 4603 } 4604 4605 N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl.getIROrder(), 4606 dl.getDebugLoc(), VTList, Ops, 4607 MemVT, MMO); 4608 CSEMap.InsertNode(N, IP); 4609 } else { 4610 N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl.getIROrder(), 4611 dl.getDebugLoc(), VTList, Ops, 4612 MemVT, MMO); 4613 } 4614 InsertNode(N); 4615 return SDValue(N, 0); 4616 } 4617 4618 /// InferPointerInfo - If the specified ptr/offset is a frame index, infer a 4619 /// MachinePointerInfo record from it. This is particularly useful because the 4620 /// code generator has many cases where it doesn't bother passing in a 4621 /// MachinePointerInfo to getLoad or getStore when it has "FI+Cst". 4622 static MachinePointerInfo InferPointerInfo(SDValue Ptr, int64_t Offset = 0) { 4623 // If this is FI+Offset, we can model it. 4624 if (const FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr)) 4625 return MachinePointerInfo::getFixedStack(FI->getIndex(), Offset); 4626 4627 // If this is (FI+Offset1)+Offset2, we can model it. 4628 if (Ptr.getOpcode() != ISD::ADD || 4629 !isa<ConstantSDNode>(Ptr.getOperand(1)) || 4630 !isa<FrameIndexSDNode>(Ptr.getOperand(0))) 4631 return MachinePointerInfo(); 4632 4633 int FI = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex(); 4634 return MachinePointerInfo::getFixedStack(FI, Offset+ 4635 cast<ConstantSDNode>(Ptr.getOperand(1))->getSExtValue()); 4636 } 4637 4638 /// InferPointerInfo - If the specified ptr/offset is a frame index, infer a 4639 /// MachinePointerInfo record from it. This is particularly useful because the 4640 /// code generator has many cases where it doesn't bother passing in a 4641 /// MachinePointerInfo to getLoad or getStore when it has "FI+Cst". 4642 static MachinePointerInfo InferPointerInfo(SDValue Ptr, SDValue OffsetOp) { 4643 // If the 'Offset' value isn't a constant, we can't handle this. 4644 if (ConstantSDNode *OffsetNode = dyn_cast<ConstantSDNode>(OffsetOp)) 4645 return InferPointerInfo(Ptr, OffsetNode->getSExtValue()); 4646 if (OffsetOp.getOpcode() == ISD::UNDEF) 4647 return InferPointerInfo(Ptr); 4648 return MachinePointerInfo(); 4649 } 4650 4651 4652 SDValue 4653 SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, 4654 EVT VT, SDLoc dl, SDValue Chain, 4655 SDValue Ptr, SDValue Offset, 4656 MachinePointerInfo PtrInfo, EVT MemVT, 4657 bool isVolatile, bool isNonTemporal, bool isInvariant, 4658 unsigned Alignment, const AAMDNodes &AAInfo, 4659 const MDNode *Ranges) { 4660 assert(Chain.getValueType() == MVT::Other && 4661 "Invalid chain type"); 4662 if (Alignment == 0) // Ensure that codegen never sees alignment 0 4663 Alignment = getEVTAlignment(VT); 4664 4665 unsigned Flags = MachineMemOperand::MOLoad; 4666 if (isVolatile) 4667 Flags |= MachineMemOperand::MOVolatile; 4668 if (isNonTemporal) 4669 Flags |= MachineMemOperand::MONonTemporal; 4670 if (isInvariant) 4671 Flags |= MachineMemOperand::MOInvariant; 4672 4673 // If we don't have a PtrInfo, infer the trivial frame index case to simplify 4674 // clients. 4675 if (PtrInfo.V.isNull()) 4676 PtrInfo = InferPointerInfo(Ptr, Offset); 4677 4678 MachineFunction &MF = getMachineFunction(); 4679 MachineMemOperand *MMO = 4680 MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment, 4681 AAInfo, Ranges); 4682 return getLoad(AM, ExtType, VT, dl, Chain, Ptr, Offset, MemVT, MMO); 4683 } 4684 4685 SDValue 4686 SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, 4687 EVT VT, SDLoc dl, SDValue Chain, 4688 SDValue Ptr, SDValue Offset, EVT MemVT, 4689 MachineMemOperand *MMO) { 4690 if (VT == MemVT) { 4691 ExtType = ISD::NON_EXTLOAD; 4692 } else if (ExtType == ISD::NON_EXTLOAD) { 4693 assert(VT == MemVT && "Non-extending load from different memory type!"); 4694 } else { 4695 // Extending load. 4696 assert(MemVT.getScalarType().bitsLT(VT.getScalarType()) && 4697 "Should only be an extending load, not truncating!"); 4698 assert(VT.isInteger() == MemVT.isInteger() && 4699 "Cannot convert from FP to Int or Int -> FP!"); 4700 assert(VT.isVector() == MemVT.isVector() && 4701 "Cannot use trunc store to convert to or from a vector!"); 4702 assert((!VT.isVector() || 4703 VT.getVectorNumElements() == MemVT.getVectorNumElements()) && 4704 "Cannot use trunc store to change the number of vector elements!"); 4705 } 4706 4707 bool Indexed = AM != ISD::UNINDEXED; 4708 assert((Indexed || Offset.getOpcode() == ISD::UNDEF) && 4709 "Unindexed load with an offset!"); 4710 4711 SDVTList VTs = Indexed ? 4712 getVTList(VT, Ptr.getValueType(), MVT::Other) : getVTList(VT, MVT::Other); 4713 SDValue Ops[] = { Chain, Ptr, Offset }; 4714 FoldingSetNodeID ID; 4715 AddNodeIDNode(ID, ISD::LOAD, VTs, Ops); 4716 ID.AddInteger(MemVT.getRawBits()); 4717 ID.AddInteger(encodeMemSDNodeFlags(ExtType, AM, MMO->isVolatile(), 4718 MMO->isNonTemporal(), 4719 MMO->isInvariant())); 4720 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 4721 void *IP = nullptr; 4722 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) { 4723 cast<LoadSDNode>(E)->refineAlignment(MMO); 4724 return SDValue(E, 0); 4725 } 4726 SDNode *N = new (NodeAllocator) LoadSDNode(Ops, dl.getIROrder(), 4727 dl.getDebugLoc(), VTs, AM, ExtType, 4728 MemVT, MMO); 4729 CSEMap.InsertNode(N, IP); 4730 InsertNode(N); 4731 return SDValue(N, 0); 4732 } 4733 4734 SDValue SelectionDAG::getLoad(EVT VT, SDLoc dl, 4735 SDValue Chain, SDValue Ptr, 4736 MachinePointerInfo PtrInfo, 4737 bool isVolatile, bool isNonTemporal, 4738 bool isInvariant, unsigned Alignment, 4739 const AAMDNodes &AAInfo, 4740 const MDNode *Ranges) { 4741 SDValue Undef = getUNDEF(Ptr.getValueType()); 4742 return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef, 4743 PtrInfo, VT, isVolatile, isNonTemporal, isInvariant, Alignment, 4744 AAInfo, Ranges); 4745 } 4746 4747 SDValue SelectionDAG::getLoad(EVT VT, SDLoc dl, 4748 SDValue Chain, SDValue Ptr, 4749 MachineMemOperand *MMO) { 4750 SDValue Undef = getUNDEF(Ptr.getValueType()); 4751 return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef, 4752 VT, MMO); 4753 } 4754 4755 SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT, 4756 SDValue Chain, SDValue Ptr, 4757 MachinePointerInfo PtrInfo, EVT MemVT, 4758 bool isVolatile, bool isNonTemporal, 4759 bool isInvariant, unsigned Alignment, 4760 const AAMDNodes &AAInfo) { 4761 SDValue Undef = getUNDEF(Ptr.getValueType()); 4762 return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef, 4763 PtrInfo, MemVT, isVolatile, isNonTemporal, isInvariant, 4764 Alignment, AAInfo); 4765 } 4766 4767 4768 SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT, 4769 SDValue Chain, SDValue Ptr, EVT MemVT, 4770 MachineMemOperand *MMO) { 4771 SDValue Undef = getUNDEF(Ptr.getValueType()); 4772 return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef, 4773 MemVT, MMO); 4774 } 4775 4776 SDValue 4777 SelectionDAG::getIndexedLoad(SDValue OrigLoad, SDLoc dl, SDValue Base, 4778 SDValue Offset, ISD::MemIndexedMode AM) { 4779 LoadSDNode *LD = cast<LoadSDNode>(OrigLoad); 4780 assert(LD->getOffset().getOpcode() == ISD::UNDEF && 4781 "Load is already a indexed load!"); 4782 return getLoad(AM, LD->getExtensionType(), OrigLoad.getValueType(), dl, 4783 LD->getChain(), Base, Offset, LD->getPointerInfo(), 4784 LD->getMemoryVT(), LD->isVolatile(), LD->isNonTemporal(), 4785 false, LD->getAlignment()); 4786 } 4787 4788 SDValue SelectionDAG::getStore(SDValue Chain, SDLoc dl, SDValue Val, 4789 SDValue Ptr, MachinePointerInfo PtrInfo, 4790 bool isVolatile, bool isNonTemporal, 4791 unsigned Alignment, const AAMDNodes &AAInfo) { 4792 assert(Chain.getValueType() == MVT::Other && 4793 "Invalid chain type"); 4794 if (Alignment == 0) // Ensure that codegen never sees alignment 0 4795 Alignment = getEVTAlignment(Val.getValueType()); 4796 4797 unsigned Flags = MachineMemOperand::MOStore; 4798 if (isVolatile) 4799 Flags |= MachineMemOperand::MOVolatile; 4800 if (isNonTemporal) 4801 Flags |= MachineMemOperand::MONonTemporal; 4802 4803 if (PtrInfo.V.isNull()) 4804 PtrInfo = InferPointerInfo(Ptr); 4805 4806 MachineFunction &MF = getMachineFunction(); 4807 MachineMemOperand *MMO = 4808 MF.getMachineMemOperand(PtrInfo, Flags, 4809 Val.getValueType().getStoreSize(), Alignment, 4810 AAInfo); 4811 4812 return getStore(Chain, dl, Val, Ptr, MMO); 4813 } 4814 4815 SDValue SelectionDAG::getStore(SDValue Chain, SDLoc dl, SDValue Val, 4816 SDValue Ptr, MachineMemOperand *MMO) { 4817 assert(Chain.getValueType() == MVT::Other && 4818 "Invalid chain type"); 4819 EVT VT = Val.getValueType(); 4820 SDVTList VTs = getVTList(MVT::Other); 4821 SDValue Undef = getUNDEF(Ptr.getValueType()); 4822 SDValue Ops[] = { Chain, Val, Ptr, Undef }; 4823 FoldingSetNodeID ID; 4824 AddNodeIDNode(ID, ISD::STORE, VTs, Ops); 4825 ID.AddInteger(VT.getRawBits()); 4826 ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(), 4827 MMO->isNonTemporal(), MMO->isInvariant())); 4828 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 4829 void *IP = nullptr; 4830 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) { 4831 cast<StoreSDNode>(E)->refineAlignment(MMO); 4832 return SDValue(E, 0); 4833 } 4834 SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(), 4835 dl.getDebugLoc(), VTs, 4836 ISD::UNINDEXED, false, VT, MMO); 4837 CSEMap.InsertNode(N, IP); 4838 InsertNode(N); 4839 return SDValue(N, 0); 4840 } 4841 4842 SDValue SelectionDAG::getTruncStore(SDValue Chain, SDLoc dl, SDValue Val, 4843 SDValue Ptr, MachinePointerInfo PtrInfo, 4844 EVT SVT,bool isVolatile, bool isNonTemporal, 4845 unsigned Alignment, 4846 const AAMDNodes &AAInfo) { 4847 assert(Chain.getValueType() == MVT::Other && 4848 "Invalid chain type"); 4849 if (Alignment == 0) // Ensure that codegen never sees alignment 0 4850 Alignment = getEVTAlignment(SVT); 4851 4852 unsigned Flags = MachineMemOperand::MOStore; 4853 if (isVolatile) 4854 Flags |= MachineMemOperand::MOVolatile; 4855 if (isNonTemporal) 4856 Flags |= MachineMemOperand::MONonTemporal; 4857 4858 if (PtrInfo.V.isNull()) 4859 PtrInfo = InferPointerInfo(Ptr); 4860 4861 MachineFunction &MF = getMachineFunction(); 4862 MachineMemOperand *MMO = 4863 MF.getMachineMemOperand(PtrInfo, Flags, SVT.getStoreSize(), Alignment, 4864 AAInfo); 4865 4866 return getTruncStore(Chain, dl, Val, Ptr, SVT, MMO); 4867 } 4868 4869 SDValue SelectionDAG::getTruncStore(SDValue Chain, SDLoc dl, SDValue Val, 4870 SDValue Ptr, EVT SVT, 4871 MachineMemOperand *MMO) { 4872 EVT VT = Val.getValueType(); 4873 4874 assert(Chain.getValueType() == MVT::Other && 4875 "Invalid chain type"); 4876 if (VT == SVT) 4877 return getStore(Chain, dl, Val, Ptr, MMO); 4878 4879 assert(SVT.getScalarType().bitsLT(VT.getScalarType()) && 4880 "Should only be a truncating store, not extending!"); 4881 assert(VT.isInteger() == SVT.isInteger() && 4882 "Can't do FP-INT conversion!"); 4883 assert(VT.isVector() == SVT.isVector() && 4884 "Cannot use trunc store to convert to or from a vector!"); 4885 assert((!VT.isVector() || 4886 VT.getVectorNumElements() == SVT.getVectorNumElements()) && 4887 "Cannot use trunc store to change the number of vector elements!"); 4888 4889 SDVTList VTs = getVTList(MVT::Other); 4890 SDValue Undef = getUNDEF(Ptr.getValueType()); 4891 SDValue Ops[] = { Chain, Val, Ptr, Undef }; 4892 FoldingSetNodeID ID; 4893 AddNodeIDNode(ID, ISD::STORE, VTs, Ops); 4894 ID.AddInteger(SVT.getRawBits()); 4895 ID.AddInteger(encodeMemSDNodeFlags(true, ISD::UNINDEXED, MMO->isVolatile(), 4896 MMO->isNonTemporal(), MMO->isInvariant())); 4897 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 4898 void *IP = nullptr; 4899 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) { 4900 cast<StoreSDNode>(E)->refineAlignment(MMO); 4901 return SDValue(E, 0); 4902 } 4903 SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(), 4904 dl.getDebugLoc(), VTs, 4905 ISD::UNINDEXED, true, SVT, MMO); 4906 CSEMap.InsertNode(N, IP); 4907 InsertNode(N); 4908 return SDValue(N, 0); 4909 } 4910 4911 SDValue 4912 SelectionDAG::getIndexedStore(SDValue OrigStore, SDLoc dl, SDValue Base, 4913 SDValue Offset, ISD::MemIndexedMode AM) { 4914 StoreSDNode *ST = cast<StoreSDNode>(OrigStore); 4915 assert(ST->getOffset().getOpcode() == ISD::UNDEF && 4916 "Store is already a indexed store!"); 4917 SDVTList VTs = getVTList(Base.getValueType(), MVT::Other); 4918 SDValue Ops[] = { ST->getChain(), ST->getValue(), Base, Offset }; 4919 FoldingSetNodeID ID; 4920 AddNodeIDNode(ID, ISD::STORE, VTs, Ops); 4921 ID.AddInteger(ST->getMemoryVT().getRawBits()); 4922 ID.AddInteger(ST->getRawSubclassData()); 4923 ID.AddInteger(ST->getPointerInfo().getAddrSpace()); 4924 void *IP = nullptr; 4925 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 4926 return SDValue(E, 0); 4927 4928 SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(), 4929 dl.getDebugLoc(), VTs, AM, 4930 ST->isTruncatingStore(), 4931 ST->getMemoryVT(), 4932 ST->getMemOperand()); 4933 CSEMap.InsertNode(N, IP); 4934 InsertNode(N); 4935 return SDValue(N, 0); 4936 } 4937 4938 SDValue SelectionDAG::getVAArg(EVT VT, SDLoc dl, 4939 SDValue Chain, SDValue Ptr, 4940 SDValue SV, 4941 unsigned Align) { 4942 SDValue Ops[] = { Chain, Ptr, SV, getTargetConstant(Align, MVT::i32) }; 4943 return getNode(ISD::VAARG, dl, getVTList(VT, MVT::Other), Ops); 4944 } 4945 4946 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 4947 ArrayRef<SDUse> Ops) { 4948 switch (Ops.size()) { 4949 case 0: return getNode(Opcode, DL, VT); 4950 case 1: return getNode(Opcode, DL, VT, static_cast<const SDValue>(Ops[0])); 4951 case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]); 4952 case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]); 4953 default: break; 4954 } 4955 4956 // Copy from an SDUse array into an SDValue array for use with 4957 // the regular getNode logic. 4958 SmallVector<SDValue, 8> NewOps(Ops.begin(), Ops.end()); 4959 return getNode(Opcode, DL, VT, NewOps); 4960 } 4961 4962 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 4963 ArrayRef<SDValue> Ops) { 4964 unsigned NumOps = Ops.size(); 4965 switch (NumOps) { 4966 case 0: return getNode(Opcode, DL, VT); 4967 case 1: return getNode(Opcode, DL, VT, Ops[0]); 4968 case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]); 4969 case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]); 4970 default: break; 4971 } 4972 4973 switch (Opcode) { 4974 default: break; 4975 case ISD::SELECT_CC: { 4976 assert(NumOps == 5 && "SELECT_CC takes 5 operands!"); 4977 assert(Ops[0].getValueType() == Ops[1].getValueType() && 4978 "LHS and RHS of condition must have same type!"); 4979 assert(Ops[2].getValueType() == Ops[3].getValueType() && 4980 "True and False arms of SelectCC must have same type!"); 4981 assert(Ops[2].getValueType() == VT && 4982 "select_cc node must be of same type as true and false value!"); 4983 break; 4984 } 4985 case ISD::BR_CC: { 4986 assert(NumOps == 5 && "BR_CC takes 5 operands!"); 4987 assert(Ops[2].getValueType() == Ops[3].getValueType() && 4988 "LHS/RHS of comparison should match types!"); 4989 break; 4990 } 4991 } 4992 4993 // Memoize nodes. 4994 SDNode *N; 4995 SDVTList VTs = getVTList(VT); 4996 4997 if (VT != MVT::Glue) { 4998 FoldingSetNodeID ID; 4999 AddNodeIDNode(ID, Opcode, VTs, Ops); 5000 void *IP = nullptr; 5001 5002 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 5003 return SDValue(E, 0); 5004 5005 N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), 5006 VTs, Ops); 5007 CSEMap.InsertNode(N, IP); 5008 } else { 5009 N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), 5010 VTs, Ops); 5011 } 5012 5013 InsertNode(N); 5014 return SDValue(N, 0); 5015 } 5016 5017 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, 5018 ArrayRef<EVT> ResultTys, ArrayRef<SDValue> Ops) { 5019 return getNode(Opcode, DL, getVTList(ResultTys), Ops); 5020 } 5021 5022 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5023 ArrayRef<SDValue> Ops) { 5024 if (VTList.NumVTs == 1) 5025 return getNode(Opcode, DL, VTList.VTs[0], Ops); 5026 5027 #if 0 5028 switch (Opcode) { 5029 // FIXME: figure out how to safely handle things like 5030 // int foo(int x) { return 1 << (x & 255); } 5031 // int bar() { return foo(256); } 5032 case ISD::SRA_PARTS: 5033 case ISD::SRL_PARTS: 5034 case ISD::SHL_PARTS: 5035 if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG && 5036 cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1) 5037 return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0)); 5038 else if (N3.getOpcode() == ISD::AND) 5039 if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) { 5040 // If the and is only masking out bits that cannot effect the shift, 5041 // eliminate the and. 5042 unsigned NumBits = VT.getScalarType().getSizeInBits()*2; 5043 if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1) 5044 return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0)); 5045 } 5046 break; 5047 } 5048 #endif 5049 5050 // Memoize the node unless it returns a flag. 5051 SDNode *N; 5052 unsigned NumOps = Ops.size(); 5053 if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) { 5054 FoldingSetNodeID ID; 5055 AddNodeIDNode(ID, Opcode, VTList, Ops); 5056 void *IP = nullptr; 5057 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 5058 return SDValue(E, 0); 5059 5060 if (NumOps == 1) { 5061 N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(), 5062 DL.getDebugLoc(), VTList, Ops[0]); 5063 } else if (NumOps == 2) { 5064 N = new (NodeAllocator) BinarySDNode(Opcode, DL.getIROrder(), 5065 DL.getDebugLoc(), VTList, Ops[0], 5066 Ops[1]); 5067 } else if (NumOps == 3) { 5068 N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(), 5069 DL.getDebugLoc(), VTList, Ops[0], 5070 Ops[1], Ops[2]); 5071 } else { 5072 N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), 5073 VTList, Ops); 5074 } 5075 CSEMap.InsertNode(N, IP); 5076 } else { 5077 if (NumOps == 1) { 5078 N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(), 5079 DL.getDebugLoc(), VTList, Ops[0]); 5080 } else if (NumOps == 2) { 5081 N = new (NodeAllocator) BinarySDNode(Opcode, DL.getIROrder(), 5082 DL.getDebugLoc(), VTList, Ops[0], 5083 Ops[1]); 5084 } else if (NumOps == 3) { 5085 N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(), 5086 DL.getDebugLoc(), VTList, Ops[0], 5087 Ops[1], Ops[2]); 5088 } else { 5089 N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), 5090 VTList, Ops); 5091 } 5092 } 5093 InsertNode(N); 5094 return SDValue(N, 0); 5095 } 5096 5097 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList) { 5098 return getNode(Opcode, DL, VTList, None); 5099 } 5100 5101 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5102 SDValue N1) { 5103 SDValue Ops[] = { N1 }; 5104 return getNode(Opcode, DL, VTList, Ops); 5105 } 5106 5107 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5108 SDValue N1, SDValue N2) { 5109 SDValue Ops[] = { N1, N2 }; 5110 return getNode(Opcode, DL, VTList, Ops); 5111 } 5112 5113 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5114 SDValue N1, SDValue N2, SDValue N3) { 5115 SDValue Ops[] = { N1, N2, N3 }; 5116 return getNode(Opcode, DL, VTList, Ops); 5117 } 5118 5119 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5120 SDValue N1, SDValue N2, SDValue N3, 5121 SDValue N4) { 5122 SDValue Ops[] = { N1, N2, N3, N4 }; 5123 return getNode(Opcode, DL, VTList, Ops); 5124 } 5125 5126 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5127 SDValue N1, SDValue N2, SDValue N3, 5128 SDValue N4, SDValue N5) { 5129 SDValue Ops[] = { N1, N2, N3, N4, N5 }; 5130 return getNode(Opcode, DL, VTList, Ops); 5131 } 5132 5133 SDVTList SelectionDAG::getVTList(EVT VT) { 5134 return makeVTList(SDNode::getValueTypeList(VT), 1); 5135 } 5136 5137 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2) { 5138 FoldingSetNodeID ID; 5139 ID.AddInteger(2U); 5140 ID.AddInteger(VT1.getRawBits()); 5141 ID.AddInteger(VT2.getRawBits()); 5142 5143 void *IP = nullptr; 5144 SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP); 5145 if (!Result) { 5146 EVT *Array = Allocator.Allocate<EVT>(2); 5147 Array[0] = VT1; 5148 Array[1] = VT2; 5149 Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 2); 5150 VTListMap.InsertNode(Result, IP); 5151 } 5152 return Result->getSDVTList(); 5153 } 5154 5155 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3) { 5156 FoldingSetNodeID ID; 5157 ID.AddInteger(3U); 5158 ID.AddInteger(VT1.getRawBits()); 5159 ID.AddInteger(VT2.getRawBits()); 5160 ID.AddInteger(VT3.getRawBits()); 5161 5162 void *IP = nullptr; 5163 SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP); 5164 if (!Result) { 5165 EVT *Array = Allocator.Allocate<EVT>(3); 5166 Array[0] = VT1; 5167 Array[1] = VT2; 5168 Array[2] = VT3; 5169 Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 3); 5170 VTListMap.InsertNode(Result, IP); 5171 } 5172 return Result->getSDVTList(); 5173 } 5174 5175 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3, EVT VT4) { 5176 FoldingSetNodeID ID; 5177 ID.AddInteger(4U); 5178 ID.AddInteger(VT1.getRawBits()); 5179 ID.AddInteger(VT2.getRawBits()); 5180 ID.AddInteger(VT3.getRawBits()); 5181 ID.AddInteger(VT4.getRawBits()); 5182 5183 void *IP = nullptr; 5184 SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP); 5185 if (!Result) { 5186 EVT *Array = Allocator.Allocate<EVT>(4); 5187 Array[0] = VT1; 5188 Array[1] = VT2; 5189 Array[2] = VT3; 5190 Array[3] = VT4; 5191 Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 4); 5192 VTListMap.InsertNode(Result, IP); 5193 } 5194 return Result->getSDVTList(); 5195 } 5196 5197 SDVTList SelectionDAG::getVTList(ArrayRef<EVT> VTs) { 5198 unsigned NumVTs = VTs.size(); 5199 FoldingSetNodeID ID; 5200 ID.AddInteger(NumVTs); 5201 for (unsigned index = 0; index < NumVTs; index++) { 5202 ID.AddInteger(VTs[index].getRawBits()); 5203 } 5204 5205 void *IP = nullptr; 5206 SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP); 5207 if (!Result) { 5208 EVT *Array = Allocator.Allocate<EVT>(NumVTs); 5209 std::copy(VTs.begin(), VTs.end(), Array); 5210 Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, NumVTs); 5211 VTListMap.InsertNode(Result, IP); 5212 } 5213 return Result->getSDVTList(); 5214 } 5215 5216 5217 /// UpdateNodeOperands - *Mutate* the specified node in-place to have the 5218 /// specified operands. If the resultant node already exists in the DAG, 5219 /// this does not modify the specified node, instead it returns the node that 5220 /// already exists. If the resultant node does not exist in the DAG, the 5221 /// input node is returned. As a degenerate case, if you specify the same 5222 /// input operands as the node already has, the input node is returned. 5223 SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op) { 5224 assert(N->getNumOperands() == 1 && "Update with wrong number of operands"); 5225 5226 // Check to see if there is no change. 5227 if (Op == N->getOperand(0)) return N; 5228 5229 // See if the modified node already exists. 5230 void *InsertPos = nullptr; 5231 if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos)) 5232 return Existing; 5233 5234 // Nope it doesn't. Remove the node from its current place in the maps. 5235 if (InsertPos) 5236 if (!RemoveNodeFromCSEMaps(N)) 5237 InsertPos = nullptr; 5238 5239 // Now we update the operands. 5240 N->OperandList[0].set(Op); 5241 5242 // If this gets put into a CSE map, add it. 5243 if (InsertPos) CSEMap.InsertNode(N, InsertPos); 5244 return N; 5245 } 5246 5247 SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2) { 5248 assert(N->getNumOperands() == 2 && "Update with wrong number of operands"); 5249 5250 // Check to see if there is no change. 5251 if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1)) 5252 return N; // No operands changed, just return the input node. 5253 5254 // See if the modified node already exists. 5255 void *InsertPos = nullptr; 5256 if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos)) 5257 return Existing; 5258 5259 // Nope it doesn't. Remove the node from its current place in the maps. 5260 if (InsertPos) 5261 if (!RemoveNodeFromCSEMaps(N)) 5262 InsertPos = nullptr; 5263 5264 // Now we update the operands. 5265 if (N->OperandList[0] != Op1) 5266 N->OperandList[0].set(Op1); 5267 if (N->OperandList[1] != Op2) 5268 N->OperandList[1].set(Op2); 5269 5270 // If this gets put into a CSE map, add it. 5271 if (InsertPos) CSEMap.InsertNode(N, InsertPos); 5272 return N; 5273 } 5274 5275 SDNode *SelectionDAG:: 5276 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, SDValue Op3) { 5277 SDValue Ops[] = { Op1, Op2, Op3 }; 5278 return UpdateNodeOperands(N, Ops); 5279 } 5280 5281 SDNode *SelectionDAG:: 5282 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, 5283 SDValue Op3, SDValue Op4) { 5284 SDValue Ops[] = { Op1, Op2, Op3, Op4 }; 5285 return UpdateNodeOperands(N, Ops); 5286 } 5287 5288 SDNode *SelectionDAG:: 5289 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, 5290 SDValue Op3, SDValue Op4, SDValue Op5) { 5291 SDValue Ops[] = { Op1, Op2, Op3, Op4, Op5 }; 5292 return UpdateNodeOperands(N, Ops); 5293 } 5294 5295 SDNode *SelectionDAG:: 5296 UpdateNodeOperands(SDNode *N, ArrayRef<SDValue> Ops) { 5297 unsigned NumOps = Ops.size(); 5298 assert(N->getNumOperands() == NumOps && 5299 "Update with wrong number of operands"); 5300 5301 // Check to see if there is no change. 5302 bool AnyChange = false; 5303 for (unsigned i = 0; i != NumOps; ++i) { 5304 if (Ops[i] != N->getOperand(i)) { 5305 AnyChange = true; 5306 break; 5307 } 5308 } 5309 5310 // No operands changed, just return the input node. 5311 if (!AnyChange) return N; 5312 5313 // See if the modified node already exists. 5314 void *InsertPos = nullptr; 5315 if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, InsertPos)) 5316 return Existing; 5317 5318 // Nope it doesn't. Remove the node from its current place in the maps. 5319 if (InsertPos) 5320 if (!RemoveNodeFromCSEMaps(N)) 5321 InsertPos = nullptr; 5322 5323 // Now we update the operands. 5324 for (unsigned i = 0; i != NumOps; ++i) 5325 if (N->OperandList[i] != Ops[i]) 5326 N->OperandList[i].set(Ops[i]); 5327 5328 // If this gets put into a CSE map, add it. 5329 if (InsertPos) CSEMap.InsertNode(N, InsertPos); 5330 return N; 5331 } 5332 5333 /// DropOperands - Release the operands and set this node to have 5334 /// zero operands. 5335 void SDNode::DropOperands() { 5336 // Unlike the code in MorphNodeTo that does this, we don't need to 5337 // watch for dead nodes here. 5338 for (op_iterator I = op_begin(), E = op_end(); I != E; ) { 5339 SDUse &Use = *I++; 5340 Use.set(SDValue()); 5341 } 5342 } 5343 5344 /// SelectNodeTo - These are wrappers around MorphNodeTo that accept a 5345 /// machine opcode. 5346 /// 5347 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5348 EVT VT) { 5349 SDVTList VTs = getVTList(VT); 5350 return SelectNodeTo(N, MachineOpc, VTs, None); 5351 } 5352 5353 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5354 EVT VT, SDValue Op1) { 5355 SDVTList VTs = getVTList(VT); 5356 SDValue Ops[] = { Op1 }; 5357 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5358 } 5359 5360 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5361 EVT VT, SDValue Op1, 5362 SDValue Op2) { 5363 SDVTList VTs = getVTList(VT); 5364 SDValue Ops[] = { Op1, Op2 }; 5365 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5366 } 5367 5368 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5369 EVT VT, SDValue Op1, 5370 SDValue Op2, SDValue Op3) { 5371 SDVTList VTs = getVTList(VT); 5372 SDValue Ops[] = { Op1, Op2, Op3 }; 5373 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5374 } 5375 5376 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5377 EVT VT, ArrayRef<SDValue> Ops) { 5378 SDVTList VTs = getVTList(VT); 5379 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5380 } 5381 5382 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5383 EVT VT1, EVT VT2, ArrayRef<SDValue> Ops) { 5384 SDVTList VTs = getVTList(VT1, VT2); 5385 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5386 } 5387 5388 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5389 EVT VT1, EVT VT2) { 5390 SDVTList VTs = getVTList(VT1, VT2); 5391 return SelectNodeTo(N, MachineOpc, VTs, None); 5392 } 5393 5394 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5395 EVT VT1, EVT VT2, EVT VT3, 5396 ArrayRef<SDValue> Ops) { 5397 SDVTList VTs = getVTList(VT1, VT2, VT3); 5398 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5399 } 5400 5401 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5402 EVT VT1, EVT VT2, EVT VT3, EVT VT4, 5403 ArrayRef<SDValue> Ops) { 5404 SDVTList VTs = getVTList(VT1, VT2, VT3, VT4); 5405 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5406 } 5407 5408 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5409 EVT VT1, EVT VT2, 5410 SDValue Op1) { 5411 SDVTList VTs = getVTList(VT1, VT2); 5412 SDValue Ops[] = { Op1 }; 5413 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5414 } 5415 5416 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5417 EVT VT1, EVT VT2, 5418 SDValue Op1, SDValue Op2) { 5419 SDVTList VTs = getVTList(VT1, VT2); 5420 SDValue Ops[] = { Op1, Op2 }; 5421 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5422 } 5423 5424 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5425 EVT VT1, EVT VT2, 5426 SDValue Op1, SDValue Op2, 5427 SDValue Op3) { 5428 SDVTList VTs = getVTList(VT1, VT2); 5429 SDValue Ops[] = { Op1, Op2, Op3 }; 5430 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5431 } 5432 5433 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5434 EVT VT1, EVT VT2, EVT VT3, 5435 SDValue Op1, SDValue Op2, 5436 SDValue Op3) { 5437 SDVTList VTs = getVTList(VT1, VT2, VT3); 5438 SDValue Ops[] = { Op1, Op2, Op3 }; 5439 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5440 } 5441 5442 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5443 SDVTList VTs,ArrayRef<SDValue> Ops) { 5444 N = MorphNodeTo(N, ~MachineOpc, VTs, Ops); 5445 // Reset the NodeID to -1. 5446 N->setNodeId(-1); 5447 return N; 5448 } 5449 5450 /// UpdadeSDLocOnMergedSDNode - If the opt level is -O0 then it throws away 5451 /// the line number information on the merged node since it is not possible to 5452 /// preserve the information that operation is associated with multiple lines. 5453 /// This will make the debugger working better at -O0, were there is a higher 5454 /// probability having other instructions associated with that line. 5455 /// 5456 /// For IROrder, we keep the smaller of the two 5457 SDNode *SelectionDAG::UpdadeSDLocOnMergedSDNode(SDNode *N, SDLoc OLoc) { 5458 DebugLoc NLoc = N->getDebugLoc(); 5459 if (!(NLoc.isUnknown()) && (OptLevel == CodeGenOpt::None) && 5460 (OLoc.getDebugLoc() != NLoc)) { 5461 N->setDebugLoc(DebugLoc()); 5462 } 5463 unsigned Order = std::min(N->getIROrder(), OLoc.getIROrder()); 5464 N->setIROrder(Order); 5465 return N; 5466 } 5467 5468 /// MorphNodeTo - This *mutates* the specified node to have the specified 5469 /// return type, opcode, and operands. 5470 /// 5471 /// Note that MorphNodeTo returns the resultant node. If there is already a 5472 /// node of the specified opcode and operands, it returns that node instead of 5473 /// the current one. Note that the SDLoc need not be the same. 5474 /// 5475 /// Using MorphNodeTo is faster than creating a new node and swapping it in 5476 /// with ReplaceAllUsesWith both because it often avoids allocating a new 5477 /// node, and because it doesn't require CSE recalculation for any of 5478 /// the node's users. 5479 /// 5480 /// However, note that MorphNodeTo recursively deletes dead nodes from the DAG. 5481 /// As a consequence it isn't appropriate to use from within the DAG combiner or 5482 /// the legalizer which maintain worklists that would need to be updated when 5483 /// deleting things. 5484 SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc, 5485 SDVTList VTs, ArrayRef<SDValue> Ops) { 5486 unsigned NumOps = Ops.size(); 5487 // If an identical node already exists, use it. 5488 void *IP = nullptr; 5489 if (VTs.VTs[VTs.NumVTs-1] != MVT::Glue) { 5490 FoldingSetNodeID ID; 5491 AddNodeIDNode(ID, Opc, VTs, Ops); 5492 if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP)) 5493 return UpdadeSDLocOnMergedSDNode(ON, SDLoc(N)); 5494 } 5495 5496 if (!RemoveNodeFromCSEMaps(N)) 5497 IP = nullptr; 5498 5499 // Start the morphing. 5500 N->NodeType = Opc; 5501 N->ValueList = VTs.VTs; 5502 N->NumValues = VTs.NumVTs; 5503 5504 // Clear the operands list, updating used nodes to remove this from their 5505 // use list. Keep track of any operands that become dead as a result. 5506 SmallPtrSet<SDNode*, 16> DeadNodeSet; 5507 for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) { 5508 SDUse &Use = *I++; 5509 SDNode *Used = Use.getNode(); 5510 Use.set(SDValue()); 5511 if (Used->use_empty()) 5512 DeadNodeSet.insert(Used); 5513 } 5514 5515 if (MachineSDNode *MN = dyn_cast<MachineSDNode>(N)) { 5516 // Initialize the memory references information. 5517 MN->setMemRefs(nullptr, nullptr); 5518 // If NumOps is larger than the # of operands we can have in a 5519 // MachineSDNode, reallocate the operand list. 5520 if (NumOps > MN->NumOperands || !MN->OperandsNeedDelete) { 5521 if (MN->OperandsNeedDelete) 5522 delete[] MN->OperandList; 5523 if (NumOps > array_lengthof(MN->LocalOperands)) 5524 // We're creating a final node that will live unmorphed for the 5525 // remainder of the current SelectionDAG iteration, so we can allocate 5526 // the operands directly out of a pool with no recycling metadata. 5527 MN->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps), 5528 Ops.data(), NumOps); 5529 else 5530 MN->InitOperands(MN->LocalOperands, Ops.data(), NumOps); 5531 MN->OperandsNeedDelete = false; 5532 } else 5533 MN->InitOperands(MN->OperandList, Ops.data(), NumOps); 5534 } else { 5535 // If NumOps is larger than the # of operands we currently have, reallocate 5536 // the operand list. 5537 if (NumOps > N->NumOperands) { 5538 if (N->OperandsNeedDelete) 5539 delete[] N->OperandList; 5540 N->InitOperands(new SDUse[NumOps], Ops.data(), NumOps); 5541 N->OperandsNeedDelete = true; 5542 } else 5543 N->InitOperands(N->OperandList, Ops.data(), NumOps); 5544 } 5545 5546 // Delete any nodes that are still dead after adding the uses for the 5547 // new operands. 5548 if (!DeadNodeSet.empty()) { 5549 SmallVector<SDNode *, 16> DeadNodes; 5550 for (SDNode *N : DeadNodeSet) 5551 if (N->use_empty()) 5552 DeadNodes.push_back(N); 5553 RemoveDeadNodes(DeadNodes); 5554 } 5555 5556 if (IP) 5557 CSEMap.InsertNode(N, IP); // Memoize the new node. 5558 return N; 5559 } 5560 5561 5562 /// getMachineNode - These are used for target selectors to create a new node 5563 /// with specified return type(s), MachineInstr opcode, and operands. 5564 /// 5565 /// Note that getMachineNode returns the resultant node. If there is already a 5566 /// node of the specified opcode and operands, it returns that node instead of 5567 /// the current one. 5568 MachineSDNode * 5569 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT) { 5570 SDVTList VTs = getVTList(VT); 5571 return getMachineNode(Opcode, dl, VTs, None); 5572 } 5573 5574 MachineSDNode * 5575 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, SDValue Op1) { 5576 SDVTList VTs = getVTList(VT); 5577 SDValue Ops[] = { Op1 }; 5578 return getMachineNode(Opcode, dl, VTs, Ops); 5579 } 5580 5581 MachineSDNode * 5582 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, 5583 SDValue Op1, SDValue Op2) { 5584 SDVTList VTs = getVTList(VT); 5585 SDValue Ops[] = { Op1, Op2 }; 5586 return getMachineNode(Opcode, dl, VTs, Ops); 5587 } 5588 5589 MachineSDNode * 5590 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, 5591 SDValue Op1, SDValue Op2, SDValue Op3) { 5592 SDVTList VTs = getVTList(VT); 5593 SDValue Ops[] = { Op1, Op2, Op3 }; 5594 return getMachineNode(Opcode, dl, VTs, Ops); 5595 } 5596 5597 MachineSDNode * 5598 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, 5599 ArrayRef<SDValue> Ops) { 5600 SDVTList VTs = getVTList(VT); 5601 return getMachineNode(Opcode, dl, VTs, Ops); 5602 } 5603 5604 MachineSDNode * 5605 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT1, EVT VT2) { 5606 SDVTList VTs = getVTList(VT1, VT2); 5607 return getMachineNode(Opcode, dl, VTs, None); 5608 } 5609 5610 MachineSDNode * 5611 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5612 EVT VT1, EVT VT2, SDValue Op1) { 5613 SDVTList VTs = getVTList(VT1, VT2); 5614 SDValue Ops[] = { Op1 }; 5615 return getMachineNode(Opcode, dl, VTs, Ops); 5616 } 5617 5618 MachineSDNode * 5619 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5620 EVT VT1, EVT VT2, SDValue Op1, SDValue Op2) { 5621 SDVTList VTs = getVTList(VT1, VT2); 5622 SDValue Ops[] = { Op1, Op2 }; 5623 return getMachineNode(Opcode, dl, VTs, Ops); 5624 } 5625 5626 MachineSDNode * 5627 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5628 EVT VT1, EVT VT2, SDValue Op1, 5629 SDValue Op2, SDValue Op3) { 5630 SDVTList VTs = getVTList(VT1, VT2); 5631 SDValue Ops[] = { Op1, Op2, Op3 }; 5632 return getMachineNode(Opcode, dl, VTs, Ops); 5633 } 5634 5635 MachineSDNode * 5636 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5637 EVT VT1, EVT VT2, 5638 ArrayRef<SDValue> Ops) { 5639 SDVTList VTs = getVTList(VT1, VT2); 5640 return getMachineNode(Opcode, dl, VTs, Ops); 5641 } 5642 5643 MachineSDNode * 5644 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5645 EVT VT1, EVT VT2, EVT VT3, 5646 SDValue Op1, SDValue Op2) { 5647 SDVTList VTs = getVTList(VT1, VT2, VT3); 5648 SDValue Ops[] = { Op1, Op2 }; 5649 return getMachineNode(Opcode, dl, VTs, Ops); 5650 } 5651 5652 MachineSDNode * 5653 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5654 EVT VT1, EVT VT2, EVT VT3, 5655 SDValue Op1, SDValue Op2, SDValue Op3) { 5656 SDVTList VTs = getVTList(VT1, VT2, VT3); 5657 SDValue Ops[] = { Op1, Op2, Op3 }; 5658 return getMachineNode(Opcode, dl, VTs, Ops); 5659 } 5660 5661 MachineSDNode * 5662 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5663 EVT VT1, EVT VT2, EVT VT3, 5664 ArrayRef<SDValue> Ops) { 5665 SDVTList VTs = getVTList(VT1, VT2, VT3); 5666 return getMachineNode(Opcode, dl, VTs, Ops); 5667 } 5668 5669 MachineSDNode * 5670 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT1, 5671 EVT VT2, EVT VT3, EVT VT4, 5672 ArrayRef<SDValue> Ops) { 5673 SDVTList VTs = getVTList(VT1, VT2, VT3, VT4); 5674 return getMachineNode(Opcode, dl, VTs, Ops); 5675 } 5676 5677 MachineSDNode * 5678 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5679 ArrayRef<EVT> ResultTys, 5680 ArrayRef<SDValue> Ops) { 5681 SDVTList VTs = getVTList(ResultTys); 5682 return getMachineNode(Opcode, dl, VTs, Ops); 5683 } 5684 5685 MachineSDNode * 5686 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc DL, SDVTList VTs, 5687 ArrayRef<SDValue> OpsArray) { 5688 bool DoCSE = VTs.VTs[VTs.NumVTs-1] != MVT::Glue; 5689 MachineSDNode *N; 5690 void *IP = nullptr; 5691 const SDValue *Ops = OpsArray.data(); 5692 unsigned NumOps = OpsArray.size(); 5693 5694 if (DoCSE) { 5695 FoldingSetNodeID ID; 5696 AddNodeIDNode(ID, ~Opcode, VTs, OpsArray); 5697 IP = nullptr; 5698 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) { 5699 return cast<MachineSDNode>(UpdadeSDLocOnMergedSDNode(E, DL)); 5700 } 5701 } 5702 5703 // Allocate a new MachineSDNode. 5704 N = new (NodeAllocator) MachineSDNode(~Opcode, DL.getIROrder(), 5705 DL.getDebugLoc(), VTs); 5706 5707 // Initialize the operands list. 5708 if (NumOps > array_lengthof(N->LocalOperands)) 5709 // We're creating a final node that will live unmorphed for the 5710 // remainder of the current SelectionDAG iteration, so we can allocate 5711 // the operands directly out of a pool with no recycling metadata. 5712 N->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps), 5713 Ops, NumOps); 5714 else 5715 N->InitOperands(N->LocalOperands, Ops, NumOps); 5716 N->OperandsNeedDelete = false; 5717 5718 if (DoCSE) 5719 CSEMap.InsertNode(N, IP); 5720 5721 InsertNode(N); 5722 return N; 5723 } 5724 5725 /// getTargetExtractSubreg - A convenience function for creating 5726 /// TargetOpcode::EXTRACT_SUBREG nodes. 5727 SDValue 5728 SelectionDAG::getTargetExtractSubreg(int SRIdx, SDLoc DL, EVT VT, 5729 SDValue Operand) { 5730 SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32); 5731 SDNode *Subreg = getMachineNode(TargetOpcode::EXTRACT_SUBREG, DL, 5732 VT, Operand, SRIdxVal); 5733 return SDValue(Subreg, 0); 5734 } 5735 5736 /// getTargetInsertSubreg - A convenience function for creating 5737 /// TargetOpcode::INSERT_SUBREG nodes. 5738 SDValue 5739 SelectionDAG::getTargetInsertSubreg(int SRIdx, SDLoc DL, EVT VT, 5740 SDValue Operand, SDValue Subreg) { 5741 SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32); 5742 SDNode *Result = getMachineNode(TargetOpcode::INSERT_SUBREG, DL, 5743 VT, Operand, Subreg, SRIdxVal); 5744 return SDValue(Result, 0); 5745 } 5746 5747 /// getNodeIfExists - Get the specified node if it's already available, or 5748 /// else return NULL. 5749 SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList, 5750 ArrayRef<SDValue> Ops, bool nuw, bool nsw, 5751 bool exact) { 5752 if (VTList.VTs[VTList.NumVTs - 1] != MVT::Glue) { 5753 FoldingSetNodeID ID; 5754 AddNodeIDNode(ID, Opcode, VTList, Ops); 5755 if (isBinOpWithFlags(Opcode)) 5756 AddBinaryNodeIDCustom(ID, nuw, nsw, exact); 5757 void *IP = nullptr; 5758 if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) 5759 return E; 5760 } 5761 return nullptr; 5762 } 5763 5764 /// getDbgValue - Creates a SDDbgValue node. 5765 /// 5766 /// SDNode 5767 SDDbgValue *SelectionDAG::getDbgValue(MDNode *Var, MDNode *Expr, SDNode *N, 5768 unsigned R, bool IsIndirect, uint64_t Off, 5769 DebugLoc DL, unsigned O) { 5770 return new (Allocator) SDDbgValue(Var, Expr, N, R, IsIndirect, Off, DL, O); 5771 } 5772 5773 /// Constant 5774 SDDbgValue *SelectionDAG::getConstantDbgValue(MDNode *Var, MDNode *Expr, 5775 const Value *C, uint64_t Off, 5776 DebugLoc DL, unsigned O) { 5777 return new (Allocator) SDDbgValue(Var, Expr, C, Off, DL, O); 5778 } 5779 5780 /// FrameIndex 5781 SDDbgValue *SelectionDAG::getFrameIndexDbgValue(MDNode *Var, MDNode *Expr, 5782 unsigned FI, uint64_t Off, 5783 DebugLoc DL, unsigned O) { 5784 return new (Allocator) SDDbgValue(Var, Expr, FI, Off, DL, O); 5785 } 5786 5787 namespace { 5788 5789 /// RAUWUpdateListener - Helper for ReplaceAllUsesWith - When the node 5790 /// pointed to by a use iterator is deleted, increment the use iterator 5791 /// so that it doesn't dangle. 5792 /// 5793 class RAUWUpdateListener : public SelectionDAG::DAGUpdateListener { 5794 SDNode::use_iterator &UI; 5795 SDNode::use_iterator &UE; 5796 5797 void NodeDeleted(SDNode *N, SDNode *E) override { 5798 // Increment the iterator as needed. 5799 while (UI != UE && N == *UI) 5800 ++UI; 5801 } 5802 5803 public: 5804 RAUWUpdateListener(SelectionDAG &d, 5805 SDNode::use_iterator &ui, 5806 SDNode::use_iterator &ue) 5807 : SelectionDAG::DAGUpdateListener(d), UI(ui), UE(ue) {} 5808 }; 5809 5810 } 5811 5812 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead. 5813 /// This can cause recursive merging of nodes in the DAG. 5814 /// 5815 /// This version assumes From has a single result value. 5816 /// 5817 void SelectionDAG::ReplaceAllUsesWith(SDValue FromN, SDValue To) { 5818 SDNode *From = FromN.getNode(); 5819 assert(From->getNumValues() == 1 && FromN.getResNo() == 0 && 5820 "Cannot replace with this method!"); 5821 assert(From != To.getNode() && "Cannot replace uses of with self"); 5822 5823 // Iterate over all the existing uses of From. New uses will be added 5824 // to the beginning of the use list, which we avoid visiting. 5825 // This specifically avoids visiting uses of From that arise while the 5826 // replacement is happening, because any such uses would be the result 5827 // of CSE: If an existing node looks like From after one of its operands 5828 // is replaced by To, we don't want to replace of all its users with To 5829 // too. See PR3018 for more info. 5830 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end(); 5831 RAUWUpdateListener Listener(*this, UI, UE); 5832 while (UI != UE) { 5833 SDNode *User = *UI; 5834 5835 // This node is about to morph, remove its old self from the CSE maps. 5836 RemoveNodeFromCSEMaps(User); 5837 5838 // A user can appear in a use list multiple times, and when this 5839 // happens the uses are usually next to each other in the list. 5840 // To help reduce the number of CSE recomputations, process all 5841 // the uses of this user that we can find this way. 5842 do { 5843 SDUse &Use = UI.getUse(); 5844 ++UI; 5845 Use.set(To); 5846 } while (UI != UE && *UI == User); 5847 5848 // Now that we have modified User, add it back to the CSE maps. If it 5849 // already exists there, recursively merge the results together. 5850 AddModifiedNodeToCSEMaps(User); 5851 } 5852 5853 // If we just RAUW'd the root, take note. 5854 if (FromN == getRoot()) 5855 setRoot(To); 5856 } 5857 5858 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead. 5859 /// This can cause recursive merging of nodes in the DAG. 5860 /// 5861 /// This version assumes that for each value of From, there is a 5862 /// corresponding value in To in the same position with the same type. 5863 /// 5864 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To) { 5865 #ifndef NDEBUG 5866 for (unsigned i = 0, e = From->getNumValues(); i != e; ++i) 5867 assert((!From->hasAnyUseOfValue(i) || 5868 From->getValueType(i) == To->getValueType(i)) && 5869 "Cannot use this version of ReplaceAllUsesWith!"); 5870 #endif 5871 5872 // Handle the trivial case. 5873 if (From == To) 5874 return; 5875 5876 // Iterate over just the existing users of From. See the comments in 5877 // the ReplaceAllUsesWith above. 5878 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end(); 5879 RAUWUpdateListener Listener(*this, UI, UE); 5880 while (UI != UE) { 5881 SDNode *User = *UI; 5882 5883 // This node is about to morph, remove its old self from the CSE maps. 5884 RemoveNodeFromCSEMaps(User); 5885 5886 // A user can appear in a use list multiple times, and when this 5887 // happens the uses are usually next to each other in the list. 5888 // To help reduce the number of CSE recomputations, process all 5889 // the uses of this user that we can find this way. 5890 do { 5891 SDUse &Use = UI.getUse(); 5892 ++UI; 5893 Use.setNode(To); 5894 } while (UI != UE && *UI == User); 5895 5896 // Now that we have modified User, add it back to the CSE maps. If it 5897 // already exists there, recursively merge the results together. 5898 AddModifiedNodeToCSEMaps(User); 5899 } 5900 5901 // If we just RAUW'd the root, take note. 5902 if (From == getRoot().getNode()) 5903 setRoot(SDValue(To, getRoot().getResNo())); 5904 } 5905 5906 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead. 5907 /// This can cause recursive merging of nodes in the DAG. 5908 /// 5909 /// This version can replace From with any result values. To must match the 5910 /// number and types of values returned by From. 5911 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, const SDValue *To) { 5912 if (From->getNumValues() == 1) // Handle the simple case efficiently. 5913 return ReplaceAllUsesWith(SDValue(From, 0), To[0]); 5914 5915 // Iterate over just the existing users of From. See the comments in 5916 // the ReplaceAllUsesWith above. 5917 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end(); 5918 RAUWUpdateListener Listener(*this, UI, UE); 5919 while (UI != UE) { 5920 SDNode *User = *UI; 5921 5922 // This node is about to morph, remove its old self from the CSE maps. 5923 RemoveNodeFromCSEMaps(User); 5924 5925 // A user can appear in a use list multiple times, and when this 5926 // happens the uses are usually next to each other in the list. 5927 // To help reduce the number of CSE recomputations, process all 5928 // the uses of this user that we can find this way. 5929 do { 5930 SDUse &Use = UI.getUse(); 5931 const SDValue &ToOp = To[Use.getResNo()]; 5932 ++UI; 5933 Use.set(ToOp); 5934 } while (UI != UE && *UI == User); 5935 5936 // Now that we have modified User, add it back to the CSE maps. If it 5937 // already exists there, recursively merge the results together. 5938 AddModifiedNodeToCSEMaps(User); 5939 } 5940 5941 // If we just RAUW'd the root, take note. 5942 if (From == getRoot().getNode()) 5943 setRoot(SDValue(To[getRoot().getResNo()])); 5944 } 5945 5946 /// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving 5947 /// uses of other values produced by From.getNode() alone. The Deleted 5948 /// vector is handled the same way as for ReplaceAllUsesWith. 5949 void SelectionDAG::ReplaceAllUsesOfValueWith(SDValue From, SDValue To){ 5950 // Handle the really simple, really trivial case efficiently. 5951 if (From == To) return; 5952 5953 // Handle the simple, trivial, case efficiently. 5954 if (From.getNode()->getNumValues() == 1) { 5955 ReplaceAllUsesWith(From, To); 5956 return; 5957 } 5958 5959 // Iterate over just the existing users of From. See the comments in 5960 // the ReplaceAllUsesWith above. 5961 SDNode::use_iterator UI = From.getNode()->use_begin(), 5962 UE = From.getNode()->use_end(); 5963 RAUWUpdateListener Listener(*this, UI, UE); 5964 while (UI != UE) { 5965 SDNode *User = *UI; 5966 bool UserRemovedFromCSEMaps = false; 5967 5968 // A user can appear in a use list multiple times, and when this 5969 // happens the uses are usually next to each other in the list. 5970 // To help reduce the number of CSE recomputations, process all 5971 // the uses of this user that we can find this way. 5972 do { 5973 SDUse &Use = UI.getUse(); 5974 5975 // Skip uses of different values from the same node. 5976 if (Use.getResNo() != From.getResNo()) { 5977 ++UI; 5978 continue; 5979 } 5980 5981 // If this node hasn't been modified yet, it's still in the CSE maps, 5982 // so remove its old self from the CSE maps. 5983 if (!UserRemovedFromCSEMaps) { 5984 RemoveNodeFromCSEMaps(User); 5985 UserRemovedFromCSEMaps = true; 5986 } 5987 5988 ++UI; 5989 Use.set(To); 5990 } while (UI != UE && *UI == User); 5991 5992 // We are iterating over all uses of the From node, so if a use 5993 // doesn't use the specific value, no changes are made. 5994 if (!UserRemovedFromCSEMaps) 5995 continue; 5996 5997 // Now that we have modified User, add it back to the CSE maps. If it 5998 // already exists there, recursively merge the results together. 5999 AddModifiedNodeToCSEMaps(User); 6000 } 6001 6002 // If we just RAUW'd the root, take note. 6003 if (From == getRoot()) 6004 setRoot(To); 6005 } 6006 6007 namespace { 6008 /// UseMemo - This class is used by SelectionDAG::ReplaceAllUsesOfValuesWith 6009 /// to record information about a use. 6010 struct UseMemo { 6011 SDNode *User; 6012 unsigned Index; 6013 SDUse *Use; 6014 }; 6015 6016 /// operator< - Sort Memos by User. 6017 bool operator<(const UseMemo &L, const UseMemo &R) { 6018 return (intptr_t)L.User < (intptr_t)R.User; 6019 } 6020 } 6021 6022 /// ReplaceAllUsesOfValuesWith - Replace any uses of From with To, leaving 6023 /// uses of other values produced by From.getNode() alone. The same value 6024 /// may appear in both the From and To list. The Deleted vector is 6025 /// handled the same way as for ReplaceAllUsesWith. 6026 void SelectionDAG::ReplaceAllUsesOfValuesWith(const SDValue *From, 6027 const SDValue *To, 6028 unsigned Num){ 6029 // Handle the simple, trivial case efficiently. 6030 if (Num == 1) 6031 return ReplaceAllUsesOfValueWith(*From, *To); 6032 6033 // Read up all the uses and make records of them. This helps 6034 // processing new uses that are introduced during the 6035 // replacement process. 6036 SmallVector<UseMemo, 4> Uses; 6037 for (unsigned i = 0; i != Num; ++i) { 6038 unsigned FromResNo = From[i].getResNo(); 6039 SDNode *FromNode = From[i].getNode(); 6040 for (SDNode::use_iterator UI = FromNode->use_begin(), 6041 E = FromNode->use_end(); UI != E; ++UI) { 6042 SDUse &Use = UI.getUse(); 6043 if (Use.getResNo() == FromResNo) { 6044 UseMemo Memo = { *UI, i, &Use }; 6045 Uses.push_back(Memo); 6046 } 6047 } 6048 } 6049 6050 // Sort the uses, so that all the uses from a given User are together. 6051 std::sort(Uses.begin(), Uses.end()); 6052 6053 for (unsigned UseIndex = 0, UseIndexEnd = Uses.size(); 6054 UseIndex != UseIndexEnd; ) { 6055 // We know that this user uses some value of From. If it is the right 6056 // value, update it. 6057 SDNode *User = Uses[UseIndex].User; 6058 6059 // This node is about to morph, remove its old self from the CSE maps. 6060 RemoveNodeFromCSEMaps(User); 6061 6062 // The Uses array is sorted, so all the uses for a given User 6063 // are next to each other in the list. 6064 // To help reduce the number of CSE recomputations, process all 6065 // the uses of this user that we can find this way. 6066 do { 6067 unsigned i = Uses[UseIndex].Index; 6068 SDUse &Use = *Uses[UseIndex].Use; 6069 ++UseIndex; 6070 6071 Use.set(To[i]); 6072 } while (UseIndex != UseIndexEnd && Uses[UseIndex].User == User); 6073 6074 // Now that we have modified User, add it back to the CSE maps. If it 6075 // already exists there, recursively merge the results together. 6076 AddModifiedNodeToCSEMaps(User); 6077 } 6078 } 6079 6080 /// AssignTopologicalOrder - Assign a unique node id for each node in the DAG 6081 /// based on their topological order. It returns the maximum id and a vector 6082 /// of the SDNodes* in assigned order by reference. 6083 unsigned SelectionDAG::AssignTopologicalOrder() { 6084 6085 unsigned DAGSize = 0; 6086 6087 // SortedPos tracks the progress of the algorithm. Nodes before it are 6088 // sorted, nodes after it are unsorted. When the algorithm completes 6089 // it is at the end of the list. 6090 allnodes_iterator SortedPos = allnodes_begin(); 6091 6092 // Visit all the nodes. Move nodes with no operands to the front of 6093 // the list immediately. Annotate nodes that do have operands with their 6094 // operand count. Before we do this, the Node Id fields of the nodes 6095 // may contain arbitrary values. After, the Node Id fields for nodes 6096 // before SortedPos will contain the topological sort index, and the 6097 // Node Id fields for nodes At SortedPos and after will contain the 6098 // count of outstanding operands. 6099 for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ) { 6100 SDNode *N = I++; 6101 checkForCycles(N, this); 6102 unsigned Degree = N->getNumOperands(); 6103 if (Degree == 0) { 6104 // A node with no uses, add it to the result array immediately. 6105 N->setNodeId(DAGSize++); 6106 allnodes_iterator Q = N; 6107 if (Q != SortedPos) 6108 SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(Q)); 6109 assert(SortedPos != AllNodes.end() && "Overran node list"); 6110 ++SortedPos; 6111 } else { 6112 // Temporarily use the Node Id as scratch space for the degree count. 6113 N->setNodeId(Degree); 6114 } 6115 } 6116 6117 // Visit all the nodes. As we iterate, move nodes into sorted order, 6118 // such that by the time the end is reached all nodes will be sorted. 6119 for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I) { 6120 SDNode *N = I; 6121 checkForCycles(N, this); 6122 // N is in sorted position, so all its uses have one less operand 6123 // that needs to be sorted. 6124 for (SDNode::use_iterator UI = N->use_begin(), UE = N->use_end(); 6125 UI != UE; ++UI) { 6126 SDNode *P = *UI; 6127 unsigned Degree = P->getNodeId(); 6128 assert(Degree != 0 && "Invalid node degree"); 6129 --Degree; 6130 if (Degree == 0) { 6131 // All of P's operands are sorted, so P may sorted now. 6132 P->setNodeId(DAGSize++); 6133 if (P != SortedPos) 6134 SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(P)); 6135 assert(SortedPos != AllNodes.end() && "Overran node list"); 6136 ++SortedPos; 6137 } else { 6138 // Update P's outstanding operand count. 6139 P->setNodeId(Degree); 6140 } 6141 } 6142 if (I == SortedPos) { 6143 #ifndef NDEBUG 6144 SDNode *S = ++I; 6145 dbgs() << "Overran sorted position:\n"; 6146 S->dumprFull(this); dbgs() << "\n"; 6147 dbgs() << "Checking if this is due to cycles\n"; 6148 checkForCycles(this, true); 6149 #endif 6150 llvm_unreachable(nullptr); 6151 } 6152 } 6153 6154 assert(SortedPos == AllNodes.end() && 6155 "Topological sort incomplete!"); 6156 assert(AllNodes.front().getOpcode() == ISD::EntryToken && 6157 "First node in topological sort is not the entry token!"); 6158 assert(AllNodes.front().getNodeId() == 0 && 6159 "First node in topological sort has non-zero id!"); 6160 assert(AllNodes.front().getNumOperands() == 0 && 6161 "First node in topological sort has operands!"); 6162 assert(AllNodes.back().getNodeId() == (int)DAGSize-1 && 6163 "Last node in topologic sort has unexpected id!"); 6164 assert(AllNodes.back().use_empty() && 6165 "Last node in topologic sort has users!"); 6166 assert(DAGSize == allnodes_size() && "Node count mismatch!"); 6167 return DAGSize; 6168 } 6169 6170 /// AddDbgValue - Add a dbg_value SDNode. If SD is non-null that means the 6171 /// value is produced by SD. 6172 void SelectionDAG::AddDbgValue(SDDbgValue *DB, SDNode *SD, bool isParameter) { 6173 DbgInfo->add(DB, SD, isParameter); 6174 if (SD) 6175 SD->setHasDebugValue(true); 6176 } 6177 6178 /// TransferDbgValues - Transfer SDDbgValues. 6179 void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) { 6180 if (From == To || !From.getNode()->getHasDebugValue()) 6181 return; 6182 SDNode *FromNode = From.getNode(); 6183 SDNode *ToNode = To.getNode(); 6184 ArrayRef<SDDbgValue *> DVs = GetDbgValues(FromNode); 6185 SmallVector<SDDbgValue *, 2> ClonedDVs; 6186 for (ArrayRef<SDDbgValue *>::iterator I = DVs.begin(), E = DVs.end(); 6187 I != E; ++I) { 6188 SDDbgValue *Dbg = *I; 6189 if (Dbg->getKind() == SDDbgValue::SDNODE) { 6190 SDDbgValue *Clone = 6191 getDbgValue(Dbg->getVariable(), Dbg->getExpression(), ToNode, 6192 To.getResNo(), Dbg->isIndirect(), Dbg->getOffset(), 6193 Dbg->getDebugLoc(), Dbg->getOrder()); 6194 ClonedDVs.push_back(Clone); 6195 } 6196 } 6197 for (SmallVectorImpl<SDDbgValue *>::iterator I = ClonedDVs.begin(), 6198 E = ClonedDVs.end(); I != E; ++I) 6199 AddDbgValue(*I, ToNode, false); 6200 } 6201 6202 //===----------------------------------------------------------------------===// 6203 // SDNode Class 6204 //===----------------------------------------------------------------------===// 6205 6206 HandleSDNode::~HandleSDNode() { 6207 DropOperands(); 6208 } 6209 6210 GlobalAddressSDNode::GlobalAddressSDNode(unsigned Opc, unsigned Order, 6211 DebugLoc DL, const GlobalValue *GA, 6212 EVT VT, int64_t o, unsigned char TF) 6213 : SDNode(Opc, Order, DL, getSDVTList(VT)), Offset(o), TargetFlags(TF) { 6214 TheGlobal = GA; 6215 } 6216 6217 AddrSpaceCastSDNode::AddrSpaceCastSDNode(unsigned Order, DebugLoc dl, EVT VT, 6218 SDValue X, unsigned SrcAS, 6219 unsigned DestAS) 6220 : UnarySDNode(ISD::ADDRSPACECAST, Order, dl, getSDVTList(VT), X), 6221 SrcAddrSpace(SrcAS), DestAddrSpace(DestAS) {} 6222 6223 MemSDNode::MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, 6224 EVT memvt, MachineMemOperand *mmo) 6225 : SDNode(Opc, Order, dl, VTs), MemoryVT(memvt), MMO(mmo) { 6226 SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(), 6227 MMO->isNonTemporal(), MMO->isInvariant()); 6228 assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!"); 6229 assert(isNonTemporal() == MMO->isNonTemporal() && 6230 "Non-temporal encoding error!"); 6231 // We check here that the size of the memory operand fits within the size of 6232 // the MMO. This is because the MMO might indicate only a possible address 6233 // range instead of specifying the affected memory addresses precisely. 6234 assert(memvt.getStoreSize() <= MMO->getSize() && "Size mismatch!"); 6235 } 6236 6237 MemSDNode::MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, 6238 ArrayRef<SDValue> Ops, EVT memvt, MachineMemOperand *mmo) 6239 : SDNode(Opc, Order, dl, VTs, Ops), 6240 MemoryVT(memvt), MMO(mmo) { 6241 SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(), 6242 MMO->isNonTemporal(), MMO->isInvariant()); 6243 assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!"); 6244 assert(memvt.getStoreSize() <= MMO->getSize() && "Size mismatch!"); 6245 } 6246 6247 /// Profile - Gather unique data for the node. 6248 /// 6249 void SDNode::Profile(FoldingSetNodeID &ID) const { 6250 AddNodeIDNode(ID, this); 6251 } 6252 6253 namespace { 6254 struct EVTArray { 6255 std::vector<EVT> VTs; 6256 6257 EVTArray() { 6258 VTs.reserve(MVT::LAST_VALUETYPE); 6259 for (unsigned i = 0; i < MVT::LAST_VALUETYPE; ++i) 6260 VTs.push_back(MVT((MVT::SimpleValueType)i)); 6261 } 6262 }; 6263 } 6264 6265 static ManagedStatic<std::set<EVT, EVT::compareRawBits> > EVTs; 6266 static ManagedStatic<EVTArray> SimpleVTArray; 6267 static ManagedStatic<sys::SmartMutex<true> > VTMutex; 6268 6269 /// getValueTypeList - Return a pointer to the specified value type. 6270 /// 6271 const EVT *SDNode::getValueTypeList(EVT VT) { 6272 if (VT.isExtended()) { 6273 sys::SmartScopedLock<true> Lock(*VTMutex); 6274 return &(*EVTs->insert(VT).first); 6275 } else { 6276 assert(VT.getSimpleVT() < MVT::LAST_VALUETYPE && 6277 "Value type out of range!"); 6278 return &SimpleVTArray->VTs[VT.getSimpleVT().SimpleTy]; 6279 } 6280 } 6281 6282 /// hasNUsesOfValue - Return true if there are exactly NUSES uses of the 6283 /// indicated value. This method ignores uses of other values defined by this 6284 /// operation. 6285 bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const { 6286 assert(Value < getNumValues() && "Bad value!"); 6287 6288 // TODO: Only iterate over uses of a given value of the node 6289 for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI) { 6290 if (UI.getUse().getResNo() == Value) { 6291 if (NUses == 0) 6292 return false; 6293 --NUses; 6294 } 6295 } 6296 6297 // Found exactly the right number of uses? 6298 return NUses == 0; 6299 } 6300 6301 6302 /// hasAnyUseOfValue - Return true if there are any use of the indicated 6303 /// value. This method ignores uses of other values defined by this operation. 6304 bool SDNode::hasAnyUseOfValue(unsigned Value) const { 6305 assert(Value < getNumValues() && "Bad value!"); 6306 6307 for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI) 6308 if (UI.getUse().getResNo() == Value) 6309 return true; 6310 6311 return false; 6312 } 6313 6314 6315 /// isOnlyUserOf - Return true if this node is the only use of N. 6316 /// 6317 bool SDNode::isOnlyUserOf(SDNode *N) const { 6318 bool Seen = false; 6319 for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) { 6320 SDNode *User = *I; 6321 if (User == this) 6322 Seen = true; 6323 else 6324 return false; 6325 } 6326 6327 return Seen; 6328 } 6329 6330 /// isOperand - Return true if this node is an operand of N. 6331 /// 6332 bool SDValue::isOperandOf(SDNode *N) const { 6333 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) 6334 if (*this == N->getOperand(i)) 6335 return true; 6336 return false; 6337 } 6338 6339 bool SDNode::isOperandOf(SDNode *N) const { 6340 for (unsigned i = 0, e = N->NumOperands; i != e; ++i) 6341 if (this == N->OperandList[i].getNode()) 6342 return true; 6343 return false; 6344 } 6345 6346 /// reachesChainWithoutSideEffects - Return true if this operand (which must 6347 /// be a chain) reaches the specified operand without crossing any 6348 /// side-effecting instructions on any chain path. In practice, this looks 6349 /// through token factors and non-volatile loads. In order to remain efficient, 6350 /// this only looks a couple of nodes in, it does not do an exhaustive search. 6351 bool SDValue::reachesChainWithoutSideEffects(SDValue Dest, 6352 unsigned Depth) const { 6353 if (*this == Dest) return true; 6354 6355 // Don't search too deeply, we just want to be able to see through 6356 // TokenFactor's etc. 6357 if (Depth == 0) return false; 6358 6359 // If this is a token factor, all inputs to the TF happen in parallel. If any 6360 // of the operands of the TF does not reach dest, then we cannot do the xform. 6361 if (getOpcode() == ISD::TokenFactor) { 6362 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) 6363 if (!getOperand(i).reachesChainWithoutSideEffects(Dest, Depth-1)) 6364 return false; 6365 return true; 6366 } 6367 6368 // Loads don't have side effects, look through them. 6369 if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(*this)) { 6370 if (!Ld->isVolatile()) 6371 return Ld->getChain().reachesChainWithoutSideEffects(Dest, Depth-1); 6372 } 6373 return false; 6374 } 6375 6376 /// hasPredecessor - Return true if N is a predecessor of this node. 6377 /// N is either an operand of this node, or can be reached by recursively 6378 /// traversing up the operands. 6379 /// NOTE: This is an expensive method. Use it carefully. 6380 bool SDNode::hasPredecessor(const SDNode *N) const { 6381 SmallPtrSet<const SDNode *, 32> Visited; 6382 SmallVector<const SDNode *, 16> Worklist; 6383 return hasPredecessorHelper(N, Visited, Worklist); 6384 } 6385 6386 bool 6387 SDNode::hasPredecessorHelper(const SDNode *N, 6388 SmallPtrSetImpl<const SDNode *> &Visited, 6389 SmallVectorImpl<const SDNode *> &Worklist) const { 6390 if (Visited.empty()) { 6391 Worklist.push_back(this); 6392 } else { 6393 // Take a look in the visited set. If we've already encountered this node 6394 // we needn't search further. 6395 if (Visited.count(N)) 6396 return true; 6397 } 6398 6399 // Haven't visited N yet. Continue the search. 6400 while (!Worklist.empty()) { 6401 const SDNode *M = Worklist.pop_back_val(); 6402 for (unsigned i = 0, e = M->getNumOperands(); i != e; ++i) { 6403 SDNode *Op = M->getOperand(i).getNode(); 6404 if (Visited.insert(Op)) 6405 Worklist.push_back(Op); 6406 if (Op == N) 6407 return true; 6408 } 6409 } 6410 6411 return false; 6412 } 6413 6414 uint64_t SDNode::getConstantOperandVal(unsigned Num) const { 6415 assert(Num < NumOperands && "Invalid child # of SDNode!"); 6416 return cast<ConstantSDNode>(OperandList[Num])->getZExtValue(); 6417 } 6418 6419 SDValue SelectionDAG::UnrollVectorOp(SDNode *N, unsigned ResNE) { 6420 assert(N->getNumValues() == 1 && 6421 "Can't unroll a vector with multiple results!"); 6422 6423 EVT VT = N->getValueType(0); 6424 unsigned NE = VT.getVectorNumElements(); 6425 EVT EltVT = VT.getVectorElementType(); 6426 SDLoc dl(N); 6427 6428 SmallVector<SDValue, 8> Scalars; 6429 SmallVector<SDValue, 4> Operands(N->getNumOperands()); 6430 6431 // If ResNE is 0, fully unroll the vector op. 6432 if (ResNE == 0) 6433 ResNE = NE; 6434 else if (NE > ResNE) 6435 NE = ResNE; 6436 6437 unsigned i; 6438 for (i= 0; i != NE; ++i) { 6439 for (unsigned j = 0, e = N->getNumOperands(); j != e; ++j) { 6440 SDValue Operand = N->getOperand(j); 6441 EVT OperandVT = Operand.getValueType(); 6442 if (OperandVT.isVector()) { 6443 // A vector operand; extract a single element. 6444 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 6445 EVT OperandEltVT = OperandVT.getVectorElementType(); 6446 Operands[j] = getNode(ISD::EXTRACT_VECTOR_ELT, dl, 6447 OperandEltVT, 6448 Operand, 6449 getConstant(i, TLI->getVectorIdxTy())); 6450 } else { 6451 // A scalar operand; just use it as is. 6452 Operands[j] = Operand; 6453 } 6454 } 6455 6456 switch (N->getOpcode()) { 6457 default: 6458 Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands)); 6459 break; 6460 case ISD::VSELECT: 6461 Scalars.push_back(getNode(ISD::SELECT, dl, EltVT, Operands)); 6462 break; 6463 case ISD::SHL: 6464 case ISD::SRA: 6465 case ISD::SRL: 6466 case ISD::ROTL: 6467 case ISD::ROTR: 6468 Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands[0], 6469 getShiftAmountOperand(Operands[0].getValueType(), 6470 Operands[1]))); 6471 break; 6472 case ISD::SIGN_EXTEND_INREG: 6473 case ISD::FP_ROUND_INREG: { 6474 EVT ExtVT = cast<VTSDNode>(Operands[1])->getVT().getVectorElementType(); 6475 Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, 6476 Operands[0], 6477 getValueType(ExtVT))); 6478 } 6479 } 6480 } 6481 6482 for (; i < ResNE; ++i) 6483 Scalars.push_back(getUNDEF(EltVT)); 6484 6485 return getNode(ISD::BUILD_VECTOR, dl, 6486 EVT::getVectorVT(*getContext(), EltVT, ResNE), Scalars); 6487 } 6488 6489 6490 /// isConsecutiveLoad - Return true if LD is loading 'Bytes' bytes from a 6491 /// location that is 'Dist' units away from the location that the 'Base' load 6492 /// is loading from. 6493 bool SelectionDAG::isConsecutiveLoad(LoadSDNode *LD, LoadSDNode *Base, 6494 unsigned Bytes, int Dist) const { 6495 if (LD->getChain() != Base->getChain()) 6496 return false; 6497 EVT VT = LD->getValueType(0); 6498 if (VT.getSizeInBits() / 8 != Bytes) 6499 return false; 6500 6501 SDValue Loc = LD->getOperand(1); 6502 SDValue BaseLoc = Base->getOperand(1); 6503 if (Loc.getOpcode() == ISD::FrameIndex) { 6504 if (BaseLoc.getOpcode() != ISD::FrameIndex) 6505 return false; 6506 const MachineFrameInfo *MFI = getMachineFunction().getFrameInfo(); 6507 int FI = cast<FrameIndexSDNode>(Loc)->getIndex(); 6508 int BFI = cast<FrameIndexSDNode>(BaseLoc)->getIndex(); 6509 int FS = MFI->getObjectSize(FI); 6510 int BFS = MFI->getObjectSize(BFI); 6511 if (FS != BFS || FS != (int)Bytes) return false; 6512 return MFI->getObjectOffset(FI) == (MFI->getObjectOffset(BFI) + Dist*Bytes); 6513 } 6514 6515 // Handle X+C 6516 if (isBaseWithConstantOffset(Loc) && Loc.getOperand(0) == BaseLoc && 6517 cast<ConstantSDNode>(Loc.getOperand(1))->getSExtValue() == Dist*Bytes) 6518 return true; 6519 6520 const GlobalValue *GV1 = nullptr; 6521 const GlobalValue *GV2 = nullptr; 6522 int64_t Offset1 = 0; 6523 int64_t Offset2 = 0; 6524 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 6525 bool isGA1 = TLI->isGAPlusOffset(Loc.getNode(), GV1, Offset1); 6526 bool isGA2 = TLI->isGAPlusOffset(BaseLoc.getNode(), GV2, Offset2); 6527 if (isGA1 && isGA2 && GV1 == GV2) 6528 return Offset1 == (Offset2 + Dist*Bytes); 6529 return false; 6530 } 6531 6532 6533 /// InferPtrAlignment - Infer alignment of a load / store address. Return 0 if 6534 /// it cannot be inferred. 6535 unsigned SelectionDAG::InferPtrAlignment(SDValue Ptr) const { 6536 // If this is a GlobalAddress + cst, return the alignment. 6537 const GlobalValue *GV; 6538 int64_t GVOffset = 0; 6539 const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering(); 6540 if (TLI->isGAPlusOffset(Ptr.getNode(), GV, GVOffset)) { 6541 unsigned PtrWidth = TLI->getPointerTypeSizeInBits(GV->getType()); 6542 APInt KnownZero(PtrWidth, 0), KnownOne(PtrWidth, 0); 6543 llvm::computeKnownBits(const_cast<GlobalValue*>(GV), KnownZero, KnownOne, 6544 TLI->getDataLayout()); 6545 unsigned AlignBits = KnownZero.countTrailingOnes(); 6546 unsigned Align = AlignBits ? 1 << std::min(31U, AlignBits) : 0; 6547 if (Align) 6548 return MinAlign(Align, GVOffset); 6549 } 6550 6551 // If this is a direct reference to a stack slot, use information about the 6552 // stack slot's alignment. 6553 int FrameIdx = 1 << 31; 6554 int64_t FrameOffset = 0; 6555 if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr)) { 6556 FrameIdx = FI->getIndex(); 6557 } else if (isBaseWithConstantOffset(Ptr) && 6558 isa<FrameIndexSDNode>(Ptr.getOperand(0))) { 6559 // Handle FI+Cst 6560 FrameIdx = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex(); 6561 FrameOffset = Ptr.getConstantOperandVal(1); 6562 } 6563 6564 if (FrameIdx != (1 << 31)) { 6565 const MachineFrameInfo &MFI = *getMachineFunction().getFrameInfo(); 6566 unsigned FIInfoAlign = MinAlign(MFI.getObjectAlignment(FrameIdx), 6567 FrameOffset); 6568 return FIInfoAlign; 6569 } 6570 6571 return 0; 6572 } 6573 6574 /// GetSplitDestVTs - Compute the VTs needed for the low/hi parts of a type 6575 /// which is split (or expanded) into two not necessarily identical pieces. 6576 std::pair<EVT, EVT> SelectionDAG::GetSplitDestVTs(const EVT &VT) const { 6577 // Currently all types are split in half. 6578 EVT LoVT, HiVT; 6579 if (!VT.isVector()) { 6580 LoVT = HiVT = TLI->getTypeToTransformTo(*getContext(), VT); 6581 } else { 6582 unsigned NumElements = VT.getVectorNumElements(); 6583 assert(!(NumElements & 1) && "Splitting vector, but not in half!"); 6584 LoVT = HiVT = EVT::getVectorVT(*getContext(), VT.getVectorElementType(), 6585 NumElements/2); 6586 } 6587 return std::make_pair(LoVT, HiVT); 6588 } 6589 6590 /// SplitVector - Split the vector with EXTRACT_SUBVECTOR and return the 6591 /// low/high part. 6592 std::pair<SDValue, SDValue> 6593 SelectionDAG::SplitVector(const SDValue &N, const SDLoc &DL, const EVT &LoVT, 6594 const EVT &HiVT) { 6595 assert(LoVT.getVectorNumElements() + HiVT.getVectorNumElements() <= 6596 N.getValueType().getVectorNumElements() && 6597 "More vector elements requested than available!"); 6598 SDValue Lo, Hi; 6599 Lo = getNode(ISD::EXTRACT_SUBVECTOR, DL, LoVT, N, 6600 getConstant(0, TLI->getVectorIdxTy())); 6601 Hi = getNode(ISD::EXTRACT_SUBVECTOR, DL, HiVT, N, 6602 getConstant(LoVT.getVectorNumElements(), TLI->getVectorIdxTy())); 6603 return std::make_pair(Lo, Hi); 6604 } 6605 6606 void SelectionDAG::ExtractVectorElements(SDValue Op, 6607 SmallVectorImpl<SDValue> &Args, 6608 unsigned Start, unsigned Count) { 6609 EVT VT = Op.getValueType(); 6610 if (Count == 0) 6611 Count = VT.getVectorNumElements(); 6612 6613 EVT EltVT = VT.getVectorElementType(); 6614 EVT IdxTy = TLI->getVectorIdxTy(); 6615 SDLoc SL(Op); 6616 for (unsigned i = Start, e = Start + Count; i != e; ++i) { 6617 Args.push_back(getNode(ISD::EXTRACT_VECTOR_ELT, SL, EltVT, 6618 Op, getConstant(i, IdxTy))); 6619 } 6620 } 6621 6622 // getAddressSpace - Return the address space this GlobalAddress belongs to. 6623 unsigned GlobalAddressSDNode::getAddressSpace() const { 6624 return getGlobal()->getType()->getAddressSpace(); 6625 } 6626 6627 6628 Type *ConstantPoolSDNode::getType() const { 6629 if (isMachineConstantPoolEntry()) 6630 return Val.MachineCPVal->getType(); 6631 return Val.ConstVal->getType(); 6632 } 6633 6634 bool BuildVectorSDNode::isConstantSplat(APInt &SplatValue, 6635 APInt &SplatUndef, 6636 unsigned &SplatBitSize, 6637 bool &HasAnyUndefs, 6638 unsigned MinSplatBits, 6639 bool isBigEndian) const { 6640 EVT VT = getValueType(0); 6641 assert(VT.isVector() && "Expected a vector type"); 6642 unsigned sz = VT.getSizeInBits(); 6643 if (MinSplatBits > sz) 6644 return false; 6645 6646 SplatValue = APInt(sz, 0); 6647 SplatUndef = APInt(sz, 0); 6648 6649 // Get the bits. Bits with undefined values (when the corresponding element 6650 // of the vector is an ISD::UNDEF value) are set in SplatUndef and cleared 6651 // in SplatValue. If any of the values are not constant, give up and return 6652 // false. 6653 unsigned int nOps = getNumOperands(); 6654 assert(nOps > 0 && "isConstantSplat has 0-size build vector"); 6655 unsigned EltBitSize = VT.getVectorElementType().getSizeInBits(); 6656 6657 for (unsigned j = 0; j < nOps; ++j) { 6658 unsigned i = isBigEndian ? nOps-1-j : j; 6659 SDValue OpVal = getOperand(i); 6660 unsigned BitPos = j * EltBitSize; 6661 6662 if (OpVal.getOpcode() == ISD::UNDEF) 6663 SplatUndef |= APInt::getBitsSet(sz, BitPos, BitPos + EltBitSize); 6664 else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal)) 6665 SplatValue |= CN->getAPIntValue().zextOrTrunc(EltBitSize). 6666 zextOrTrunc(sz) << BitPos; 6667 else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal)) 6668 SplatValue |= CN->getValueAPF().bitcastToAPInt().zextOrTrunc(sz) <<BitPos; 6669 else 6670 return false; 6671 } 6672 6673 // The build_vector is all constants or undefs. Find the smallest element 6674 // size that splats the vector. 6675 6676 HasAnyUndefs = (SplatUndef != 0); 6677 while (sz > 8) { 6678 6679 unsigned HalfSize = sz / 2; 6680 APInt HighValue = SplatValue.lshr(HalfSize).trunc(HalfSize); 6681 APInt LowValue = SplatValue.trunc(HalfSize); 6682 APInt HighUndef = SplatUndef.lshr(HalfSize).trunc(HalfSize); 6683 APInt LowUndef = SplatUndef.trunc(HalfSize); 6684 6685 // If the two halves do not match (ignoring undef bits), stop here. 6686 if ((HighValue & ~LowUndef) != (LowValue & ~HighUndef) || 6687 MinSplatBits > HalfSize) 6688 break; 6689 6690 SplatValue = HighValue | LowValue; 6691 SplatUndef = HighUndef & LowUndef; 6692 6693 sz = HalfSize; 6694 } 6695 6696 SplatBitSize = sz; 6697 return true; 6698 } 6699 6700 SDValue BuildVectorSDNode::getSplatValue(BitVector *UndefElements) const { 6701 if (UndefElements) { 6702 UndefElements->clear(); 6703 UndefElements->resize(getNumOperands()); 6704 } 6705 SDValue Splatted; 6706 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 6707 SDValue Op = getOperand(i); 6708 if (Op.getOpcode() == ISD::UNDEF) { 6709 if (UndefElements) 6710 (*UndefElements)[i] = true; 6711 } else if (!Splatted) { 6712 Splatted = Op; 6713 } else if (Splatted != Op) { 6714 return SDValue(); 6715 } 6716 } 6717 6718 if (!Splatted) { 6719 assert(getOperand(0).getOpcode() == ISD::UNDEF && 6720 "Can only have a splat without a constant for all undefs."); 6721 return getOperand(0); 6722 } 6723 6724 return Splatted; 6725 } 6726 6727 ConstantSDNode * 6728 BuildVectorSDNode::getConstantSplatNode(BitVector *UndefElements) const { 6729 return dyn_cast_or_null<ConstantSDNode>( 6730 getSplatValue(UndefElements).getNode()); 6731 } 6732 6733 ConstantFPSDNode * 6734 BuildVectorSDNode::getConstantFPSplatNode(BitVector *UndefElements) const { 6735 return dyn_cast_or_null<ConstantFPSDNode>( 6736 getSplatValue(UndefElements).getNode()); 6737 } 6738 6739 bool BuildVectorSDNode::isConstant() const { 6740 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 6741 unsigned Opc = getOperand(i).getOpcode(); 6742 if (Opc != ISD::UNDEF && Opc != ISD::Constant && Opc != ISD::ConstantFP) 6743 return false; 6744 } 6745 return true; 6746 } 6747 6748 bool ShuffleVectorSDNode::isSplatMask(const int *Mask, EVT VT) { 6749 // Find the first non-undef value in the shuffle mask. 6750 unsigned i, e; 6751 for (i = 0, e = VT.getVectorNumElements(); i != e && Mask[i] < 0; ++i) 6752 /* search */; 6753 6754 assert(i != e && "VECTOR_SHUFFLE node with all undef indices!"); 6755 6756 // Make sure all remaining elements are either undef or the same as the first 6757 // non-undef value. 6758 for (int Idx = Mask[i]; i != e; ++i) 6759 if (Mask[i] >= 0 && Mask[i] != Idx) 6760 return false; 6761 return true; 6762 } 6763 6764 #ifndef NDEBUG 6765 static void checkForCyclesHelper(const SDNode *N, 6766 SmallPtrSetImpl<const SDNode*> &Visited, 6767 SmallPtrSetImpl<const SDNode*> &Checked, 6768 const llvm::SelectionDAG *DAG) { 6769 // If this node has already been checked, don't check it again. 6770 if (Checked.count(N)) 6771 return; 6772 6773 // If a node has already been visited on this depth-first walk, reject it as 6774 // a cycle. 6775 if (!Visited.insert(N)) { 6776 errs() << "Detected cycle in SelectionDAG\n"; 6777 dbgs() << "Offending node:\n"; 6778 N->dumprFull(DAG); dbgs() << "\n"; 6779 abort(); 6780 } 6781 6782 for(unsigned i = 0, e = N->getNumOperands(); i != e; ++i) 6783 checkForCyclesHelper(N->getOperand(i).getNode(), Visited, Checked, DAG); 6784 6785 Checked.insert(N); 6786 Visited.erase(N); 6787 } 6788 #endif 6789 6790 void llvm::checkForCycles(const llvm::SDNode *N, 6791 const llvm::SelectionDAG *DAG, 6792 bool force) { 6793 #ifndef NDEBUG 6794 bool check = force; 6795 #ifdef XDEBUG 6796 check = true; 6797 #endif // XDEBUG 6798 if (check) { 6799 assert(N && "Checking nonexistent SDNode"); 6800 SmallPtrSet<const SDNode*, 32> visited; 6801 SmallPtrSet<const SDNode*, 32> checked; 6802 checkForCyclesHelper(N, visited, checked, DAG); 6803 } 6804 #endif // !NDEBUG 6805 } 6806 6807 void llvm::checkForCycles(const llvm::SelectionDAG *DAG, bool force) { 6808 checkForCycles(DAG->getRoot().getNode(), DAG, force); 6809 } 6810