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