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 SDValue SelectionDAG::getBitcast(EVT VT, SDValue V) { 1814 if (VT == V.getValueType()) 1815 return V; 1816 1817 return getNode(ISD::BITCAST, SDLoc(V), VT, V); 1818 } 1819 1820 /// getAddrSpaceCast - Return an AddrSpaceCastSDNode. 1821 SDValue SelectionDAG::getAddrSpaceCast(SDLoc dl, EVT VT, SDValue Ptr, 1822 unsigned SrcAS, unsigned DestAS) { 1823 SDValue Ops[] = {Ptr}; 1824 FoldingSetNodeID ID; 1825 AddNodeIDNode(ID, ISD::ADDRSPACECAST, getVTList(VT), Ops); 1826 ID.AddInteger(SrcAS); 1827 ID.AddInteger(DestAS); 1828 1829 void *IP = nullptr; 1830 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) 1831 return SDValue(E, 0); 1832 1833 SDNode *N = new (NodeAllocator) AddrSpaceCastSDNode(dl.getIROrder(), 1834 dl.getDebugLoc(), 1835 VT, Ptr, SrcAS, DestAS); 1836 CSEMap.InsertNode(N, IP); 1837 InsertNode(N); 1838 return SDValue(N, 0); 1839 } 1840 1841 /// getShiftAmountOperand - Return the specified value casted to 1842 /// the target's desired shift amount type. 1843 SDValue SelectionDAG::getShiftAmountOperand(EVT LHSTy, SDValue Op) { 1844 EVT OpTy = Op.getValueType(); 1845 EVT ShTy = TLI->getShiftAmountTy(LHSTy); 1846 if (OpTy == ShTy || OpTy.isVector()) return Op; 1847 1848 ISD::NodeType Opcode = OpTy.bitsGT(ShTy) ? ISD::TRUNCATE : ISD::ZERO_EXTEND; 1849 return getNode(Opcode, SDLoc(Op), ShTy, Op); 1850 } 1851 1852 /// CreateStackTemporary - Create a stack temporary, suitable for holding the 1853 /// specified value type. 1854 SDValue SelectionDAG::CreateStackTemporary(EVT VT, unsigned minAlign) { 1855 MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo(); 1856 unsigned ByteSize = VT.getStoreSize(); 1857 Type *Ty = VT.getTypeForEVT(*getContext()); 1858 unsigned StackAlign = 1859 std::max((unsigned)TLI->getDataLayout()->getPrefTypeAlignment(Ty), minAlign); 1860 1861 int FrameIdx = FrameInfo->CreateStackObject(ByteSize, StackAlign, false); 1862 return getFrameIndex(FrameIdx, TLI->getPointerTy()); 1863 } 1864 1865 /// CreateStackTemporary - Create a stack temporary suitable for holding 1866 /// either of the specified value types. 1867 SDValue SelectionDAG::CreateStackTemporary(EVT VT1, EVT VT2) { 1868 unsigned Bytes = std::max(VT1.getStoreSizeInBits(), 1869 VT2.getStoreSizeInBits())/8; 1870 Type *Ty1 = VT1.getTypeForEVT(*getContext()); 1871 Type *Ty2 = VT2.getTypeForEVT(*getContext()); 1872 const DataLayout *TD = TLI->getDataLayout(); 1873 unsigned Align = std::max(TD->getPrefTypeAlignment(Ty1), 1874 TD->getPrefTypeAlignment(Ty2)); 1875 1876 MachineFrameInfo *FrameInfo = getMachineFunction().getFrameInfo(); 1877 int FrameIdx = FrameInfo->CreateStackObject(Bytes, Align, false); 1878 return getFrameIndex(FrameIdx, TLI->getPointerTy()); 1879 } 1880 1881 SDValue SelectionDAG::FoldSetCC(EVT VT, SDValue N1, 1882 SDValue N2, ISD::CondCode Cond, SDLoc dl) { 1883 // These setcc operations always fold. 1884 switch (Cond) { 1885 default: break; 1886 case ISD::SETFALSE: 1887 case ISD::SETFALSE2: return getConstant(0, dl, VT); 1888 case ISD::SETTRUE: 1889 case ISD::SETTRUE2: { 1890 TargetLowering::BooleanContent Cnt = 1891 TLI->getBooleanContents(N1->getValueType(0)); 1892 return getConstant( 1893 Cnt == TargetLowering::ZeroOrNegativeOneBooleanContent ? -1ULL : 1, dl, 1894 VT); 1895 } 1896 1897 case ISD::SETOEQ: 1898 case ISD::SETOGT: 1899 case ISD::SETOGE: 1900 case ISD::SETOLT: 1901 case ISD::SETOLE: 1902 case ISD::SETONE: 1903 case ISD::SETO: 1904 case ISD::SETUO: 1905 case ISD::SETUEQ: 1906 case ISD::SETUNE: 1907 assert(!N1.getValueType().isInteger() && "Illegal setcc for integer!"); 1908 break; 1909 } 1910 1911 if (ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.getNode())) { 1912 const APInt &C2 = N2C->getAPIntValue(); 1913 if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode())) { 1914 const APInt &C1 = N1C->getAPIntValue(); 1915 1916 switch (Cond) { 1917 default: llvm_unreachable("Unknown integer setcc!"); 1918 case ISD::SETEQ: return getConstant(C1 == C2, dl, VT); 1919 case ISD::SETNE: return getConstant(C1 != C2, dl, VT); 1920 case ISD::SETULT: return getConstant(C1.ult(C2), dl, VT); 1921 case ISD::SETUGT: return getConstant(C1.ugt(C2), dl, VT); 1922 case ISD::SETULE: return getConstant(C1.ule(C2), dl, VT); 1923 case ISD::SETUGE: return getConstant(C1.uge(C2), dl, VT); 1924 case ISD::SETLT: return getConstant(C1.slt(C2), dl, VT); 1925 case ISD::SETGT: return getConstant(C1.sgt(C2), dl, VT); 1926 case ISD::SETLE: return getConstant(C1.sle(C2), dl, VT); 1927 case ISD::SETGE: return getConstant(C1.sge(C2), dl, VT); 1928 } 1929 } 1930 } 1931 if (ConstantFPSDNode *N1C = dyn_cast<ConstantFPSDNode>(N1.getNode())) { 1932 if (ConstantFPSDNode *N2C = dyn_cast<ConstantFPSDNode>(N2.getNode())) { 1933 APFloat::cmpResult R = N1C->getValueAPF().compare(N2C->getValueAPF()); 1934 switch (Cond) { 1935 default: break; 1936 case ISD::SETEQ: if (R==APFloat::cmpUnordered) 1937 return getUNDEF(VT); 1938 // fall through 1939 case ISD::SETOEQ: return getConstant(R==APFloat::cmpEqual, dl, VT); 1940 case ISD::SETNE: if (R==APFloat::cmpUnordered) 1941 return getUNDEF(VT); 1942 // fall through 1943 case ISD::SETONE: return getConstant(R==APFloat::cmpGreaterThan || 1944 R==APFloat::cmpLessThan, dl, VT); 1945 case ISD::SETLT: if (R==APFloat::cmpUnordered) 1946 return getUNDEF(VT); 1947 // fall through 1948 case ISD::SETOLT: return getConstant(R==APFloat::cmpLessThan, dl, VT); 1949 case ISD::SETGT: if (R==APFloat::cmpUnordered) 1950 return getUNDEF(VT); 1951 // fall through 1952 case ISD::SETOGT: return getConstant(R==APFloat::cmpGreaterThan, dl, VT); 1953 case ISD::SETLE: if (R==APFloat::cmpUnordered) 1954 return getUNDEF(VT); 1955 // fall through 1956 case ISD::SETOLE: return getConstant(R==APFloat::cmpLessThan || 1957 R==APFloat::cmpEqual, dl, VT); 1958 case ISD::SETGE: if (R==APFloat::cmpUnordered) 1959 return getUNDEF(VT); 1960 // fall through 1961 case ISD::SETOGE: return getConstant(R==APFloat::cmpGreaterThan || 1962 R==APFloat::cmpEqual, dl, VT); 1963 case ISD::SETO: return getConstant(R!=APFloat::cmpUnordered, dl, VT); 1964 case ISD::SETUO: return getConstant(R==APFloat::cmpUnordered, dl, VT); 1965 case ISD::SETUEQ: return getConstant(R==APFloat::cmpUnordered || 1966 R==APFloat::cmpEqual, dl, VT); 1967 case ISD::SETUNE: return getConstant(R!=APFloat::cmpEqual, dl, VT); 1968 case ISD::SETULT: return getConstant(R==APFloat::cmpUnordered || 1969 R==APFloat::cmpLessThan, dl, VT); 1970 case ISD::SETUGT: return getConstant(R==APFloat::cmpGreaterThan || 1971 R==APFloat::cmpUnordered, dl, VT); 1972 case ISD::SETULE: return getConstant(R!=APFloat::cmpGreaterThan, dl, VT); 1973 case ISD::SETUGE: return getConstant(R!=APFloat::cmpLessThan, dl, VT); 1974 } 1975 } else { 1976 // Ensure that the constant occurs on the RHS. 1977 ISD::CondCode SwappedCond = ISD::getSetCCSwappedOperands(Cond); 1978 MVT CompVT = N1.getValueType().getSimpleVT(); 1979 if (!TLI->isCondCodeLegal(SwappedCond, CompVT)) 1980 return SDValue(); 1981 1982 return getSetCC(dl, VT, N2, N1, SwappedCond); 1983 } 1984 } 1985 1986 // Could not fold it. 1987 return SDValue(); 1988 } 1989 1990 /// SignBitIsZero - Return true if the sign bit of Op is known to be zero. We 1991 /// use this predicate to simplify operations downstream. 1992 bool SelectionDAG::SignBitIsZero(SDValue Op, unsigned Depth) const { 1993 // This predicate is not safe for vector operations. 1994 if (Op.getValueType().isVector()) 1995 return false; 1996 1997 unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits(); 1998 return MaskedValueIsZero(Op, APInt::getSignBit(BitWidth), Depth); 1999 } 2000 2001 /// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero. We use 2002 /// this predicate to simplify operations downstream. Mask is known to be zero 2003 /// for bits that V cannot have. 2004 bool SelectionDAG::MaskedValueIsZero(SDValue Op, const APInt &Mask, 2005 unsigned Depth) const { 2006 APInt KnownZero, KnownOne; 2007 computeKnownBits(Op, KnownZero, KnownOne, Depth); 2008 return (KnownZero & Mask) == Mask; 2009 } 2010 2011 /// Determine which bits of Op are known to be either zero or one and return 2012 /// them in the KnownZero/KnownOne bitsets. 2013 void SelectionDAG::computeKnownBits(SDValue Op, APInt &KnownZero, 2014 APInt &KnownOne, unsigned Depth) const { 2015 unsigned BitWidth = Op.getValueType().getScalarType().getSizeInBits(); 2016 2017 KnownZero = KnownOne = APInt(BitWidth, 0); // Don't know anything. 2018 if (Depth == 6) 2019 return; // Limit search depth. 2020 2021 APInt KnownZero2, KnownOne2; 2022 2023 switch (Op.getOpcode()) { 2024 case ISD::Constant: 2025 // We know all of the bits for a constant! 2026 KnownOne = cast<ConstantSDNode>(Op)->getAPIntValue(); 2027 KnownZero = ~KnownOne; 2028 break; 2029 case ISD::AND: 2030 // If either the LHS or the RHS are Zero, the result is zero. 2031 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 2032 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 2033 2034 // Output known-1 bits are only known if set in both the LHS & RHS. 2035 KnownOne &= KnownOne2; 2036 // Output known-0 are known to be clear if zero in either the LHS | RHS. 2037 KnownZero |= KnownZero2; 2038 break; 2039 case ISD::OR: 2040 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 2041 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 2042 2043 // Output known-0 bits are only known if clear in both the LHS & RHS. 2044 KnownZero &= KnownZero2; 2045 // Output known-1 are known to be set if set in either the LHS | RHS. 2046 KnownOne |= KnownOne2; 2047 break; 2048 case ISD::XOR: { 2049 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 2050 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 2051 2052 // Output known-0 bits are known if clear or set in both the LHS & RHS. 2053 APInt KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2); 2054 // Output known-1 are known to be set if set in only one of the LHS, RHS. 2055 KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2); 2056 KnownZero = KnownZeroOut; 2057 break; 2058 } 2059 case ISD::MUL: { 2060 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 2061 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 2062 2063 // If low bits are zero in either operand, output low known-0 bits. 2064 // Also compute a conserative estimate for high known-0 bits. 2065 // More trickiness is possible, but this is sufficient for the 2066 // interesting case of alignment computation. 2067 KnownOne.clearAllBits(); 2068 unsigned TrailZ = KnownZero.countTrailingOnes() + 2069 KnownZero2.countTrailingOnes(); 2070 unsigned LeadZ = std::max(KnownZero.countLeadingOnes() + 2071 KnownZero2.countLeadingOnes(), 2072 BitWidth) - BitWidth; 2073 2074 TrailZ = std::min(TrailZ, BitWidth); 2075 LeadZ = std::min(LeadZ, BitWidth); 2076 KnownZero = APInt::getLowBitsSet(BitWidth, TrailZ) | 2077 APInt::getHighBitsSet(BitWidth, LeadZ); 2078 break; 2079 } 2080 case ISD::UDIV: { 2081 // For the purposes of computing leading zeros we can conservatively 2082 // treat a udiv as a logical right shift by the power of 2 known to 2083 // be less than the denominator. 2084 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 2085 unsigned LeadZ = KnownZero2.countLeadingOnes(); 2086 2087 KnownOne2.clearAllBits(); 2088 KnownZero2.clearAllBits(); 2089 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2090 unsigned RHSUnknownLeadingOnes = KnownOne2.countLeadingZeros(); 2091 if (RHSUnknownLeadingOnes != BitWidth) 2092 LeadZ = std::min(BitWidth, 2093 LeadZ + BitWidth - RHSUnknownLeadingOnes - 1); 2094 2095 KnownZero = APInt::getHighBitsSet(BitWidth, LeadZ); 2096 break; 2097 } 2098 case ISD::SELECT: 2099 computeKnownBits(Op.getOperand(2), KnownZero, KnownOne, Depth+1); 2100 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2101 2102 // Only known if known in both the LHS and RHS. 2103 KnownOne &= KnownOne2; 2104 KnownZero &= KnownZero2; 2105 break; 2106 case ISD::SELECT_CC: 2107 computeKnownBits(Op.getOperand(3), KnownZero, KnownOne, Depth+1); 2108 computeKnownBits(Op.getOperand(2), KnownZero2, KnownOne2, Depth+1); 2109 2110 // Only known if known in both the LHS and RHS. 2111 KnownOne &= KnownOne2; 2112 KnownZero &= KnownZero2; 2113 break; 2114 case ISD::SADDO: 2115 case ISD::UADDO: 2116 case ISD::SSUBO: 2117 case ISD::USUBO: 2118 case ISD::SMULO: 2119 case ISD::UMULO: 2120 if (Op.getResNo() != 1) 2121 break; 2122 // The boolean result conforms to getBooleanContents. 2123 // If we know the result of a setcc has the top bits zero, use this info. 2124 // We know that we have an integer-based boolean since these operations 2125 // are only available for integer. 2126 if (TLI->getBooleanContents(Op.getValueType().isVector(), false) == 2127 TargetLowering::ZeroOrOneBooleanContent && 2128 BitWidth > 1) 2129 KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1); 2130 break; 2131 case ISD::SETCC: 2132 // If we know the result of a setcc has the top bits zero, use this info. 2133 if (TLI->getBooleanContents(Op.getOperand(0).getValueType()) == 2134 TargetLowering::ZeroOrOneBooleanContent && 2135 BitWidth > 1) 2136 KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1); 2137 break; 2138 case ISD::SHL: 2139 // (shl X, C1) & C2 == 0 iff (X & C2 >>u C1) == 0 2140 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2141 unsigned ShAmt = SA->getZExtValue(); 2142 2143 // If the shift count is an invalid immediate, don't do anything. 2144 if (ShAmt >= BitWidth) 2145 break; 2146 2147 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2148 KnownZero <<= ShAmt; 2149 KnownOne <<= ShAmt; 2150 // low bits known zero. 2151 KnownZero |= APInt::getLowBitsSet(BitWidth, ShAmt); 2152 } 2153 break; 2154 case ISD::SRL: 2155 // (ushr X, C1) & C2 == 0 iff (-1 >> C1) & C2 == 0 2156 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2157 unsigned ShAmt = SA->getZExtValue(); 2158 2159 // If the shift count is an invalid immediate, don't do anything. 2160 if (ShAmt >= BitWidth) 2161 break; 2162 2163 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2164 KnownZero = KnownZero.lshr(ShAmt); 2165 KnownOne = KnownOne.lshr(ShAmt); 2166 2167 APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt); 2168 KnownZero |= HighBits; // High bits known zero. 2169 } 2170 break; 2171 case ISD::SRA: 2172 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2173 unsigned ShAmt = SA->getZExtValue(); 2174 2175 // If the shift count is an invalid immediate, don't do anything. 2176 if (ShAmt >= BitWidth) 2177 break; 2178 2179 // If any of the demanded bits are produced by the sign extension, we also 2180 // demand the input sign bit. 2181 APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt); 2182 2183 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2184 KnownZero = KnownZero.lshr(ShAmt); 2185 KnownOne = KnownOne.lshr(ShAmt); 2186 2187 // Handle the sign bits. 2188 APInt SignBit = APInt::getSignBit(BitWidth); 2189 SignBit = SignBit.lshr(ShAmt); // Adjust to where it is now in the mask. 2190 2191 if (KnownZero.intersects(SignBit)) { 2192 KnownZero |= HighBits; // New bits are known zero. 2193 } else if (KnownOne.intersects(SignBit)) { 2194 KnownOne |= HighBits; // New bits are known one. 2195 } 2196 } 2197 break; 2198 case ISD::SIGN_EXTEND_INREG: { 2199 EVT EVT = cast<VTSDNode>(Op.getOperand(1))->getVT(); 2200 unsigned EBits = EVT.getScalarType().getSizeInBits(); 2201 2202 // Sign extension. Compute the demanded bits in the result that are not 2203 // present in the input. 2204 APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - EBits); 2205 2206 APInt InSignBit = APInt::getSignBit(EBits); 2207 APInt InputDemandedBits = APInt::getLowBitsSet(BitWidth, EBits); 2208 2209 // If the sign extended bits are demanded, we know that the sign 2210 // bit is demanded. 2211 InSignBit = InSignBit.zext(BitWidth); 2212 if (NewBits.getBoolValue()) 2213 InputDemandedBits |= InSignBit; 2214 2215 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2216 KnownOne &= InputDemandedBits; 2217 KnownZero &= InputDemandedBits; 2218 2219 // If the sign bit of the input is known set or clear, then we know the 2220 // top bits of the result. 2221 if (KnownZero.intersects(InSignBit)) { // Input sign bit known clear 2222 KnownZero |= NewBits; 2223 KnownOne &= ~NewBits; 2224 } else if (KnownOne.intersects(InSignBit)) { // Input sign bit known set 2225 KnownOne |= NewBits; 2226 KnownZero &= ~NewBits; 2227 } else { // Input sign bit unknown 2228 KnownZero &= ~NewBits; 2229 KnownOne &= ~NewBits; 2230 } 2231 break; 2232 } 2233 case ISD::CTTZ: 2234 case ISD::CTTZ_ZERO_UNDEF: 2235 case ISD::CTLZ: 2236 case ISD::CTLZ_ZERO_UNDEF: 2237 case ISD::CTPOP: { 2238 unsigned LowBits = Log2_32(BitWidth)+1; 2239 KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - LowBits); 2240 KnownOne.clearAllBits(); 2241 break; 2242 } 2243 case ISD::LOAD: { 2244 LoadSDNode *LD = cast<LoadSDNode>(Op); 2245 // If this is a ZEXTLoad and we are looking at the loaded value. 2246 if (ISD::isZEXTLoad(Op.getNode()) && Op.getResNo() == 0) { 2247 EVT VT = LD->getMemoryVT(); 2248 unsigned MemBits = VT.getScalarType().getSizeInBits(); 2249 KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - MemBits); 2250 } else if (const MDNode *Ranges = LD->getRanges()) { 2251 computeKnownBitsFromRangeMetadata(*Ranges, KnownZero); 2252 } 2253 break; 2254 } 2255 case ISD::ZERO_EXTEND: { 2256 EVT InVT = Op.getOperand(0).getValueType(); 2257 unsigned InBits = InVT.getScalarType().getSizeInBits(); 2258 APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - InBits); 2259 KnownZero = KnownZero.trunc(InBits); 2260 KnownOne = KnownOne.trunc(InBits); 2261 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2262 KnownZero = KnownZero.zext(BitWidth); 2263 KnownOne = KnownOne.zext(BitWidth); 2264 KnownZero |= NewBits; 2265 break; 2266 } 2267 case ISD::SIGN_EXTEND: { 2268 EVT InVT = Op.getOperand(0).getValueType(); 2269 unsigned InBits = InVT.getScalarType().getSizeInBits(); 2270 APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - InBits); 2271 2272 KnownZero = KnownZero.trunc(InBits); 2273 KnownOne = KnownOne.trunc(InBits); 2274 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2275 2276 // Note if the sign bit is known to be zero or one. 2277 bool SignBitKnownZero = KnownZero.isNegative(); 2278 bool SignBitKnownOne = KnownOne.isNegative(); 2279 2280 KnownZero = KnownZero.zext(BitWidth); 2281 KnownOne = KnownOne.zext(BitWidth); 2282 2283 // If the sign bit is known zero or one, the top bits match. 2284 if (SignBitKnownZero) 2285 KnownZero |= NewBits; 2286 else if (SignBitKnownOne) 2287 KnownOne |= NewBits; 2288 break; 2289 } 2290 case ISD::ANY_EXTEND: { 2291 EVT InVT = Op.getOperand(0).getValueType(); 2292 unsigned InBits = InVT.getScalarType().getSizeInBits(); 2293 KnownZero = KnownZero.trunc(InBits); 2294 KnownOne = KnownOne.trunc(InBits); 2295 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2296 KnownZero = KnownZero.zext(BitWidth); 2297 KnownOne = KnownOne.zext(BitWidth); 2298 break; 2299 } 2300 case ISD::TRUNCATE: { 2301 EVT InVT = Op.getOperand(0).getValueType(); 2302 unsigned InBits = InVT.getScalarType().getSizeInBits(); 2303 KnownZero = KnownZero.zext(InBits); 2304 KnownOne = KnownOne.zext(InBits); 2305 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2306 KnownZero = KnownZero.trunc(BitWidth); 2307 KnownOne = KnownOne.trunc(BitWidth); 2308 break; 2309 } 2310 case ISD::AssertZext: { 2311 EVT VT = cast<VTSDNode>(Op.getOperand(1))->getVT(); 2312 APInt InMask = APInt::getLowBitsSet(BitWidth, VT.getSizeInBits()); 2313 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2314 KnownZero |= (~InMask); 2315 KnownOne &= (~KnownZero); 2316 break; 2317 } 2318 case ISD::FGETSIGN: 2319 // All bits are zero except the low bit. 2320 KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - 1); 2321 break; 2322 2323 case ISD::SUB: { 2324 if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0))) { 2325 // We know that the top bits of C-X are clear if X contains less bits 2326 // than C (i.e. no wrap-around can happen). For example, 20-X is 2327 // positive if we can prove that X is >= 0 and < 16. 2328 if (CLHS->getAPIntValue().isNonNegative()) { 2329 unsigned NLZ = (CLHS->getAPIntValue()+1).countLeadingZeros(); 2330 // NLZ can't be BitWidth with no sign bit 2331 APInt MaskV = APInt::getHighBitsSet(BitWidth, NLZ+1); 2332 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2333 2334 // If all of the MaskV bits are known to be zero, then we know the 2335 // output top bits are zero, because we now know that the output is 2336 // from [0-C]. 2337 if ((KnownZero2 & MaskV) == MaskV) { 2338 unsigned NLZ2 = CLHS->getAPIntValue().countLeadingZeros(); 2339 // Top bits known zero. 2340 KnownZero = APInt::getHighBitsSet(BitWidth, NLZ2); 2341 } 2342 } 2343 } 2344 } 2345 // fall through 2346 case ISD::ADD: 2347 case ISD::ADDE: { 2348 // Output known-0 bits are known if clear or set in both the low clear bits 2349 // common to both LHS & RHS. For example, 8+(X<<3) is known to have the 2350 // low 3 bits clear. 2351 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1); 2352 unsigned KnownZeroOut = KnownZero2.countTrailingOnes(); 2353 2354 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2355 KnownZeroOut = std::min(KnownZeroOut, 2356 KnownZero2.countTrailingOnes()); 2357 2358 if (Op.getOpcode() == ISD::ADD) { 2359 KnownZero |= APInt::getLowBitsSet(BitWidth, KnownZeroOut); 2360 break; 2361 } 2362 2363 // With ADDE, a carry bit may be added in, so we can only use this 2364 // information if we know (at least) that the low two bits are clear. We 2365 // then return to the caller that the low bit is unknown but that other bits 2366 // are known zero. 2367 if (KnownZeroOut >= 2) // ADDE 2368 KnownZero |= APInt::getBitsSet(BitWidth, 1, KnownZeroOut); 2369 break; 2370 } 2371 case ISD::SREM: 2372 if (ConstantSDNode *Rem = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2373 const APInt &RA = Rem->getAPIntValue().abs(); 2374 if (RA.isPowerOf2()) { 2375 APInt LowBits = RA - 1; 2376 computeKnownBits(Op.getOperand(0), KnownZero2,KnownOne2,Depth+1); 2377 2378 // The low bits of the first operand are unchanged by the srem. 2379 KnownZero = KnownZero2 & LowBits; 2380 KnownOne = KnownOne2 & LowBits; 2381 2382 // If the first operand is non-negative or has all low bits zero, then 2383 // the upper bits are all zero. 2384 if (KnownZero2[BitWidth-1] || ((KnownZero2 & LowBits) == LowBits)) 2385 KnownZero |= ~LowBits; 2386 2387 // If the first operand is negative and not all low bits are zero, then 2388 // the upper bits are all one. 2389 if (KnownOne2[BitWidth-1] && ((KnownOne2 & LowBits) != 0)) 2390 KnownOne |= ~LowBits; 2391 assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?"); 2392 } 2393 } 2394 break; 2395 case ISD::UREM: { 2396 if (ConstantSDNode *Rem = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2397 const APInt &RA = Rem->getAPIntValue(); 2398 if (RA.isPowerOf2()) { 2399 APInt LowBits = (RA - 1); 2400 computeKnownBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth + 1); 2401 2402 // The upper bits are all zero, the lower ones are unchanged. 2403 KnownZero = KnownZero2 | ~LowBits; 2404 KnownOne = KnownOne2 & LowBits; 2405 break; 2406 } 2407 } 2408 2409 // Since the result is less than or equal to either operand, any leading 2410 // zero bits in either operand must also exist in the result. 2411 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2412 computeKnownBits(Op.getOperand(1), KnownZero2, KnownOne2, Depth+1); 2413 2414 uint32_t Leaders = std::max(KnownZero.countLeadingOnes(), 2415 KnownZero2.countLeadingOnes()); 2416 KnownOne.clearAllBits(); 2417 KnownZero = APInt::getHighBitsSet(BitWidth, Leaders); 2418 break; 2419 } 2420 case ISD::EXTRACT_ELEMENT: { 2421 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2422 const unsigned Index = 2423 cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue(); 2424 const unsigned BitWidth = Op.getValueType().getSizeInBits(); 2425 2426 // Remove low part of known bits mask 2427 KnownZero = KnownZero.getHiBits(KnownZero.getBitWidth() - Index * BitWidth); 2428 KnownOne = KnownOne.getHiBits(KnownOne.getBitWidth() - Index * BitWidth); 2429 2430 // Remove high part of known bit mask 2431 KnownZero = KnownZero.trunc(BitWidth); 2432 KnownOne = KnownOne.trunc(BitWidth); 2433 break; 2434 } 2435 case ISD::SMIN: 2436 case ISD::SMAX: 2437 case ISD::UMIN: 2438 case ISD::UMAX: { 2439 APInt Op0Zero, Op0One; 2440 APInt Op1Zero, Op1One; 2441 computeKnownBits(Op.getOperand(0), Op0Zero, Op0One, Depth); 2442 computeKnownBits(Op.getOperand(1), Op1Zero, Op1One, Depth); 2443 2444 KnownZero = Op0Zero & Op1Zero; 2445 KnownOne = Op0One & Op1One; 2446 break; 2447 } 2448 case ISD::FrameIndex: 2449 case ISD::TargetFrameIndex: 2450 if (unsigned Align = InferPtrAlignment(Op)) { 2451 // The low bits are known zero if the pointer is aligned. 2452 KnownZero = APInt::getLowBitsSet(BitWidth, Log2_32(Align)); 2453 break; 2454 } 2455 break; 2456 2457 default: 2458 if (Op.getOpcode() < ISD::BUILTIN_OP_END) 2459 break; 2460 // Fallthrough 2461 case ISD::INTRINSIC_WO_CHAIN: 2462 case ISD::INTRINSIC_W_CHAIN: 2463 case ISD::INTRINSIC_VOID: 2464 // Allow the target to implement this method for its nodes. 2465 TLI->computeKnownBitsForTargetNode(Op, KnownZero, KnownOne, *this, Depth); 2466 break; 2467 } 2468 2469 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 2470 } 2471 2472 /// ComputeNumSignBits - Return the number of times the sign bit of the 2473 /// register is replicated into the other bits. We know that at least 1 bit 2474 /// is always equal to the sign bit (itself), but other cases can give us 2475 /// information. For example, immediately after an "SRA X, 2", we know that 2476 /// the top 3 bits are all equal to each other, so we return 3. 2477 unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, unsigned Depth) const{ 2478 EVT VT = Op.getValueType(); 2479 assert(VT.isInteger() && "Invalid VT!"); 2480 unsigned VTBits = VT.getScalarType().getSizeInBits(); 2481 unsigned Tmp, Tmp2; 2482 unsigned FirstAnswer = 1; 2483 2484 if (Depth == 6) 2485 return 1; // Limit search depth. 2486 2487 switch (Op.getOpcode()) { 2488 default: break; 2489 case ISD::AssertSext: 2490 Tmp = cast<VTSDNode>(Op.getOperand(1))->getVT().getSizeInBits(); 2491 return VTBits-Tmp+1; 2492 case ISD::AssertZext: 2493 Tmp = cast<VTSDNode>(Op.getOperand(1))->getVT().getSizeInBits(); 2494 return VTBits-Tmp; 2495 2496 case ISD::Constant: { 2497 const APInt &Val = cast<ConstantSDNode>(Op)->getAPIntValue(); 2498 return Val.getNumSignBits(); 2499 } 2500 2501 case ISD::SIGN_EXTEND: 2502 Tmp = 2503 VTBits-Op.getOperand(0).getValueType().getScalarType().getSizeInBits(); 2504 return ComputeNumSignBits(Op.getOperand(0), Depth+1) + Tmp; 2505 2506 case ISD::SIGN_EXTEND_INREG: 2507 // Max of the input and what this extends. 2508 Tmp = 2509 cast<VTSDNode>(Op.getOperand(1))->getVT().getScalarType().getSizeInBits(); 2510 Tmp = VTBits-Tmp+1; 2511 2512 Tmp2 = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2513 return std::max(Tmp, Tmp2); 2514 2515 case ISD::SRA: 2516 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2517 // SRA X, C -> adds C sign bits. 2518 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2519 Tmp += C->getZExtValue(); 2520 if (Tmp > VTBits) Tmp = VTBits; 2521 } 2522 return Tmp; 2523 case ISD::SHL: 2524 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2525 // shl destroys sign bits. 2526 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2527 if (C->getZExtValue() >= VTBits || // Bad shift. 2528 C->getZExtValue() >= Tmp) break; // Shifted all sign bits out. 2529 return Tmp - C->getZExtValue(); 2530 } 2531 break; 2532 case ISD::AND: 2533 case ISD::OR: 2534 case ISD::XOR: // NOT is handled here. 2535 // Logical binary ops preserve the number of sign bits at the worst. 2536 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2537 if (Tmp != 1) { 2538 Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1); 2539 FirstAnswer = std::min(Tmp, Tmp2); 2540 // We computed what we know about the sign bits as our first 2541 // answer. Now proceed to the generic code that uses 2542 // computeKnownBits, and pick whichever answer is better. 2543 } 2544 break; 2545 2546 case ISD::SELECT: 2547 Tmp = ComputeNumSignBits(Op.getOperand(1), Depth+1); 2548 if (Tmp == 1) return 1; // Early out. 2549 Tmp2 = ComputeNumSignBits(Op.getOperand(2), Depth+1); 2550 return std::min(Tmp, Tmp2); 2551 case ISD::SMIN: 2552 case ISD::SMAX: 2553 case ISD::UMIN: 2554 case ISD::UMAX: 2555 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth + 1); 2556 if (Tmp == 1) 2557 return 1; // Early out. 2558 Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth + 1); 2559 return std::min(Tmp, Tmp2); 2560 case ISD::SADDO: 2561 case ISD::UADDO: 2562 case ISD::SSUBO: 2563 case ISD::USUBO: 2564 case ISD::SMULO: 2565 case ISD::UMULO: 2566 if (Op.getResNo() != 1) 2567 break; 2568 // The boolean result conforms to getBooleanContents. Fall through. 2569 // If setcc returns 0/-1, all bits are sign bits. 2570 // We know that we have an integer-based boolean since these operations 2571 // are only available for integer. 2572 if (TLI->getBooleanContents(Op.getValueType().isVector(), false) == 2573 TargetLowering::ZeroOrNegativeOneBooleanContent) 2574 return VTBits; 2575 break; 2576 case ISD::SETCC: 2577 // If setcc returns 0/-1, all bits are sign bits. 2578 if (TLI->getBooleanContents(Op.getOperand(0).getValueType()) == 2579 TargetLowering::ZeroOrNegativeOneBooleanContent) 2580 return VTBits; 2581 break; 2582 case ISD::ROTL: 2583 case ISD::ROTR: 2584 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 2585 unsigned RotAmt = C->getZExtValue() & (VTBits-1); 2586 2587 // Handle rotate right by N like a rotate left by 32-N. 2588 if (Op.getOpcode() == ISD::ROTR) 2589 RotAmt = (VTBits-RotAmt) & (VTBits-1); 2590 2591 // If we aren't rotating out all of the known-in sign bits, return the 2592 // number that are left. This handles rotl(sext(x), 1) for example. 2593 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2594 if (Tmp > RotAmt+1) return Tmp-RotAmt; 2595 } 2596 break; 2597 case ISD::ADD: 2598 // Add can have at most one carry bit. Thus we know that the output 2599 // is, at worst, one more bit than the inputs. 2600 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2601 if (Tmp == 1) return 1; // Early out. 2602 2603 // Special case decrementing a value (ADD X, -1): 2604 if (ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Op.getOperand(1))) 2605 if (CRHS->isAllOnesValue()) { 2606 APInt KnownZero, KnownOne; 2607 computeKnownBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); 2608 2609 // If the input is known to be 0 or 1, the output is 0/-1, which is all 2610 // sign bits set. 2611 if ((KnownZero | APInt(VTBits, 1)).isAllOnesValue()) 2612 return VTBits; 2613 2614 // If we are subtracting one from a positive number, there is no carry 2615 // out of the result. 2616 if (KnownZero.isNegative()) 2617 return Tmp; 2618 } 2619 2620 Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1); 2621 if (Tmp2 == 1) return 1; 2622 return std::min(Tmp, Tmp2)-1; 2623 2624 case ISD::SUB: 2625 Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1); 2626 if (Tmp2 == 1) return 1; 2627 2628 // Handle NEG. 2629 if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0))) 2630 if (CLHS->isNullValue()) { 2631 APInt KnownZero, KnownOne; 2632 computeKnownBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1); 2633 // If the input is known to be 0 or 1, the output is 0/-1, which is all 2634 // sign bits set. 2635 if ((KnownZero | APInt(VTBits, 1)).isAllOnesValue()) 2636 return VTBits; 2637 2638 // If the input is known to be positive (the sign bit is known clear), 2639 // the output of the NEG has the same number of sign bits as the input. 2640 if (KnownZero.isNegative()) 2641 return Tmp2; 2642 2643 // Otherwise, we treat this like a SUB. 2644 } 2645 2646 // Sub can have at most one carry bit. Thus we know that the output 2647 // is, at worst, one more bit than the inputs. 2648 Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2649 if (Tmp == 1) return 1; // Early out. 2650 return std::min(Tmp, Tmp2)-1; 2651 case ISD::TRUNCATE: 2652 // FIXME: it's tricky to do anything useful for this, but it is an important 2653 // case for targets like X86. 2654 break; 2655 case ISD::EXTRACT_ELEMENT: { 2656 const int KnownSign = ComputeNumSignBits(Op.getOperand(0), Depth+1); 2657 const int BitWidth = Op.getValueType().getSizeInBits(); 2658 const int Items = 2659 Op.getOperand(0).getValueType().getSizeInBits() / BitWidth; 2660 2661 // Get reverse index (starting from 1), Op1 value indexes elements from 2662 // little end. Sign starts at big end. 2663 const int rIndex = Items - 1 - 2664 cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue(); 2665 2666 // If the sign portion ends in our element the substraction gives correct 2667 // result. Otherwise it gives either negative or > bitwidth result 2668 return std::max(std::min(KnownSign - rIndex * BitWidth, BitWidth), 0); 2669 } 2670 } 2671 2672 // If we are looking at the loaded value of the SDNode. 2673 if (Op.getResNo() == 0) { 2674 // Handle LOADX separately here. EXTLOAD case will fallthrough. 2675 if (LoadSDNode *LD = dyn_cast<LoadSDNode>(Op)) { 2676 unsigned ExtType = LD->getExtensionType(); 2677 switch (ExtType) { 2678 default: break; 2679 case ISD::SEXTLOAD: // '17' bits known 2680 Tmp = LD->getMemoryVT().getScalarType().getSizeInBits(); 2681 return VTBits-Tmp+1; 2682 case ISD::ZEXTLOAD: // '16' bits known 2683 Tmp = LD->getMemoryVT().getScalarType().getSizeInBits(); 2684 return VTBits-Tmp; 2685 } 2686 } 2687 } 2688 2689 // Allow the target to implement this method for its nodes. 2690 if (Op.getOpcode() >= ISD::BUILTIN_OP_END || 2691 Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN || 2692 Op.getOpcode() == ISD::INTRINSIC_W_CHAIN || 2693 Op.getOpcode() == ISD::INTRINSIC_VOID) { 2694 unsigned NumBits = TLI->ComputeNumSignBitsForTargetNode(Op, *this, Depth); 2695 if (NumBits > 1) FirstAnswer = std::max(FirstAnswer, NumBits); 2696 } 2697 2698 // Finally, if we can prove that the top bits of the result are 0's or 1's, 2699 // use this information. 2700 APInt KnownZero, KnownOne; 2701 computeKnownBits(Op, KnownZero, KnownOne, Depth); 2702 2703 APInt Mask; 2704 if (KnownZero.isNegative()) { // sign bit is 0 2705 Mask = KnownZero; 2706 } else if (KnownOne.isNegative()) { // sign bit is 1; 2707 Mask = KnownOne; 2708 } else { 2709 // Nothing known. 2710 return FirstAnswer; 2711 } 2712 2713 // Okay, we know that the sign bit in Mask is set. Use CLZ to determine 2714 // the number of identical bits in the top of the input value. 2715 Mask = ~Mask; 2716 Mask <<= Mask.getBitWidth()-VTBits; 2717 // Return # leading zeros. We use 'min' here in case Val was zero before 2718 // shifting. We don't want to return '64' as for an i32 "0". 2719 return std::max(FirstAnswer, std::min(VTBits, Mask.countLeadingZeros())); 2720 } 2721 2722 /// isBaseWithConstantOffset - Return true if the specified operand is an 2723 /// ISD::ADD with a ConstantSDNode on the right-hand side, or if it is an 2724 /// ISD::OR with a ConstantSDNode that is guaranteed to have the same 2725 /// semantics as an ADD. This handles the equivalence: 2726 /// X|Cst == X+Cst iff X&Cst = 0. 2727 bool SelectionDAG::isBaseWithConstantOffset(SDValue Op) const { 2728 if ((Op.getOpcode() != ISD::ADD && Op.getOpcode() != ISD::OR) || 2729 !isa<ConstantSDNode>(Op.getOperand(1))) 2730 return false; 2731 2732 if (Op.getOpcode() == ISD::OR && 2733 !MaskedValueIsZero(Op.getOperand(0), 2734 cast<ConstantSDNode>(Op.getOperand(1))->getAPIntValue())) 2735 return false; 2736 2737 return true; 2738 } 2739 2740 2741 bool SelectionDAG::isKnownNeverNaN(SDValue Op) const { 2742 // If we're told that NaNs won't happen, assume they won't. 2743 if (getTarget().Options.NoNaNsFPMath) 2744 return true; 2745 2746 // If the value is a constant, we can obviously see if it is a NaN or not. 2747 if (const ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Op)) 2748 return !C->getValueAPF().isNaN(); 2749 2750 // TODO: Recognize more cases here. 2751 2752 return false; 2753 } 2754 2755 bool SelectionDAG::isKnownNeverZero(SDValue Op) const { 2756 // If the value is a constant, we can obviously see if it is a zero or not. 2757 if (const ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Op)) 2758 return !C->isZero(); 2759 2760 // TODO: Recognize more cases here. 2761 switch (Op.getOpcode()) { 2762 default: break; 2763 case ISD::OR: 2764 if (const ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) 2765 return !C->isNullValue(); 2766 break; 2767 } 2768 2769 return false; 2770 } 2771 2772 bool SelectionDAG::isEqualTo(SDValue A, SDValue B) const { 2773 // Check the obvious case. 2774 if (A == B) return true; 2775 2776 // For for negative and positive zero. 2777 if (const ConstantFPSDNode *CA = dyn_cast<ConstantFPSDNode>(A)) 2778 if (const ConstantFPSDNode *CB = dyn_cast<ConstantFPSDNode>(B)) 2779 if (CA->isZero() && CB->isZero()) return true; 2780 2781 // Otherwise they may not be equal. 2782 return false; 2783 } 2784 2785 /// getNode - Gets or creates the specified node. 2786 /// 2787 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT) { 2788 FoldingSetNodeID ID; 2789 AddNodeIDNode(ID, Opcode, getVTList(VT), None); 2790 void *IP = nullptr; 2791 if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)) 2792 return SDValue(E, 0); 2793 2794 SDNode *N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), 2795 DL.getDebugLoc(), getVTList(VT)); 2796 CSEMap.InsertNode(N, IP); 2797 2798 InsertNode(N); 2799 return SDValue(N, 0); 2800 } 2801 2802 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, 2803 EVT VT, SDValue Operand) { 2804 // Constant fold unary operations with an integer constant operand. Even 2805 // opaque constant will be folded, because the folding of unary operations 2806 // doesn't create new constants with different values. Nevertheless, the 2807 // opaque flag is preserved during folding to prevent future folding with 2808 // other constants. 2809 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Operand.getNode())) { 2810 const APInt &Val = C->getAPIntValue(); 2811 switch (Opcode) { 2812 default: break; 2813 case ISD::SIGN_EXTEND: 2814 return getConstant(Val.sextOrTrunc(VT.getSizeInBits()), DL, VT, 2815 C->isTargetOpcode(), C->isOpaque()); 2816 case ISD::ANY_EXTEND: 2817 case ISD::ZERO_EXTEND: 2818 case ISD::TRUNCATE: 2819 return getConstant(Val.zextOrTrunc(VT.getSizeInBits()), DL, VT, 2820 C->isTargetOpcode(), C->isOpaque()); 2821 case ISD::UINT_TO_FP: 2822 case ISD::SINT_TO_FP: { 2823 APFloat apf(EVTToAPFloatSemantics(VT), 2824 APInt::getNullValue(VT.getSizeInBits())); 2825 (void)apf.convertFromAPInt(Val, 2826 Opcode==ISD::SINT_TO_FP, 2827 APFloat::rmNearestTiesToEven); 2828 return getConstantFP(apf, DL, VT); 2829 } 2830 case ISD::BITCAST: 2831 if (VT == MVT::f16 && C->getValueType(0) == MVT::i16) 2832 return getConstantFP(APFloat(APFloat::IEEEhalf, Val), DL, VT); 2833 if (VT == MVT::f32 && C->getValueType(0) == MVT::i32) 2834 return getConstantFP(APFloat(APFloat::IEEEsingle, Val), DL, VT); 2835 else if (VT == MVT::f64 && C->getValueType(0) == MVT::i64) 2836 return getConstantFP(APFloat(APFloat::IEEEdouble, Val), DL, VT); 2837 break; 2838 case ISD::BSWAP: 2839 return getConstant(Val.byteSwap(), DL, VT, C->isTargetOpcode(), 2840 C->isOpaque()); 2841 case ISD::CTPOP: 2842 return getConstant(Val.countPopulation(), DL, VT, C->isTargetOpcode(), 2843 C->isOpaque()); 2844 case ISD::CTLZ: 2845 case ISD::CTLZ_ZERO_UNDEF: 2846 return getConstant(Val.countLeadingZeros(), DL, VT, C->isTargetOpcode(), 2847 C->isOpaque()); 2848 case ISD::CTTZ: 2849 case ISD::CTTZ_ZERO_UNDEF: 2850 return getConstant(Val.countTrailingZeros(), DL, VT, C->isTargetOpcode(), 2851 C->isOpaque()); 2852 } 2853 } 2854 2855 // Constant fold unary operations with a floating point constant operand. 2856 if (ConstantFPSDNode *C = dyn_cast<ConstantFPSDNode>(Operand.getNode())) { 2857 APFloat V = C->getValueAPF(); // make copy 2858 switch (Opcode) { 2859 case ISD::FNEG: 2860 V.changeSign(); 2861 return getConstantFP(V, DL, VT); 2862 case ISD::FABS: 2863 V.clearSign(); 2864 return getConstantFP(V, DL, VT); 2865 case ISD::FCEIL: { 2866 APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardPositive); 2867 if (fs == APFloat::opOK || fs == APFloat::opInexact) 2868 return getConstantFP(V, DL, VT); 2869 break; 2870 } 2871 case ISD::FTRUNC: { 2872 APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardZero); 2873 if (fs == APFloat::opOK || fs == APFloat::opInexact) 2874 return getConstantFP(V, DL, VT); 2875 break; 2876 } 2877 case ISD::FFLOOR: { 2878 APFloat::opStatus fs = V.roundToIntegral(APFloat::rmTowardNegative); 2879 if (fs == APFloat::opOK || fs == APFloat::opInexact) 2880 return getConstantFP(V, DL, VT); 2881 break; 2882 } 2883 case ISD::FP_EXTEND: { 2884 bool ignored; 2885 // This can return overflow, underflow, or inexact; we don't care. 2886 // FIXME need to be more flexible about rounding mode. 2887 (void)V.convert(EVTToAPFloatSemantics(VT), 2888 APFloat::rmNearestTiesToEven, &ignored); 2889 return getConstantFP(V, DL, VT); 2890 } 2891 case ISD::FP_TO_SINT: 2892 case ISD::FP_TO_UINT: { 2893 integerPart x[2]; 2894 bool ignored; 2895 static_assert(integerPartWidth >= 64, "APFloat parts too small!"); 2896 // FIXME need to be more flexible about rounding mode. 2897 APFloat::opStatus s = V.convertToInteger(x, VT.getSizeInBits(), 2898 Opcode==ISD::FP_TO_SINT, 2899 APFloat::rmTowardZero, &ignored); 2900 if (s==APFloat::opInvalidOp) // inexact is OK, in fact usual 2901 break; 2902 APInt api(VT.getSizeInBits(), x); 2903 return getConstant(api, DL, VT); 2904 } 2905 case ISD::BITCAST: 2906 if (VT == MVT::i16 && C->getValueType(0) == MVT::f16) 2907 return getConstant((uint16_t)V.bitcastToAPInt().getZExtValue(), DL, VT); 2908 else if (VT == MVT::i32 && C->getValueType(0) == MVT::f32) 2909 return getConstant((uint32_t)V.bitcastToAPInt().getZExtValue(), DL, VT); 2910 else if (VT == MVT::i64 && C->getValueType(0) == MVT::f64) 2911 return getConstant(V.bitcastToAPInt().getZExtValue(), DL, VT); 2912 break; 2913 } 2914 } 2915 2916 // Constant fold unary operations with a vector integer or float operand. 2917 if (BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(Operand.getNode())) { 2918 if (BV->isConstant()) { 2919 switch (Opcode) { 2920 default: 2921 // FIXME: Entirely reasonable to perform folding of other unary 2922 // operations here as the need arises. 2923 break; 2924 case ISD::FNEG: 2925 case ISD::FABS: 2926 case ISD::FCEIL: 2927 case ISD::FTRUNC: 2928 case ISD::FFLOOR: 2929 case ISD::FP_EXTEND: 2930 case ISD::FP_TO_SINT: 2931 case ISD::FP_TO_UINT: 2932 case ISD::TRUNCATE: 2933 case ISD::UINT_TO_FP: 2934 case ISD::SINT_TO_FP: 2935 case ISD::CTLZ: 2936 case ISD::CTLZ_ZERO_UNDEF: 2937 case ISD::CTTZ: 2938 case ISD::CTTZ_ZERO_UNDEF: 2939 case ISD::CTPOP: { 2940 EVT SVT = VT.getScalarType(); 2941 EVT InVT = BV->getValueType(0); 2942 EVT InSVT = InVT.getScalarType(); 2943 2944 // Find legal integer scalar type for constant promotion and 2945 // ensure that its scalar size is at least as large as source. 2946 EVT LegalSVT = SVT; 2947 if (SVT.isInteger()) { 2948 LegalSVT = TLI->getTypeToTransformTo(*getContext(), SVT); 2949 if (LegalSVT.bitsLT(SVT)) break; 2950 } 2951 2952 // Let the above scalar folding handle the folding of each element. 2953 SmallVector<SDValue, 8> Ops; 2954 for (int i = 0, e = VT.getVectorNumElements(); i != e; ++i) { 2955 SDValue OpN = BV->getOperand(i); 2956 EVT OpVT = OpN.getValueType(); 2957 2958 // Build vector (integer) scalar operands may need implicit 2959 // truncation - do this before constant folding. 2960 if (OpVT.isInteger() && OpVT.bitsGT(InSVT)) 2961 OpN = getNode(ISD::TRUNCATE, DL, InSVT, OpN); 2962 2963 OpN = getNode(Opcode, DL, SVT, OpN); 2964 2965 // Legalize the (integer) scalar constant if necessary. 2966 if (LegalSVT != SVT) 2967 OpN = getNode(ISD::ANY_EXTEND, DL, LegalSVT, OpN); 2968 2969 if (OpN.getOpcode() != ISD::UNDEF && 2970 OpN.getOpcode() != ISD::Constant && 2971 OpN.getOpcode() != ISD::ConstantFP) 2972 break; 2973 Ops.push_back(OpN); 2974 } 2975 if (Ops.size() == VT.getVectorNumElements()) 2976 return getNode(ISD::BUILD_VECTOR, DL, VT, Ops); 2977 break; 2978 } 2979 } 2980 } 2981 } 2982 2983 unsigned OpOpcode = Operand.getNode()->getOpcode(); 2984 switch (Opcode) { 2985 case ISD::TokenFactor: 2986 case ISD::MERGE_VALUES: 2987 case ISD::CONCAT_VECTORS: 2988 return Operand; // Factor, merge or concat of one node? No need. 2989 case ISD::FP_ROUND: llvm_unreachable("Invalid method to make FP_ROUND node"); 2990 case ISD::FP_EXTEND: 2991 assert(VT.isFloatingPoint() && 2992 Operand.getValueType().isFloatingPoint() && "Invalid FP cast!"); 2993 if (Operand.getValueType() == VT) return Operand; // noop conversion. 2994 assert((!VT.isVector() || 2995 VT.getVectorNumElements() == 2996 Operand.getValueType().getVectorNumElements()) && 2997 "Vector element count mismatch!"); 2998 if (Operand.getOpcode() == ISD::UNDEF) 2999 return getUNDEF(VT); 3000 break; 3001 case ISD::SIGN_EXTEND: 3002 assert(VT.isInteger() && Operand.getValueType().isInteger() && 3003 "Invalid SIGN_EXTEND!"); 3004 if (Operand.getValueType() == VT) return Operand; // noop extension 3005 assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) && 3006 "Invalid sext node, dst < src!"); 3007 assert((!VT.isVector() || 3008 VT.getVectorNumElements() == 3009 Operand.getValueType().getVectorNumElements()) && 3010 "Vector element count mismatch!"); 3011 if (OpOpcode == ISD::SIGN_EXTEND || OpOpcode == ISD::ZERO_EXTEND) 3012 return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0)); 3013 else if (OpOpcode == ISD::UNDEF) 3014 // sext(undef) = 0, because the top bits will all be the same. 3015 return getConstant(0, DL, VT); 3016 break; 3017 case ISD::ZERO_EXTEND: 3018 assert(VT.isInteger() && Operand.getValueType().isInteger() && 3019 "Invalid ZERO_EXTEND!"); 3020 if (Operand.getValueType() == VT) return Operand; // noop extension 3021 assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) && 3022 "Invalid zext node, dst < src!"); 3023 assert((!VT.isVector() || 3024 VT.getVectorNumElements() == 3025 Operand.getValueType().getVectorNumElements()) && 3026 "Vector element count mismatch!"); 3027 if (OpOpcode == ISD::ZERO_EXTEND) // (zext (zext x)) -> (zext x) 3028 return getNode(ISD::ZERO_EXTEND, DL, VT, 3029 Operand.getNode()->getOperand(0)); 3030 else if (OpOpcode == ISD::UNDEF) 3031 // zext(undef) = 0, because the top bits will be zero. 3032 return getConstant(0, DL, VT); 3033 break; 3034 case ISD::ANY_EXTEND: 3035 assert(VT.isInteger() && Operand.getValueType().isInteger() && 3036 "Invalid ANY_EXTEND!"); 3037 if (Operand.getValueType() == VT) return Operand; // noop extension 3038 assert(Operand.getValueType().getScalarType().bitsLT(VT.getScalarType()) && 3039 "Invalid anyext node, dst < src!"); 3040 assert((!VT.isVector() || 3041 VT.getVectorNumElements() == 3042 Operand.getValueType().getVectorNumElements()) && 3043 "Vector element count mismatch!"); 3044 3045 if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND || 3046 OpOpcode == ISD::ANY_EXTEND) 3047 // (ext (zext x)) -> (zext x) and (ext (sext x)) -> (sext x) 3048 return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0)); 3049 else if (OpOpcode == ISD::UNDEF) 3050 return getUNDEF(VT); 3051 3052 // (ext (trunx x)) -> x 3053 if (OpOpcode == ISD::TRUNCATE) { 3054 SDValue OpOp = Operand.getNode()->getOperand(0); 3055 if (OpOp.getValueType() == VT) 3056 return OpOp; 3057 } 3058 break; 3059 case ISD::TRUNCATE: 3060 assert(VT.isInteger() && Operand.getValueType().isInteger() && 3061 "Invalid TRUNCATE!"); 3062 if (Operand.getValueType() == VT) return Operand; // noop truncate 3063 assert(Operand.getValueType().getScalarType().bitsGT(VT.getScalarType()) && 3064 "Invalid truncate node, src < dst!"); 3065 assert((!VT.isVector() || 3066 VT.getVectorNumElements() == 3067 Operand.getValueType().getVectorNumElements()) && 3068 "Vector element count mismatch!"); 3069 if (OpOpcode == ISD::TRUNCATE) 3070 return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0)); 3071 if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND || 3072 OpOpcode == ISD::ANY_EXTEND) { 3073 // If the source is smaller than the dest, we still need an extend. 3074 if (Operand.getNode()->getOperand(0).getValueType().getScalarType() 3075 .bitsLT(VT.getScalarType())) 3076 return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0)); 3077 if (Operand.getNode()->getOperand(0).getValueType().bitsGT(VT)) 3078 return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0)); 3079 return Operand.getNode()->getOperand(0); 3080 } 3081 if (OpOpcode == ISD::UNDEF) 3082 return getUNDEF(VT); 3083 break; 3084 case ISD::BITCAST: 3085 // Basic sanity checking. 3086 assert(VT.getSizeInBits() == Operand.getValueType().getSizeInBits() 3087 && "Cannot BITCAST between types of different sizes!"); 3088 if (VT == Operand.getValueType()) return Operand; // noop conversion. 3089 if (OpOpcode == ISD::BITCAST) // bitconv(bitconv(x)) -> bitconv(x) 3090 return getNode(ISD::BITCAST, DL, VT, Operand.getOperand(0)); 3091 if (OpOpcode == ISD::UNDEF) 3092 return getUNDEF(VT); 3093 break; 3094 case ISD::SCALAR_TO_VECTOR: 3095 assert(VT.isVector() && !Operand.getValueType().isVector() && 3096 (VT.getVectorElementType() == Operand.getValueType() || 3097 (VT.getVectorElementType().isInteger() && 3098 Operand.getValueType().isInteger() && 3099 VT.getVectorElementType().bitsLE(Operand.getValueType()))) && 3100 "Illegal SCALAR_TO_VECTOR node!"); 3101 if (OpOpcode == ISD::UNDEF) 3102 return getUNDEF(VT); 3103 // scalar_to_vector(extract_vector_elt V, 0) -> V, top bits are undefined. 3104 if (OpOpcode == ISD::EXTRACT_VECTOR_ELT && 3105 isa<ConstantSDNode>(Operand.getOperand(1)) && 3106 Operand.getConstantOperandVal(1) == 0 && 3107 Operand.getOperand(0).getValueType() == VT) 3108 return Operand.getOperand(0); 3109 break; 3110 case ISD::FNEG: 3111 // -(X-Y) -> (Y-X) is unsafe because when X==Y, -0.0 != +0.0 3112 if (getTarget().Options.UnsafeFPMath && OpOpcode == ISD::FSUB) 3113 return getNode(ISD::FSUB, DL, VT, Operand.getNode()->getOperand(1), 3114 Operand.getNode()->getOperand(0)); 3115 if (OpOpcode == ISD::FNEG) // --X -> X 3116 return Operand.getNode()->getOperand(0); 3117 break; 3118 case ISD::FABS: 3119 if (OpOpcode == ISD::FNEG) // abs(-X) -> abs(X) 3120 return getNode(ISD::FABS, DL, VT, Operand.getNode()->getOperand(0)); 3121 break; 3122 } 3123 3124 SDNode *N; 3125 SDVTList VTs = getVTList(VT); 3126 if (VT != MVT::Glue) { // Don't CSE flag producing nodes 3127 FoldingSetNodeID ID; 3128 SDValue Ops[1] = { Operand }; 3129 AddNodeIDNode(ID, Opcode, VTs, Ops); 3130 void *IP = nullptr; 3131 if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)) 3132 return SDValue(E, 0); 3133 3134 N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(), 3135 DL.getDebugLoc(), VTs, Operand); 3136 CSEMap.InsertNode(N, IP); 3137 } else { 3138 N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(), 3139 DL.getDebugLoc(), VTs, Operand); 3140 } 3141 3142 InsertNode(N); 3143 return SDValue(N, 0); 3144 } 3145 3146 static std::pair<APInt, bool> FoldValue(unsigned Opcode, const APInt &C1, 3147 const APInt &C2) { 3148 switch (Opcode) { 3149 case ISD::ADD: return std::make_pair(C1 + C2, true); 3150 case ISD::SUB: return std::make_pair(C1 - C2, true); 3151 case ISD::MUL: return std::make_pair(C1 * C2, true); 3152 case ISD::AND: return std::make_pair(C1 & C2, true); 3153 case ISD::OR: return std::make_pair(C1 | C2, true); 3154 case ISD::XOR: return std::make_pair(C1 ^ C2, true); 3155 case ISD::SHL: return std::make_pair(C1 << C2, true); 3156 case ISD::SRL: return std::make_pair(C1.lshr(C2), true); 3157 case ISD::SRA: return std::make_pair(C1.ashr(C2), true); 3158 case ISD::ROTL: return std::make_pair(C1.rotl(C2), true); 3159 case ISD::ROTR: return std::make_pair(C1.rotr(C2), true); 3160 case ISD::UDIV: 3161 if (!C2.getBoolValue()) 3162 break; 3163 return std::make_pair(C1.udiv(C2), true); 3164 case ISD::UREM: 3165 if (!C2.getBoolValue()) 3166 break; 3167 return std::make_pair(C1.urem(C2), true); 3168 case ISD::SDIV: 3169 if (!C2.getBoolValue()) 3170 break; 3171 return std::make_pair(C1.sdiv(C2), true); 3172 case ISD::SREM: 3173 if (!C2.getBoolValue()) 3174 break; 3175 return std::make_pair(C1.srem(C2), true); 3176 } 3177 return std::make_pair(APInt(1, 0), false); 3178 } 3179 3180 SDValue SelectionDAG::FoldConstantArithmetic(unsigned Opcode, SDLoc DL, EVT VT, 3181 const ConstantSDNode *Cst1, 3182 const ConstantSDNode *Cst2) { 3183 if (Cst1->isOpaque() || Cst2->isOpaque()) 3184 return SDValue(); 3185 3186 std::pair<APInt, bool> Folded = FoldValue(Opcode, Cst1->getAPIntValue(), 3187 Cst2->getAPIntValue()); 3188 if (!Folded.second) 3189 return SDValue(); 3190 return getConstant(Folded.first, DL, VT); 3191 } 3192 3193 SDValue SelectionDAG::FoldConstantArithmetic(unsigned Opcode, SDLoc DL, EVT VT, 3194 SDNode *Cst1, SDNode *Cst2) { 3195 // If the opcode is a target-specific ISD node, there's nothing we can 3196 // do here and the operand rules may not line up with the below, so 3197 // bail early. 3198 if (Opcode >= ISD::BUILTIN_OP_END) 3199 return SDValue(); 3200 3201 // Handle the case of two scalars. 3202 if (const ConstantSDNode *Scalar1 = dyn_cast<ConstantSDNode>(Cst1)) { 3203 if (const ConstantSDNode *Scalar2 = dyn_cast<ConstantSDNode>(Cst2)) { 3204 if (SDValue Folded = 3205 FoldConstantArithmetic(Opcode, DL, VT, Scalar1, Scalar2)) { 3206 if (!VT.isVector()) 3207 return Folded; 3208 SmallVector<SDValue, 4> Outputs; 3209 // We may have a vector type but a scalar result. Create a splat. 3210 Outputs.resize(VT.getVectorNumElements(), Outputs.back()); 3211 // Build a big vector out of the scalar elements we generated. 3212 return getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Outputs); 3213 } else { 3214 return SDValue(); 3215 } 3216 } 3217 } 3218 3219 // For vectors extract each constant element into Inputs so we can constant 3220 // fold them individually. 3221 BuildVectorSDNode *BV1 = dyn_cast<BuildVectorSDNode>(Cst1); 3222 BuildVectorSDNode *BV2 = dyn_cast<BuildVectorSDNode>(Cst2); 3223 if (!BV1 || !BV2) 3224 return SDValue(); 3225 3226 assert(BV1->getNumOperands() == BV2->getNumOperands() && "Out of sync!"); 3227 3228 EVT SVT = VT.getScalarType(); 3229 SmallVector<SDValue, 4> Outputs; 3230 for (unsigned I = 0, E = BV1->getNumOperands(); I != E; ++I) { 3231 ConstantSDNode *V1 = dyn_cast<ConstantSDNode>(BV1->getOperand(I)); 3232 ConstantSDNode *V2 = dyn_cast<ConstantSDNode>(BV2->getOperand(I)); 3233 if (!V1 || !V2) // Not a constant, bail. 3234 return SDValue(); 3235 3236 if (V1->isOpaque() || V2->isOpaque()) 3237 return SDValue(); 3238 3239 // Avoid BUILD_VECTOR nodes that perform implicit truncation. 3240 // FIXME: This is valid and could be handled by truncating the APInts. 3241 if (V1->getValueType(0) != SVT || V2->getValueType(0) != SVT) 3242 return SDValue(); 3243 3244 // Fold one vector element. 3245 std::pair<APInt, bool> Folded = FoldValue(Opcode, V1->getAPIntValue(), 3246 V2->getAPIntValue()); 3247 if (!Folded.second) 3248 return SDValue(); 3249 Outputs.push_back(getConstant(Folded.first, DL, SVT)); 3250 } 3251 3252 assert(VT.getVectorNumElements() == Outputs.size() && 3253 "Vector size mismatch!"); 3254 3255 // We may have a vector type but a scalar result. Create a splat. 3256 Outputs.resize(VT.getVectorNumElements(), Outputs.back()); 3257 3258 // Build a big vector out of the scalar elements we generated. 3259 return getNode(ISD::BUILD_VECTOR, SDLoc(), VT, Outputs); 3260 } 3261 3262 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, SDValue N1, 3263 SDValue N2, bool nuw, bool nsw, bool exact) { 3264 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode()); 3265 ConstantSDNode *N2C = dyn_cast<ConstantSDNode>(N2.getNode()); 3266 switch (Opcode) { 3267 default: break; 3268 case ISD::TokenFactor: 3269 assert(VT == MVT::Other && N1.getValueType() == MVT::Other && 3270 N2.getValueType() == MVT::Other && "Invalid token factor!"); 3271 // Fold trivial token factors. 3272 if (N1.getOpcode() == ISD::EntryToken) return N2; 3273 if (N2.getOpcode() == ISD::EntryToken) return N1; 3274 if (N1 == N2) return N1; 3275 break; 3276 case ISD::CONCAT_VECTORS: 3277 // Concat of UNDEFs is UNDEF. 3278 if (N1.getOpcode() == ISD::UNDEF && 3279 N2.getOpcode() == ISD::UNDEF) 3280 return getUNDEF(VT); 3281 3282 // A CONCAT_VECTOR with all operands BUILD_VECTOR can be simplified to 3283 // one big BUILD_VECTOR. 3284 if (N1.getOpcode() == ISD::BUILD_VECTOR && 3285 N2.getOpcode() == ISD::BUILD_VECTOR) { 3286 SmallVector<SDValue, 16> Elts(N1.getNode()->op_begin(), 3287 N1.getNode()->op_end()); 3288 Elts.append(N2.getNode()->op_begin(), N2.getNode()->op_end()); 3289 3290 // BUILD_VECTOR requires all inputs to be of the same type, find the 3291 // maximum type and extend them all. 3292 EVT SVT = VT.getScalarType(); 3293 for (SDValue Op : Elts) 3294 SVT = (SVT.bitsLT(Op.getValueType()) ? Op.getValueType() : SVT); 3295 if (SVT.bitsGT(VT.getScalarType())) 3296 for (SDValue &Op : Elts) 3297 Op = TLI->isZExtFree(Op.getValueType(), SVT) 3298 ? getZExtOrTrunc(Op, DL, SVT) 3299 : getSExtOrTrunc(Op, DL, SVT); 3300 3301 return getNode(ISD::BUILD_VECTOR, DL, VT, Elts); 3302 } 3303 break; 3304 case ISD::AND: 3305 assert(VT.isInteger() && "This operator does not apply to FP types!"); 3306 assert(N1.getValueType() == N2.getValueType() && 3307 N1.getValueType() == VT && "Binary operator types must match!"); 3308 // (X & 0) -> 0. This commonly occurs when legalizing i64 values, so it's 3309 // worth handling here. 3310 if (N2C && N2C->isNullValue()) 3311 return N2; 3312 if (N2C && N2C->isAllOnesValue()) // X & -1 -> X 3313 return N1; 3314 break; 3315 case ISD::OR: 3316 case ISD::XOR: 3317 case ISD::ADD: 3318 case ISD::SUB: 3319 assert(VT.isInteger() && "This operator does not apply to FP types!"); 3320 assert(N1.getValueType() == N2.getValueType() && 3321 N1.getValueType() == VT && "Binary operator types must match!"); 3322 // (X ^|+- 0) -> X. This commonly occurs when legalizing i64 values, so 3323 // it's worth handling here. 3324 if (N2C && N2C->isNullValue()) 3325 return N1; 3326 break; 3327 case ISD::UDIV: 3328 case ISD::UREM: 3329 case ISD::MULHU: 3330 case ISD::MULHS: 3331 case ISD::MUL: 3332 case ISD::SDIV: 3333 case ISD::SREM: 3334 assert(VT.isInteger() && "This operator does not apply to FP types!"); 3335 assert(N1.getValueType() == N2.getValueType() && 3336 N1.getValueType() == VT && "Binary operator types must match!"); 3337 break; 3338 case ISD::FADD: 3339 case ISD::FSUB: 3340 case ISD::FMUL: 3341 case ISD::FDIV: 3342 case ISD::FREM: 3343 if (getTarget().Options.UnsafeFPMath) { 3344 if (Opcode == ISD::FADD) { 3345 // 0+x --> x 3346 if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1)) 3347 if (CFP->getValueAPF().isZero()) 3348 return N2; 3349 // x+0 --> x 3350 if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2)) 3351 if (CFP->getValueAPF().isZero()) 3352 return N1; 3353 } else if (Opcode == ISD::FSUB) { 3354 // x-0 --> x 3355 if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2)) 3356 if (CFP->getValueAPF().isZero()) 3357 return N1; 3358 } else if (Opcode == ISD::FMUL) { 3359 ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1); 3360 SDValue V = N2; 3361 3362 // If the first operand isn't the constant, try the second 3363 if (!CFP) { 3364 CFP = dyn_cast<ConstantFPSDNode>(N2); 3365 V = N1; 3366 } 3367 3368 if (CFP) { 3369 // 0*x --> 0 3370 if (CFP->isZero()) 3371 return SDValue(CFP,0); 3372 // 1*x --> x 3373 if (CFP->isExactlyValue(1.0)) 3374 return V; 3375 } 3376 } 3377 } 3378 assert(VT.isFloatingPoint() && "This operator only applies to FP types!"); 3379 assert(N1.getValueType() == N2.getValueType() && 3380 N1.getValueType() == VT && "Binary operator types must match!"); 3381 break; 3382 case ISD::FCOPYSIGN: // N1 and result must match. N1/N2 need not match. 3383 assert(N1.getValueType() == VT && 3384 N1.getValueType().isFloatingPoint() && 3385 N2.getValueType().isFloatingPoint() && 3386 "Invalid FCOPYSIGN!"); 3387 break; 3388 case ISD::SHL: 3389 case ISD::SRA: 3390 case ISD::SRL: 3391 case ISD::ROTL: 3392 case ISD::ROTR: 3393 assert(VT == N1.getValueType() && 3394 "Shift operators return type must be the same as their first arg"); 3395 assert(VT.isInteger() && N2.getValueType().isInteger() && 3396 "Shifts only work on integers"); 3397 assert((!VT.isVector() || VT == N2.getValueType()) && 3398 "Vector shift amounts must be in the same as their first arg"); 3399 // Verify that the shift amount VT is bit enough to hold valid shift 3400 // amounts. This catches things like trying to shift an i1024 value by an 3401 // i8, which is easy to fall into in generic code that uses 3402 // TLI.getShiftAmount(). 3403 assert(N2.getValueType().getSizeInBits() >= 3404 Log2_32_Ceil(N1.getValueType().getSizeInBits()) && 3405 "Invalid use of small shift amount with oversized value!"); 3406 3407 // Always fold shifts of i1 values so the code generator doesn't need to 3408 // handle them. Since we know the size of the shift has to be less than the 3409 // size of the value, the shift/rotate count is guaranteed to be zero. 3410 if (VT == MVT::i1) 3411 return N1; 3412 if (N2C && N2C->isNullValue()) 3413 return N1; 3414 break; 3415 case ISD::FP_ROUND_INREG: { 3416 EVT EVT = cast<VTSDNode>(N2)->getVT(); 3417 assert(VT == N1.getValueType() && "Not an inreg round!"); 3418 assert(VT.isFloatingPoint() && EVT.isFloatingPoint() && 3419 "Cannot FP_ROUND_INREG integer types"); 3420 assert(EVT.isVector() == VT.isVector() && 3421 "FP_ROUND_INREG type should be vector iff the operand " 3422 "type is vector!"); 3423 assert((!EVT.isVector() || 3424 EVT.getVectorNumElements() == VT.getVectorNumElements()) && 3425 "Vector element counts must match in FP_ROUND_INREG"); 3426 assert(EVT.bitsLE(VT) && "Not rounding down!"); 3427 (void)EVT; 3428 if (cast<VTSDNode>(N2)->getVT() == VT) return N1; // Not actually rounding. 3429 break; 3430 } 3431 case ISD::FP_ROUND: 3432 assert(VT.isFloatingPoint() && 3433 N1.getValueType().isFloatingPoint() && 3434 VT.bitsLE(N1.getValueType()) && 3435 isa<ConstantSDNode>(N2) && "Invalid FP_ROUND!"); 3436 if (N1.getValueType() == VT) return N1; // noop conversion. 3437 break; 3438 case ISD::AssertSext: 3439 case ISD::AssertZext: { 3440 EVT EVT = cast<VTSDNode>(N2)->getVT(); 3441 assert(VT == N1.getValueType() && "Not an inreg extend!"); 3442 assert(VT.isInteger() && EVT.isInteger() && 3443 "Cannot *_EXTEND_INREG FP types"); 3444 assert(!EVT.isVector() && 3445 "AssertSExt/AssertZExt type should be the vector element type " 3446 "rather than the vector type!"); 3447 assert(EVT.bitsLE(VT) && "Not extending!"); 3448 if (VT == EVT) return N1; // noop assertion. 3449 break; 3450 } 3451 case ISD::SIGN_EXTEND_INREG: { 3452 EVT EVT = cast<VTSDNode>(N2)->getVT(); 3453 assert(VT == N1.getValueType() && "Not an inreg extend!"); 3454 assert(VT.isInteger() && EVT.isInteger() && 3455 "Cannot *_EXTEND_INREG FP types"); 3456 assert(EVT.isVector() == VT.isVector() && 3457 "SIGN_EXTEND_INREG type should be vector iff the operand " 3458 "type is vector!"); 3459 assert((!EVT.isVector() || 3460 EVT.getVectorNumElements() == VT.getVectorNumElements()) && 3461 "Vector element counts must match in SIGN_EXTEND_INREG"); 3462 assert(EVT.bitsLE(VT) && "Not extending!"); 3463 if (EVT == VT) return N1; // Not actually extending 3464 3465 auto SignExtendInReg = [&](APInt Val) { 3466 unsigned FromBits = EVT.getScalarType().getSizeInBits(); 3467 Val <<= Val.getBitWidth() - FromBits; 3468 Val = Val.ashr(Val.getBitWidth() - FromBits); 3469 return getConstant(Val, DL, VT.getScalarType()); 3470 }; 3471 3472 if (N1C) { 3473 APInt Val = N1C->getAPIntValue(); 3474 return SignExtendInReg(Val); 3475 } 3476 if (ISD::isBuildVectorOfConstantSDNodes(N1.getNode())) { 3477 SmallVector<SDValue, 8> Ops; 3478 for (int i = 0, e = VT.getVectorNumElements(); i != e; ++i) { 3479 SDValue Op = N1.getOperand(i); 3480 if (Op.getValueType() != VT.getScalarType()) break; 3481 if (Op.getOpcode() == ISD::UNDEF) { 3482 Ops.push_back(Op); 3483 continue; 3484 } 3485 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getNode())) { 3486 APInt Val = C->getAPIntValue(); 3487 Ops.push_back(SignExtendInReg(Val)); 3488 continue; 3489 } 3490 break; 3491 } 3492 if (Ops.size() == VT.getVectorNumElements()) 3493 return getNode(ISD::BUILD_VECTOR, DL, VT, Ops); 3494 } 3495 break; 3496 } 3497 case ISD::EXTRACT_VECTOR_ELT: 3498 // EXTRACT_VECTOR_ELT of an UNDEF is an UNDEF. 3499 if (N1.getOpcode() == ISD::UNDEF) 3500 return getUNDEF(VT); 3501 3502 // EXTRACT_VECTOR_ELT of out-of-bounds element is an UNDEF 3503 if (N2C && N2C->getZExtValue() >= N1.getValueType().getVectorNumElements()) 3504 return getUNDEF(VT); 3505 3506 // EXTRACT_VECTOR_ELT of CONCAT_VECTORS is often formed while lowering is 3507 // expanding copies of large vectors from registers. 3508 if (N2C && 3509 N1.getOpcode() == ISD::CONCAT_VECTORS && 3510 N1.getNumOperands() > 0) { 3511 unsigned Factor = 3512 N1.getOperand(0).getValueType().getVectorNumElements(); 3513 return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, 3514 N1.getOperand(N2C->getZExtValue() / Factor), 3515 getConstant(N2C->getZExtValue() % Factor, DL, 3516 N2.getValueType())); 3517 } 3518 3519 // EXTRACT_VECTOR_ELT of BUILD_VECTOR is often formed while lowering is 3520 // expanding large vector constants. 3521 if (N2C && N1.getOpcode() == ISD::BUILD_VECTOR) { 3522 SDValue Elt = N1.getOperand(N2C->getZExtValue()); 3523 3524 if (VT != Elt.getValueType()) 3525 // If the vector element type is not legal, the BUILD_VECTOR operands 3526 // are promoted and implicitly truncated, and the result implicitly 3527 // extended. Make that explicit here. 3528 Elt = getAnyExtOrTrunc(Elt, DL, VT); 3529 3530 return Elt; 3531 } 3532 3533 // EXTRACT_VECTOR_ELT of INSERT_VECTOR_ELT is often formed when vector 3534 // operations are lowered to scalars. 3535 if (N1.getOpcode() == ISD::INSERT_VECTOR_ELT) { 3536 // If the indices are the same, return the inserted element else 3537 // if the indices are known different, extract the element from 3538 // the original vector. 3539 SDValue N1Op2 = N1.getOperand(2); 3540 ConstantSDNode *N1Op2C = dyn_cast<ConstantSDNode>(N1Op2.getNode()); 3541 3542 if (N1Op2C && N2C) { 3543 if (N1Op2C->getZExtValue() == N2C->getZExtValue()) { 3544 if (VT == N1.getOperand(1).getValueType()) 3545 return N1.getOperand(1); 3546 else 3547 return getSExtOrTrunc(N1.getOperand(1), DL, VT); 3548 } 3549 3550 return getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, N1.getOperand(0), N2); 3551 } 3552 } 3553 break; 3554 case ISD::EXTRACT_ELEMENT: 3555 assert(N2C && (unsigned)N2C->getZExtValue() < 2 && "Bad EXTRACT_ELEMENT!"); 3556 assert(!N1.getValueType().isVector() && !VT.isVector() && 3557 (N1.getValueType().isInteger() == VT.isInteger()) && 3558 N1.getValueType() != VT && 3559 "Wrong types for EXTRACT_ELEMENT!"); 3560 3561 // EXTRACT_ELEMENT of BUILD_PAIR is often formed while legalize is expanding 3562 // 64-bit integers into 32-bit parts. Instead of building the extract of 3563 // the BUILD_PAIR, only to have legalize rip it apart, just do it now. 3564 if (N1.getOpcode() == ISD::BUILD_PAIR) 3565 return N1.getOperand(N2C->getZExtValue()); 3566 3567 // EXTRACT_ELEMENT of a constant int is also very common. 3568 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N1)) { 3569 unsigned ElementSize = VT.getSizeInBits(); 3570 unsigned Shift = ElementSize * N2C->getZExtValue(); 3571 APInt ShiftedVal = C->getAPIntValue().lshr(Shift); 3572 return getConstant(ShiftedVal.trunc(ElementSize), DL, VT); 3573 } 3574 break; 3575 case ISD::EXTRACT_SUBVECTOR: { 3576 SDValue Index = N2; 3577 if (VT.isSimple() && N1.getValueType().isSimple()) { 3578 assert(VT.isVector() && N1.getValueType().isVector() && 3579 "Extract subvector VTs must be a vectors!"); 3580 assert(VT.getVectorElementType() == 3581 N1.getValueType().getVectorElementType() && 3582 "Extract subvector VTs must have the same element type!"); 3583 assert(VT.getSimpleVT() <= N1.getSimpleValueType() && 3584 "Extract subvector must be from larger vector to smaller vector!"); 3585 3586 if (isa<ConstantSDNode>(Index.getNode())) { 3587 assert((VT.getVectorNumElements() + 3588 cast<ConstantSDNode>(Index.getNode())->getZExtValue() 3589 <= N1.getValueType().getVectorNumElements()) 3590 && "Extract subvector overflow!"); 3591 } 3592 3593 // Trivial extraction. 3594 if (VT.getSimpleVT() == N1.getSimpleValueType()) 3595 return N1; 3596 } 3597 break; 3598 } 3599 } 3600 3601 // Perform trivial constant folding. 3602 if (SDValue SV = 3603 FoldConstantArithmetic(Opcode, DL, VT, N1.getNode(), N2.getNode())) 3604 return SV; 3605 3606 // Canonicalize constant to RHS if commutative. 3607 if (N1C && !N2C && isCommutativeBinOp(Opcode)) { 3608 std::swap(N1C, N2C); 3609 std::swap(N1, N2); 3610 } 3611 3612 // Constant fold FP operations. 3613 bool HasFPExceptions = TLI->hasFloatingPointExceptions(); 3614 ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1.getNode()); 3615 ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2.getNode()); 3616 if (N1CFP) { 3617 if (!N2CFP && isCommutativeBinOp(Opcode)) { 3618 // Canonicalize constant to RHS if commutative. 3619 std::swap(N1CFP, N2CFP); 3620 std::swap(N1, N2); 3621 } else if (N2CFP) { 3622 APFloat V1 = N1CFP->getValueAPF(), V2 = N2CFP->getValueAPF(); 3623 APFloat::opStatus s; 3624 switch (Opcode) { 3625 case ISD::FADD: 3626 s = V1.add(V2, APFloat::rmNearestTiesToEven); 3627 if (!HasFPExceptions || s != APFloat::opInvalidOp) 3628 return getConstantFP(V1, DL, VT); 3629 break; 3630 case ISD::FSUB: 3631 s = V1.subtract(V2, APFloat::rmNearestTiesToEven); 3632 if (!HasFPExceptions || s!=APFloat::opInvalidOp) 3633 return getConstantFP(V1, DL, VT); 3634 break; 3635 case ISD::FMUL: 3636 s = V1.multiply(V2, APFloat::rmNearestTiesToEven); 3637 if (!HasFPExceptions || s!=APFloat::opInvalidOp) 3638 return getConstantFP(V1, DL, VT); 3639 break; 3640 case ISD::FDIV: 3641 s = V1.divide(V2, APFloat::rmNearestTiesToEven); 3642 if (!HasFPExceptions || (s!=APFloat::opInvalidOp && 3643 s!=APFloat::opDivByZero)) { 3644 return getConstantFP(V1, DL, VT); 3645 } 3646 break; 3647 case ISD::FREM : 3648 s = V1.mod(V2, APFloat::rmNearestTiesToEven); 3649 if (!HasFPExceptions || (s!=APFloat::opInvalidOp && 3650 s!=APFloat::opDivByZero)) { 3651 return getConstantFP(V1, DL, VT); 3652 } 3653 break; 3654 case ISD::FCOPYSIGN: 3655 V1.copySign(V2); 3656 return getConstantFP(V1, DL, VT); 3657 default: break; 3658 } 3659 } 3660 3661 if (Opcode == ISD::FP_ROUND) { 3662 APFloat V = N1CFP->getValueAPF(); // make copy 3663 bool ignored; 3664 // This can return overflow, underflow, or inexact; we don't care. 3665 // FIXME need to be more flexible about rounding mode. 3666 (void)V.convert(EVTToAPFloatSemantics(VT), 3667 APFloat::rmNearestTiesToEven, &ignored); 3668 return getConstantFP(V, DL, VT); 3669 } 3670 } 3671 3672 // Canonicalize an UNDEF to the RHS, even over a constant. 3673 if (N1.getOpcode() == ISD::UNDEF) { 3674 if (isCommutativeBinOp(Opcode)) { 3675 std::swap(N1, N2); 3676 } else { 3677 switch (Opcode) { 3678 case ISD::FP_ROUND_INREG: 3679 case ISD::SIGN_EXTEND_INREG: 3680 case ISD::SUB: 3681 case ISD::FSUB: 3682 case ISD::FDIV: 3683 case ISD::FREM: 3684 case ISD::SRA: 3685 return N1; // fold op(undef, arg2) -> undef 3686 case ISD::UDIV: 3687 case ISD::SDIV: 3688 case ISD::UREM: 3689 case ISD::SREM: 3690 case ISD::SRL: 3691 case ISD::SHL: 3692 if (!VT.isVector()) 3693 return getConstant(0, DL, VT); // fold op(undef, arg2) -> 0 3694 // For vectors, we can't easily build an all zero vector, just return 3695 // the LHS. 3696 return N2; 3697 } 3698 } 3699 } 3700 3701 // Fold a bunch of operators when the RHS is undef. 3702 if (N2.getOpcode() == ISD::UNDEF) { 3703 switch (Opcode) { 3704 case ISD::XOR: 3705 if (N1.getOpcode() == ISD::UNDEF) 3706 // Handle undef ^ undef -> 0 special case. This is a common 3707 // idiom (misuse). 3708 return getConstant(0, DL, VT); 3709 // fallthrough 3710 case ISD::ADD: 3711 case ISD::ADDC: 3712 case ISD::ADDE: 3713 case ISD::SUB: 3714 case ISD::UDIV: 3715 case ISD::SDIV: 3716 case ISD::UREM: 3717 case ISD::SREM: 3718 return N2; // fold op(arg1, undef) -> undef 3719 case ISD::FADD: 3720 case ISD::FSUB: 3721 case ISD::FMUL: 3722 case ISD::FDIV: 3723 case ISD::FREM: 3724 if (getTarget().Options.UnsafeFPMath) 3725 return N2; 3726 break; 3727 case ISD::MUL: 3728 case ISD::AND: 3729 case ISD::SRL: 3730 case ISD::SHL: 3731 if (!VT.isVector()) 3732 return getConstant(0, DL, VT); // fold op(arg1, undef) -> 0 3733 // For vectors, we can't easily build an all zero vector, just return 3734 // the LHS. 3735 return N1; 3736 case ISD::OR: 3737 if (!VT.isVector()) 3738 return getConstant(APInt::getAllOnesValue(VT.getSizeInBits()), DL, VT); 3739 // For vectors, we can't easily build an all one vector, just return 3740 // the LHS. 3741 return N1; 3742 case ISD::SRA: 3743 return N1; 3744 } 3745 } 3746 3747 // Memoize this node if possible. 3748 BinarySDNode *N; 3749 SDVTList VTs = getVTList(VT); 3750 const bool BinOpHasFlags = isBinOpWithFlags(Opcode); 3751 if (VT != MVT::Glue) { 3752 SDValue Ops[] = {N1, N2}; 3753 FoldingSetNodeID ID; 3754 AddNodeIDNode(ID, Opcode, VTs, Ops); 3755 if (BinOpHasFlags) 3756 AddBinaryNodeIDCustom(ID, Opcode, nuw, nsw, exact); 3757 void *IP = nullptr; 3758 if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)) 3759 return SDValue(E, 0); 3760 3761 N = GetBinarySDNode(Opcode, DL, VTs, N1, N2, nuw, nsw, exact); 3762 3763 CSEMap.InsertNode(N, IP); 3764 } else { 3765 N = GetBinarySDNode(Opcode, DL, VTs, N1, N2, nuw, nsw, exact); 3766 } 3767 3768 InsertNode(N); 3769 return SDValue(N, 0); 3770 } 3771 3772 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 3773 SDValue N1, SDValue N2, SDValue N3) { 3774 // Perform various simplifications. 3775 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.getNode()); 3776 switch (Opcode) { 3777 case ISD::FMA: { 3778 ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1); 3779 ConstantFPSDNode *N2CFP = dyn_cast<ConstantFPSDNode>(N2); 3780 ConstantFPSDNode *N3CFP = dyn_cast<ConstantFPSDNode>(N3); 3781 if (N1CFP && N2CFP && N3CFP) { 3782 APFloat V1 = N1CFP->getValueAPF(); 3783 const APFloat &V2 = N2CFP->getValueAPF(); 3784 const APFloat &V3 = N3CFP->getValueAPF(); 3785 APFloat::opStatus s = 3786 V1.fusedMultiplyAdd(V2, V3, APFloat::rmNearestTiesToEven); 3787 if (!TLI->hasFloatingPointExceptions() || s != APFloat::opInvalidOp) 3788 return getConstantFP(V1, DL, VT); 3789 } 3790 break; 3791 } 3792 case ISD::CONCAT_VECTORS: 3793 // A CONCAT_VECTOR with all operands BUILD_VECTOR can be simplified to 3794 // one big BUILD_VECTOR. 3795 if (N1.getOpcode() == ISD::BUILD_VECTOR && 3796 N2.getOpcode() == ISD::BUILD_VECTOR && 3797 N3.getOpcode() == ISD::BUILD_VECTOR) { 3798 SmallVector<SDValue, 16> Elts(N1.getNode()->op_begin(), 3799 N1.getNode()->op_end()); 3800 Elts.append(N2.getNode()->op_begin(), N2.getNode()->op_end()); 3801 Elts.append(N3.getNode()->op_begin(), N3.getNode()->op_end()); 3802 return getNode(ISD::BUILD_VECTOR, DL, VT, Elts); 3803 } 3804 break; 3805 case ISD::SETCC: { 3806 // Use FoldSetCC to simplify SETCC's. 3807 SDValue Simp = FoldSetCC(VT, N1, N2, cast<CondCodeSDNode>(N3)->get(), DL); 3808 if (Simp.getNode()) return Simp; 3809 break; 3810 } 3811 case ISD::SELECT: 3812 if (N1C) { 3813 if (N1C->getZExtValue()) 3814 return N2; // select true, X, Y -> X 3815 return N3; // select false, X, Y -> Y 3816 } 3817 3818 if (N2 == N3) return N2; // select C, X, X -> X 3819 break; 3820 case ISD::VECTOR_SHUFFLE: 3821 llvm_unreachable("should use getVectorShuffle constructor!"); 3822 case ISD::INSERT_SUBVECTOR: { 3823 SDValue Index = N3; 3824 if (VT.isSimple() && N1.getValueType().isSimple() 3825 && N2.getValueType().isSimple()) { 3826 assert(VT.isVector() && N1.getValueType().isVector() && 3827 N2.getValueType().isVector() && 3828 "Insert subvector VTs must be a vectors"); 3829 assert(VT == N1.getValueType() && 3830 "Dest and insert subvector source types must match!"); 3831 assert(N2.getSimpleValueType() <= N1.getSimpleValueType() && 3832 "Insert subvector must be from smaller vector to larger vector!"); 3833 if (isa<ConstantSDNode>(Index.getNode())) { 3834 assert((N2.getValueType().getVectorNumElements() + 3835 cast<ConstantSDNode>(Index.getNode())->getZExtValue() 3836 <= VT.getVectorNumElements()) 3837 && "Insert subvector overflow!"); 3838 } 3839 3840 // Trivial insertion. 3841 if (VT.getSimpleVT() == N2.getSimpleValueType()) 3842 return N2; 3843 } 3844 break; 3845 } 3846 case ISD::BITCAST: 3847 // Fold bit_convert nodes from a type to themselves. 3848 if (N1.getValueType() == VT) 3849 return N1; 3850 break; 3851 } 3852 3853 // Memoize node if it doesn't produce a flag. 3854 SDNode *N; 3855 SDVTList VTs = getVTList(VT); 3856 if (VT != MVT::Glue) { 3857 SDValue Ops[] = { N1, N2, N3 }; 3858 FoldingSetNodeID ID; 3859 AddNodeIDNode(ID, Opcode, VTs, Ops); 3860 void *IP = nullptr; 3861 if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)) 3862 return SDValue(E, 0); 3863 3864 N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(), 3865 DL.getDebugLoc(), VTs, N1, N2, N3); 3866 CSEMap.InsertNode(N, IP); 3867 } else { 3868 N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(), 3869 DL.getDebugLoc(), VTs, N1, N2, N3); 3870 } 3871 3872 InsertNode(N); 3873 return SDValue(N, 0); 3874 } 3875 3876 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 3877 SDValue N1, SDValue N2, SDValue N3, 3878 SDValue N4) { 3879 SDValue Ops[] = { N1, N2, N3, N4 }; 3880 return getNode(Opcode, DL, VT, Ops); 3881 } 3882 3883 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 3884 SDValue N1, SDValue N2, SDValue N3, 3885 SDValue N4, SDValue N5) { 3886 SDValue Ops[] = { N1, N2, N3, N4, N5 }; 3887 return getNode(Opcode, DL, VT, Ops); 3888 } 3889 3890 /// getStackArgumentTokenFactor - Compute a TokenFactor to force all 3891 /// the incoming stack arguments to be loaded from the stack. 3892 SDValue SelectionDAG::getStackArgumentTokenFactor(SDValue Chain) { 3893 SmallVector<SDValue, 8> ArgChains; 3894 3895 // Include the original chain at the beginning of the list. When this is 3896 // used by target LowerCall hooks, this helps legalize find the 3897 // CALLSEQ_BEGIN node. 3898 ArgChains.push_back(Chain); 3899 3900 // Add a chain value for each stack argument. 3901 for (SDNode::use_iterator U = getEntryNode().getNode()->use_begin(), 3902 UE = getEntryNode().getNode()->use_end(); U != UE; ++U) 3903 if (LoadSDNode *L = dyn_cast<LoadSDNode>(*U)) 3904 if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(L->getBasePtr())) 3905 if (FI->getIndex() < 0) 3906 ArgChains.push_back(SDValue(L, 1)); 3907 3908 // Build a tokenfactor for all the chains. 3909 return getNode(ISD::TokenFactor, SDLoc(Chain), MVT::Other, ArgChains); 3910 } 3911 3912 /// getMemsetValue - Vectorized representation of the memset value 3913 /// operand. 3914 static SDValue getMemsetValue(SDValue Value, EVT VT, SelectionDAG &DAG, 3915 SDLoc dl) { 3916 assert(Value.getOpcode() != ISD::UNDEF); 3917 3918 unsigned NumBits = VT.getScalarType().getSizeInBits(); 3919 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Value)) { 3920 assert(C->getAPIntValue().getBitWidth() == 8); 3921 APInt Val = APInt::getSplat(NumBits, C->getAPIntValue()); 3922 if (VT.isInteger()) 3923 return DAG.getConstant(Val, dl, VT); 3924 return DAG.getConstantFP(APFloat(DAG.EVTToAPFloatSemantics(VT), Val), dl, 3925 VT); 3926 } 3927 3928 assert(Value.getValueType() == MVT::i8 && "memset with non-byte fill value?"); 3929 EVT IntVT = VT.getScalarType(); 3930 if (!IntVT.isInteger()) 3931 IntVT = EVT::getIntegerVT(*DAG.getContext(), IntVT.getSizeInBits()); 3932 3933 Value = DAG.getNode(ISD::ZERO_EXTEND, dl, IntVT, Value); 3934 if (NumBits > 8) { 3935 // Use a multiplication with 0x010101... to extend the input to the 3936 // required length. 3937 APInt Magic = APInt::getSplat(NumBits, APInt(8, 0x01)); 3938 Value = DAG.getNode(ISD::MUL, dl, IntVT, Value, 3939 DAG.getConstant(Magic, dl, IntVT)); 3940 } 3941 3942 if (VT != Value.getValueType() && !VT.isInteger()) 3943 Value = DAG.getNode(ISD::BITCAST, dl, VT.getScalarType(), Value); 3944 if (VT != Value.getValueType()) { 3945 assert(VT.getVectorElementType() == Value.getValueType() && 3946 "value type should be one vector element here"); 3947 SmallVector<SDValue, 8> BVOps(VT.getVectorNumElements(), Value); 3948 Value = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, BVOps); 3949 } 3950 3951 return Value; 3952 } 3953 3954 /// getMemsetStringVal - Similar to getMemsetValue. Except this is only 3955 /// used when a memcpy is turned into a memset when the source is a constant 3956 /// string ptr. 3957 static SDValue getMemsetStringVal(EVT VT, SDLoc dl, SelectionDAG &DAG, 3958 const TargetLowering &TLI, StringRef Str) { 3959 // Handle vector with all elements zero. 3960 if (Str.empty()) { 3961 if (VT.isInteger()) 3962 return DAG.getConstant(0, dl, VT); 3963 else if (VT == MVT::f32 || VT == MVT::f64 || VT == MVT::f128) 3964 return DAG.getConstantFP(0.0, dl, VT); 3965 else if (VT.isVector()) { 3966 unsigned NumElts = VT.getVectorNumElements(); 3967 MVT EltVT = (VT.getVectorElementType() == MVT::f32) ? MVT::i32 : MVT::i64; 3968 return DAG.getNode(ISD::BITCAST, dl, VT, 3969 DAG.getConstant(0, dl, 3970 EVT::getVectorVT(*DAG.getContext(), 3971 EltVT, NumElts))); 3972 } else 3973 llvm_unreachable("Expected type!"); 3974 } 3975 3976 assert(!VT.isVector() && "Can't handle vector type here!"); 3977 unsigned NumVTBits = VT.getSizeInBits(); 3978 unsigned NumVTBytes = NumVTBits / 8; 3979 unsigned NumBytes = std::min(NumVTBytes, unsigned(Str.size())); 3980 3981 APInt Val(NumVTBits, 0); 3982 if (TLI.isLittleEndian()) { 3983 for (unsigned i = 0; i != NumBytes; ++i) 3984 Val |= (uint64_t)(unsigned char)Str[i] << i*8; 3985 } else { 3986 for (unsigned i = 0; i != NumBytes; ++i) 3987 Val |= (uint64_t)(unsigned char)Str[i] << (NumVTBytes-i-1)*8; 3988 } 3989 3990 // If the "cost" of materializing the integer immediate is less than the cost 3991 // of a load, then it is cost effective to turn the load into the immediate. 3992 Type *Ty = VT.getTypeForEVT(*DAG.getContext()); 3993 if (TLI.shouldConvertConstantLoadToIntImm(Val, Ty)) 3994 return DAG.getConstant(Val, dl, VT); 3995 return SDValue(nullptr, 0); 3996 } 3997 3998 /// getMemBasePlusOffset - Returns base and offset node for the 3999 /// 4000 static SDValue getMemBasePlusOffset(SDValue Base, unsigned Offset, SDLoc dl, 4001 SelectionDAG &DAG) { 4002 EVT VT = Base.getValueType(); 4003 return DAG.getNode(ISD::ADD, dl, 4004 VT, Base, DAG.getConstant(Offset, dl, VT)); 4005 } 4006 4007 /// isMemSrcFromString - Returns true if memcpy source is a string constant. 4008 /// 4009 static bool isMemSrcFromString(SDValue Src, StringRef &Str) { 4010 unsigned SrcDelta = 0; 4011 GlobalAddressSDNode *G = nullptr; 4012 if (Src.getOpcode() == ISD::GlobalAddress) 4013 G = cast<GlobalAddressSDNode>(Src); 4014 else if (Src.getOpcode() == ISD::ADD && 4015 Src.getOperand(0).getOpcode() == ISD::GlobalAddress && 4016 Src.getOperand(1).getOpcode() == ISD::Constant) { 4017 G = cast<GlobalAddressSDNode>(Src.getOperand(0)); 4018 SrcDelta = cast<ConstantSDNode>(Src.getOperand(1))->getZExtValue(); 4019 } 4020 if (!G) 4021 return false; 4022 4023 return getConstantStringInfo(G->getGlobal(), Str, SrcDelta, false); 4024 } 4025 4026 /// FindOptimalMemOpLowering - Determines the optimial series memory ops 4027 /// to replace the memset / memcpy. Return true if the number of memory ops 4028 /// is below the threshold. It returns the types of the sequence of 4029 /// memory ops to perform memset / memcpy by reference. 4030 static bool FindOptimalMemOpLowering(std::vector<EVT> &MemOps, 4031 unsigned Limit, uint64_t Size, 4032 unsigned DstAlign, unsigned SrcAlign, 4033 bool IsMemset, 4034 bool ZeroMemset, 4035 bool MemcpyStrSrc, 4036 bool AllowOverlap, 4037 SelectionDAG &DAG, 4038 const TargetLowering &TLI) { 4039 assert((SrcAlign == 0 || SrcAlign >= DstAlign) && 4040 "Expecting memcpy / memset source to meet alignment requirement!"); 4041 // If 'SrcAlign' is zero, that means the memory operation does not need to 4042 // load the value, i.e. memset or memcpy from constant string. Otherwise, 4043 // it's the inferred alignment of the source. 'DstAlign', on the other hand, 4044 // is the specified alignment of the memory operation. If it is zero, that 4045 // means it's possible to change the alignment of the destination. 4046 // 'MemcpyStrSrc' indicates whether the memcpy source is constant so it does 4047 // not need to be loaded. 4048 EVT VT = TLI.getOptimalMemOpType(Size, DstAlign, SrcAlign, 4049 IsMemset, ZeroMemset, MemcpyStrSrc, 4050 DAG.getMachineFunction()); 4051 4052 if (VT == MVT::Other) { 4053 unsigned AS = 0; 4054 if (DstAlign >= TLI.getDataLayout()->getPointerPrefAlignment(AS) || 4055 TLI.allowsMisalignedMemoryAccesses(VT, AS, DstAlign)) { 4056 VT = TLI.getPointerTy(); 4057 } else { 4058 switch (DstAlign & 7) { 4059 case 0: VT = MVT::i64; break; 4060 case 4: VT = MVT::i32; break; 4061 case 2: VT = MVT::i16; break; 4062 default: VT = MVT::i8; break; 4063 } 4064 } 4065 4066 MVT LVT = MVT::i64; 4067 while (!TLI.isTypeLegal(LVT)) 4068 LVT = (MVT::SimpleValueType)(LVT.SimpleTy - 1); 4069 assert(LVT.isInteger()); 4070 4071 if (VT.bitsGT(LVT)) 4072 VT = LVT; 4073 } 4074 4075 unsigned NumMemOps = 0; 4076 while (Size != 0) { 4077 unsigned VTSize = VT.getSizeInBits() / 8; 4078 while (VTSize > Size) { 4079 // For now, only use non-vector load / store's for the left-over pieces. 4080 EVT NewVT = VT; 4081 unsigned NewVTSize; 4082 4083 bool Found = false; 4084 if (VT.isVector() || VT.isFloatingPoint()) { 4085 NewVT = (VT.getSizeInBits() > 64) ? MVT::i64 : MVT::i32; 4086 if (TLI.isOperationLegalOrCustom(ISD::STORE, NewVT) && 4087 TLI.isSafeMemOpType(NewVT.getSimpleVT())) 4088 Found = true; 4089 else if (NewVT == MVT::i64 && 4090 TLI.isOperationLegalOrCustom(ISD::STORE, MVT::f64) && 4091 TLI.isSafeMemOpType(MVT::f64)) { 4092 // i64 is usually not legal on 32-bit targets, but f64 may be. 4093 NewVT = MVT::f64; 4094 Found = true; 4095 } 4096 } 4097 4098 if (!Found) { 4099 do { 4100 NewVT = (MVT::SimpleValueType)(NewVT.getSimpleVT().SimpleTy - 1); 4101 if (NewVT == MVT::i8) 4102 break; 4103 } while (!TLI.isSafeMemOpType(NewVT.getSimpleVT())); 4104 } 4105 NewVTSize = NewVT.getSizeInBits() / 8; 4106 4107 // If the new VT cannot cover all of the remaining bits, then consider 4108 // issuing a (or a pair of) unaligned and overlapping load / store. 4109 // FIXME: Only does this for 64-bit or more since we don't have proper 4110 // cost model for unaligned load / store. 4111 bool Fast; 4112 unsigned AS = 0; 4113 if (NumMemOps && AllowOverlap && 4114 VTSize >= 8 && NewVTSize < Size && 4115 TLI.allowsMisalignedMemoryAccesses(VT, AS, DstAlign, &Fast) && Fast) 4116 VTSize = Size; 4117 else { 4118 VT = NewVT; 4119 VTSize = NewVTSize; 4120 } 4121 } 4122 4123 if (++NumMemOps > Limit) 4124 return false; 4125 4126 MemOps.push_back(VT); 4127 Size -= VTSize; 4128 } 4129 4130 return true; 4131 } 4132 4133 static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, SDLoc dl, 4134 SDValue Chain, SDValue Dst, 4135 SDValue Src, uint64_t Size, 4136 unsigned Align, bool isVol, 4137 bool AlwaysInline, 4138 MachinePointerInfo DstPtrInfo, 4139 MachinePointerInfo SrcPtrInfo) { 4140 // Turn a memcpy of undef to nop. 4141 if (Src.getOpcode() == ISD::UNDEF) 4142 return Chain; 4143 4144 // Expand memcpy to a series of load and store ops if the size operand falls 4145 // below a certain threshold. 4146 // TODO: In the AlwaysInline case, if the size is big then generate a loop 4147 // rather than maybe a humongous number of loads and stores. 4148 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 4149 std::vector<EVT> MemOps; 4150 bool DstAlignCanChange = false; 4151 MachineFunction &MF = DAG.getMachineFunction(); 4152 MachineFrameInfo *MFI = MF.getFrameInfo(); 4153 bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize); 4154 FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst); 4155 if (FI && !MFI->isFixedObjectIndex(FI->getIndex())) 4156 DstAlignCanChange = true; 4157 unsigned SrcAlign = DAG.InferPtrAlignment(Src); 4158 if (Align > SrcAlign) 4159 SrcAlign = Align; 4160 StringRef Str; 4161 bool CopyFromStr = isMemSrcFromString(Src, Str); 4162 bool isZeroStr = CopyFromStr && Str.empty(); 4163 unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemcpy(OptSize); 4164 4165 if (!FindOptimalMemOpLowering(MemOps, Limit, Size, 4166 (DstAlignCanChange ? 0 : Align), 4167 (isZeroStr ? 0 : SrcAlign), 4168 false, false, CopyFromStr, true, DAG, TLI)) 4169 return SDValue(); 4170 4171 if (DstAlignCanChange) { 4172 Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext()); 4173 unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty); 4174 4175 // Don't promote to an alignment that would require dynamic stack 4176 // realignment. 4177 const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo(); 4178 if (!TRI->needsStackRealignment(MF)) 4179 while (NewAlign > Align && 4180 TLI.getDataLayout()->exceedsNaturalStackAlignment(NewAlign)) 4181 NewAlign /= 2; 4182 4183 if (NewAlign > Align) { 4184 // Give the stack frame object a larger alignment if needed. 4185 if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign) 4186 MFI->setObjectAlignment(FI->getIndex(), NewAlign); 4187 Align = NewAlign; 4188 } 4189 } 4190 4191 SmallVector<SDValue, 8> OutChains; 4192 unsigned NumMemOps = MemOps.size(); 4193 uint64_t SrcOff = 0, DstOff = 0; 4194 for (unsigned i = 0; i != NumMemOps; ++i) { 4195 EVT VT = MemOps[i]; 4196 unsigned VTSize = VT.getSizeInBits() / 8; 4197 SDValue Value, Store; 4198 4199 if (VTSize > Size) { 4200 // Issuing an unaligned load / store pair that overlaps with the previous 4201 // pair. Adjust the offset accordingly. 4202 assert(i == NumMemOps-1 && i != 0); 4203 SrcOff -= VTSize - Size; 4204 DstOff -= VTSize - Size; 4205 } 4206 4207 if (CopyFromStr && 4208 (isZeroStr || (VT.isInteger() && !VT.isVector()))) { 4209 // It's unlikely a store of a vector immediate can be done in a single 4210 // instruction. It would require a load from a constantpool first. 4211 // We only handle zero vectors here. 4212 // FIXME: Handle other cases where store of vector immediate is done in 4213 // a single instruction. 4214 Value = getMemsetStringVal(VT, dl, DAG, TLI, Str.substr(SrcOff)); 4215 if (Value.getNode()) 4216 Store = DAG.getStore(Chain, dl, Value, 4217 getMemBasePlusOffset(Dst, DstOff, dl, DAG), 4218 DstPtrInfo.getWithOffset(DstOff), isVol, 4219 false, Align); 4220 } 4221 4222 if (!Store.getNode()) { 4223 // The type might not be legal for the target. This should only happen 4224 // if the type is smaller than a legal type, as on PPC, so the right 4225 // thing to do is generate a LoadExt/StoreTrunc pair. These simplify 4226 // to Load/Store if NVT==VT. 4227 // FIXME does the case above also need this? 4228 EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT); 4229 assert(NVT.bitsGE(VT)); 4230 Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain, 4231 getMemBasePlusOffset(Src, SrcOff, dl, DAG), 4232 SrcPtrInfo.getWithOffset(SrcOff), VT, isVol, false, 4233 false, MinAlign(SrcAlign, SrcOff)); 4234 Store = DAG.getTruncStore(Chain, dl, Value, 4235 getMemBasePlusOffset(Dst, DstOff, dl, DAG), 4236 DstPtrInfo.getWithOffset(DstOff), VT, isVol, 4237 false, Align); 4238 } 4239 OutChains.push_back(Store); 4240 SrcOff += VTSize; 4241 DstOff += VTSize; 4242 Size -= VTSize; 4243 } 4244 4245 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); 4246 } 4247 4248 static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, SDLoc dl, 4249 SDValue Chain, SDValue Dst, 4250 SDValue Src, uint64_t Size, 4251 unsigned Align, bool isVol, 4252 bool AlwaysInline, 4253 MachinePointerInfo DstPtrInfo, 4254 MachinePointerInfo SrcPtrInfo) { 4255 // Turn a memmove of undef to nop. 4256 if (Src.getOpcode() == ISD::UNDEF) 4257 return Chain; 4258 4259 // Expand memmove to a series of load and store ops if the size operand falls 4260 // below a certain threshold. 4261 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 4262 std::vector<EVT> MemOps; 4263 bool DstAlignCanChange = false; 4264 MachineFunction &MF = DAG.getMachineFunction(); 4265 MachineFrameInfo *MFI = MF.getFrameInfo(); 4266 bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize); 4267 FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst); 4268 if (FI && !MFI->isFixedObjectIndex(FI->getIndex())) 4269 DstAlignCanChange = true; 4270 unsigned SrcAlign = DAG.InferPtrAlignment(Src); 4271 if (Align > SrcAlign) 4272 SrcAlign = Align; 4273 unsigned Limit = AlwaysInline ? ~0U : TLI.getMaxStoresPerMemmove(OptSize); 4274 4275 if (!FindOptimalMemOpLowering(MemOps, Limit, Size, 4276 (DstAlignCanChange ? 0 : Align), SrcAlign, 4277 false, false, false, false, DAG, TLI)) 4278 return SDValue(); 4279 4280 if (DstAlignCanChange) { 4281 Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext()); 4282 unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty); 4283 if (NewAlign > Align) { 4284 // Give the stack frame object a larger alignment if needed. 4285 if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign) 4286 MFI->setObjectAlignment(FI->getIndex(), NewAlign); 4287 Align = NewAlign; 4288 } 4289 } 4290 4291 uint64_t SrcOff = 0, DstOff = 0; 4292 SmallVector<SDValue, 8> LoadValues; 4293 SmallVector<SDValue, 8> LoadChains; 4294 SmallVector<SDValue, 8> OutChains; 4295 unsigned NumMemOps = MemOps.size(); 4296 for (unsigned i = 0; i < NumMemOps; i++) { 4297 EVT VT = MemOps[i]; 4298 unsigned VTSize = VT.getSizeInBits() / 8; 4299 SDValue Value; 4300 4301 Value = DAG.getLoad(VT, dl, Chain, 4302 getMemBasePlusOffset(Src, SrcOff, dl, DAG), 4303 SrcPtrInfo.getWithOffset(SrcOff), isVol, 4304 false, false, SrcAlign); 4305 LoadValues.push_back(Value); 4306 LoadChains.push_back(Value.getValue(1)); 4307 SrcOff += VTSize; 4308 } 4309 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, LoadChains); 4310 OutChains.clear(); 4311 for (unsigned i = 0; i < NumMemOps; i++) { 4312 EVT VT = MemOps[i]; 4313 unsigned VTSize = VT.getSizeInBits() / 8; 4314 SDValue Store; 4315 4316 Store = DAG.getStore(Chain, dl, LoadValues[i], 4317 getMemBasePlusOffset(Dst, DstOff, dl, DAG), 4318 DstPtrInfo.getWithOffset(DstOff), isVol, false, Align); 4319 OutChains.push_back(Store); 4320 DstOff += VTSize; 4321 } 4322 4323 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); 4324 } 4325 4326 /// \brief Lower the call to 'memset' intrinsic function into a series of store 4327 /// operations. 4328 /// 4329 /// \param DAG Selection DAG where lowered code is placed. 4330 /// \param dl Link to corresponding IR location. 4331 /// \param Chain Control flow dependency. 4332 /// \param Dst Pointer to destination memory location. 4333 /// \param Src Value of byte to write into the memory. 4334 /// \param Size Number of bytes to write. 4335 /// \param Align Alignment of the destination in bytes. 4336 /// \param isVol True if destination is volatile. 4337 /// \param DstPtrInfo IR information on the memory pointer. 4338 /// \returns New head in the control flow, if lowering was successful, empty 4339 /// SDValue otherwise. 4340 /// 4341 /// The function tries to replace 'llvm.memset' intrinsic with several store 4342 /// operations and value calculation code. This is usually profitable for small 4343 /// memory size. 4344 static SDValue getMemsetStores(SelectionDAG &DAG, SDLoc dl, 4345 SDValue Chain, SDValue Dst, 4346 SDValue Src, uint64_t Size, 4347 unsigned Align, bool isVol, 4348 MachinePointerInfo DstPtrInfo) { 4349 // Turn a memset of undef to nop. 4350 if (Src.getOpcode() == ISD::UNDEF) 4351 return Chain; 4352 4353 // Expand memset to a series of load/store ops if the size operand 4354 // falls below a certain threshold. 4355 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 4356 std::vector<EVT> MemOps; 4357 bool DstAlignCanChange = false; 4358 MachineFunction &MF = DAG.getMachineFunction(); 4359 MachineFrameInfo *MFI = MF.getFrameInfo(); 4360 bool OptSize = MF.getFunction()->hasFnAttribute(Attribute::OptimizeForSize); 4361 FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Dst); 4362 if (FI && !MFI->isFixedObjectIndex(FI->getIndex())) 4363 DstAlignCanChange = true; 4364 bool IsZeroVal = 4365 isa<ConstantSDNode>(Src) && cast<ConstantSDNode>(Src)->isNullValue(); 4366 if (!FindOptimalMemOpLowering(MemOps, TLI.getMaxStoresPerMemset(OptSize), 4367 Size, (DstAlignCanChange ? 0 : Align), 0, 4368 true, IsZeroVal, false, true, DAG, TLI)) 4369 return SDValue(); 4370 4371 if (DstAlignCanChange) { 4372 Type *Ty = MemOps[0].getTypeForEVT(*DAG.getContext()); 4373 unsigned NewAlign = (unsigned) TLI.getDataLayout()->getABITypeAlignment(Ty); 4374 if (NewAlign > Align) { 4375 // Give the stack frame object a larger alignment if needed. 4376 if (MFI->getObjectAlignment(FI->getIndex()) < NewAlign) 4377 MFI->setObjectAlignment(FI->getIndex(), NewAlign); 4378 Align = NewAlign; 4379 } 4380 } 4381 4382 SmallVector<SDValue, 8> OutChains; 4383 uint64_t DstOff = 0; 4384 unsigned NumMemOps = MemOps.size(); 4385 4386 // Find the largest store and generate the bit pattern for it. 4387 EVT LargestVT = MemOps[0]; 4388 for (unsigned i = 1; i < NumMemOps; i++) 4389 if (MemOps[i].bitsGT(LargestVT)) 4390 LargestVT = MemOps[i]; 4391 SDValue MemSetValue = getMemsetValue(Src, LargestVT, DAG, dl); 4392 4393 for (unsigned i = 0; i < NumMemOps; i++) { 4394 EVT VT = MemOps[i]; 4395 unsigned VTSize = VT.getSizeInBits() / 8; 4396 if (VTSize > Size) { 4397 // Issuing an unaligned load / store pair that overlaps with the previous 4398 // pair. Adjust the offset accordingly. 4399 assert(i == NumMemOps-1 && i != 0); 4400 DstOff -= VTSize - Size; 4401 } 4402 4403 // If this store is smaller than the largest store see whether we can get 4404 // the smaller value for free with a truncate. 4405 SDValue Value = MemSetValue; 4406 if (VT.bitsLT(LargestVT)) { 4407 if (!LargestVT.isVector() && !VT.isVector() && 4408 TLI.isTruncateFree(LargestVT, VT)) 4409 Value = DAG.getNode(ISD::TRUNCATE, dl, VT, MemSetValue); 4410 else 4411 Value = getMemsetValue(Src, VT, DAG, dl); 4412 } 4413 assert(Value.getValueType() == VT && "Value with wrong type."); 4414 SDValue Store = DAG.getStore(Chain, dl, Value, 4415 getMemBasePlusOffset(Dst, DstOff, dl, DAG), 4416 DstPtrInfo.getWithOffset(DstOff), 4417 isVol, false, Align); 4418 OutChains.push_back(Store); 4419 DstOff += VT.getSizeInBits() / 8; 4420 Size -= VTSize; 4421 } 4422 4423 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains); 4424 } 4425 4426 SDValue SelectionDAG::getMemcpy(SDValue Chain, SDLoc dl, SDValue Dst, 4427 SDValue Src, SDValue Size, 4428 unsigned Align, bool isVol, bool AlwaysInline, 4429 bool isTailCall, MachinePointerInfo DstPtrInfo, 4430 MachinePointerInfo SrcPtrInfo) { 4431 assert(Align && "The SDAG layer expects explicit alignment and reserves 0"); 4432 4433 // Check to see if we should lower the memcpy to loads and stores first. 4434 // For cases within the target-specified limits, this is the best choice. 4435 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 4436 if (ConstantSize) { 4437 // Memcpy with size zero? Just return the original chain. 4438 if (ConstantSize->isNullValue()) 4439 return Chain; 4440 4441 SDValue Result = getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src, 4442 ConstantSize->getZExtValue(),Align, 4443 isVol, false, DstPtrInfo, SrcPtrInfo); 4444 if (Result.getNode()) 4445 return Result; 4446 } 4447 4448 // Then check to see if we should lower the memcpy with target-specific 4449 // code. If the target chooses to do this, this is the next best. 4450 if (TSI) { 4451 SDValue Result = TSI->EmitTargetCodeForMemcpy( 4452 *this, dl, Chain, Dst, Src, Size, Align, isVol, AlwaysInline, 4453 DstPtrInfo, SrcPtrInfo); 4454 if (Result.getNode()) 4455 return Result; 4456 } 4457 4458 // If we really need inline code and the target declined to provide it, 4459 // use a (potentially long) sequence of loads and stores. 4460 if (AlwaysInline) { 4461 assert(ConstantSize && "AlwaysInline requires a constant size!"); 4462 return getMemcpyLoadsAndStores(*this, dl, Chain, Dst, Src, 4463 ConstantSize->getZExtValue(), Align, isVol, 4464 true, DstPtrInfo, SrcPtrInfo); 4465 } 4466 4467 // FIXME: If the memcpy is volatile (isVol), lowering it to a plain libc 4468 // memcpy is not guaranteed to be safe. libc memcpys aren't required to 4469 // respect volatile, so they may do things like read or write memory 4470 // beyond the given memory regions. But fixing this isn't easy, and most 4471 // people don't care. 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::MEMCPY), 4484 Type::getVoidTy(*getContext()), 4485 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMCPY), 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::getMemmove(SDValue Chain, SDLoc dl, SDValue Dst, 4495 SDValue Src, SDValue Size, 4496 unsigned Align, bool isVol, bool isTailCall, 4497 MachinePointerInfo DstPtrInfo, 4498 MachinePointerInfo SrcPtrInfo) { 4499 assert(Align && "The SDAG layer expects explicit alignment and reserves 0"); 4500 4501 // Check to see if we should lower the memmove to loads and stores first. 4502 // For cases within the target-specified limits, this is the best choice. 4503 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 4504 if (ConstantSize) { 4505 // Memmove with size zero? Just return the original chain. 4506 if (ConstantSize->isNullValue()) 4507 return Chain; 4508 4509 SDValue Result = 4510 getMemmoveLoadsAndStores(*this, dl, Chain, Dst, Src, 4511 ConstantSize->getZExtValue(), Align, isVol, 4512 false, DstPtrInfo, SrcPtrInfo); 4513 if (Result.getNode()) 4514 return Result; 4515 } 4516 4517 // Then check to see if we should lower the memmove with target-specific 4518 // code. If the target chooses to do this, this is the next best. 4519 if (TSI) { 4520 SDValue Result = TSI->EmitTargetCodeForMemmove( 4521 *this, dl, Chain, Dst, Src, Size, Align, isVol, DstPtrInfo, SrcPtrInfo); 4522 if (Result.getNode()) 4523 return Result; 4524 } 4525 4526 // FIXME: If the memmove is volatile, lowering it to plain libc memmove may 4527 // not be safe. See memcpy above for more details. 4528 4529 // Emit a library call. 4530 TargetLowering::ArgListTy Args; 4531 TargetLowering::ArgListEntry Entry; 4532 Entry.Ty = TLI->getDataLayout()->getIntPtrType(*getContext()); 4533 Entry.Node = Dst; Args.push_back(Entry); 4534 Entry.Node = Src; Args.push_back(Entry); 4535 Entry.Node = Size; Args.push_back(Entry); 4536 // FIXME: pass in SDLoc 4537 TargetLowering::CallLoweringInfo CLI(*this); 4538 CLI.setDebugLoc(dl).setChain(Chain) 4539 .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMMOVE), 4540 Type::getVoidTy(*getContext()), 4541 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMMOVE), 4542 TLI->getPointerTy()), std::move(Args), 0) 4543 .setDiscardResult() 4544 .setTailCall(isTailCall); 4545 4546 std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI); 4547 return CallResult.second; 4548 } 4549 4550 SDValue SelectionDAG::getMemset(SDValue Chain, SDLoc dl, SDValue Dst, 4551 SDValue Src, SDValue Size, 4552 unsigned Align, bool isVol, bool isTailCall, 4553 MachinePointerInfo DstPtrInfo) { 4554 assert(Align && "The SDAG layer expects explicit alignment and reserves 0"); 4555 4556 // Check to see if we should lower the memset to stores first. 4557 // For cases within the target-specified limits, this is the best choice. 4558 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 4559 if (ConstantSize) { 4560 // Memset with size zero? Just return the original chain. 4561 if (ConstantSize->isNullValue()) 4562 return Chain; 4563 4564 SDValue Result = 4565 getMemsetStores(*this, dl, Chain, Dst, Src, ConstantSize->getZExtValue(), 4566 Align, isVol, DstPtrInfo); 4567 4568 if (Result.getNode()) 4569 return Result; 4570 } 4571 4572 // Then check to see if we should lower the memset with target-specific 4573 // code. If the target chooses to do this, this is the next best. 4574 if (TSI) { 4575 SDValue Result = TSI->EmitTargetCodeForMemset( 4576 *this, dl, Chain, Dst, Src, Size, Align, isVol, DstPtrInfo); 4577 if (Result.getNode()) 4578 return Result; 4579 } 4580 4581 // Emit a library call. 4582 Type *IntPtrTy = TLI->getDataLayout()->getIntPtrType(*getContext()); 4583 TargetLowering::ArgListTy Args; 4584 TargetLowering::ArgListEntry Entry; 4585 Entry.Node = Dst; Entry.Ty = IntPtrTy; 4586 Args.push_back(Entry); 4587 Entry.Node = Src; 4588 Entry.Ty = Src.getValueType().getTypeForEVT(*getContext()); 4589 Args.push_back(Entry); 4590 Entry.Node = Size; 4591 Entry.Ty = IntPtrTy; 4592 Args.push_back(Entry); 4593 4594 // FIXME: pass in SDLoc 4595 TargetLowering::CallLoweringInfo CLI(*this); 4596 CLI.setDebugLoc(dl).setChain(Chain) 4597 .setCallee(TLI->getLibcallCallingConv(RTLIB::MEMSET), 4598 Type::getVoidTy(*getContext()), 4599 getExternalSymbol(TLI->getLibcallName(RTLIB::MEMSET), 4600 TLI->getPointerTy()), std::move(Args), 0) 4601 .setDiscardResult() 4602 .setTailCall(isTailCall); 4603 4604 std::pair<SDValue,SDValue> CallResult = TLI->LowerCallTo(CLI); 4605 return CallResult.second; 4606 } 4607 4608 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4609 SDVTList VTList, ArrayRef<SDValue> Ops, 4610 MachineMemOperand *MMO, 4611 AtomicOrdering SuccessOrdering, 4612 AtomicOrdering FailureOrdering, 4613 SynchronizationScope SynchScope) { 4614 FoldingSetNodeID ID; 4615 ID.AddInteger(MemVT.getRawBits()); 4616 AddNodeIDNode(ID, Opcode, VTList, Ops); 4617 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 4618 void* IP = nullptr; 4619 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 4620 cast<AtomicSDNode>(E)->refineAlignment(MMO); 4621 return SDValue(E, 0); 4622 } 4623 4624 // Allocate the operands array for the node out of the BumpPtrAllocator, since 4625 // SDNode doesn't have access to it. This memory will be "leaked" when 4626 // the node is deallocated, but recovered when the allocator is released. 4627 // If the number of operands is less than 5 we use AtomicSDNode's internal 4628 // storage. 4629 unsigned NumOps = Ops.size(); 4630 SDUse *DynOps = NumOps > 4 ? OperandAllocator.Allocate<SDUse>(NumOps) 4631 : nullptr; 4632 4633 SDNode *N = new (NodeAllocator) AtomicSDNode(Opcode, dl.getIROrder(), 4634 dl.getDebugLoc(), VTList, MemVT, 4635 Ops.data(), DynOps, NumOps, MMO, 4636 SuccessOrdering, FailureOrdering, 4637 SynchScope); 4638 CSEMap.InsertNode(N, IP); 4639 InsertNode(N); 4640 return SDValue(N, 0); 4641 } 4642 4643 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4644 SDVTList VTList, ArrayRef<SDValue> Ops, 4645 MachineMemOperand *MMO, 4646 AtomicOrdering Ordering, 4647 SynchronizationScope SynchScope) { 4648 return getAtomic(Opcode, dl, MemVT, VTList, Ops, MMO, Ordering, 4649 Ordering, SynchScope); 4650 } 4651 4652 SDValue SelectionDAG::getAtomicCmpSwap( 4653 unsigned Opcode, SDLoc dl, EVT MemVT, SDVTList VTs, SDValue Chain, 4654 SDValue Ptr, SDValue Cmp, SDValue Swp, MachinePointerInfo PtrInfo, 4655 unsigned Alignment, AtomicOrdering SuccessOrdering, 4656 AtomicOrdering FailureOrdering, SynchronizationScope SynchScope) { 4657 assert(Opcode == ISD::ATOMIC_CMP_SWAP || 4658 Opcode == ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS); 4659 assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types"); 4660 4661 if (Alignment == 0) // Ensure that codegen never sees alignment 0 4662 Alignment = getEVTAlignment(MemVT); 4663 4664 MachineFunction &MF = getMachineFunction(); 4665 4666 // FIXME: Volatile isn't really correct; we should keep track of atomic 4667 // orderings in the memoperand. 4668 unsigned Flags = MachineMemOperand::MOVolatile; 4669 Flags |= MachineMemOperand::MOLoad; 4670 Flags |= MachineMemOperand::MOStore; 4671 4672 MachineMemOperand *MMO = 4673 MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment); 4674 4675 return getAtomicCmpSwap(Opcode, dl, MemVT, VTs, Chain, Ptr, Cmp, Swp, MMO, 4676 SuccessOrdering, FailureOrdering, SynchScope); 4677 } 4678 4679 SDValue SelectionDAG::getAtomicCmpSwap(unsigned Opcode, SDLoc dl, EVT MemVT, 4680 SDVTList VTs, SDValue Chain, SDValue Ptr, 4681 SDValue Cmp, SDValue Swp, 4682 MachineMemOperand *MMO, 4683 AtomicOrdering SuccessOrdering, 4684 AtomicOrdering FailureOrdering, 4685 SynchronizationScope SynchScope) { 4686 assert(Opcode == ISD::ATOMIC_CMP_SWAP || 4687 Opcode == ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS); 4688 assert(Cmp.getValueType() == Swp.getValueType() && "Invalid Atomic Op Types"); 4689 4690 SDValue Ops[] = {Chain, Ptr, Cmp, Swp}; 4691 return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, 4692 SuccessOrdering, FailureOrdering, SynchScope); 4693 } 4694 4695 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4696 SDValue Chain, 4697 SDValue Ptr, SDValue Val, 4698 const Value* PtrVal, 4699 unsigned Alignment, 4700 AtomicOrdering Ordering, 4701 SynchronizationScope SynchScope) { 4702 if (Alignment == 0) // Ensure that codegen never sees alignment 0 4703 Alignment = getEVTAlignment(MemVT); 4704 4705 MachineFunction &MF = getMachineFunction(); 4706 // An atomic store does not load. An atomic load does not store. 4707 // (An atomicrmw obviously both loads and stores.) 4708 // For now, atomics are considered to be volatile always, and they are 4709 // chained as such. 4710 // FIXME: Volatile isn't really correct; we should keep track of atomic 4711 // orderings in the memoperand. 4712 unsigned Flags = MachineMemOperand::MOVolatile; 4713 if (Opcode != ISD::ATOMIC_STORE) 4714 Flags |= MachineMemOperand::MOLoad; 4715 if (Opcode != ISD::ATOMIC_LOAD) 4716 Flags |= MachineMemOperand::MOStore; 4717 4718 MachineMemOperand *MMO = 4719 MF.getMachineMemOperand(MachinePointerInfo(PtrVal), Flags, 4720 MemVT.getStoreSize(), Alignment); 4721 4722 return getAtomic(Opcode, dl, MemVT, Chain, Ptr, Val, MMO, 4723 Ordering, SynchScope); 4724 } 4725 4726 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4727 SDValue Chain, 4728 SDValue Ptr, SDValue Val, 4729 MachineMemOperand *MMO, 4730 AtomicOrdering Ordering, 4731 SynchronizationScope SynchScope) { 4732 assert((Opcode == ISD::ATOMIC_LOAD_ADD || 4733 Opcode == ISD::ATOMIC_LOAD_SUB || 4734 Opcode == ISD::ATOMIC_LOAD_AND || 4735 Opcode == ISD::ATOMIC_LOAD_OR || 4736 Opcode == ISD::ATOMIC_LOAD_XOR || 4737 Opcode == ISD::ATOMIC_LOAD_NAND || 4738 Opcode == ISD::ATOMIC_LOAD_MIN || 4739 Opcode == ISD::ATOMIC_LOAD_MAX || 4740 Opcode == ISD::ATOMIC_LOAD_UMIN || 4741 Opcode == ISD::ATOMIC_LOAD_UMAX || 4742 Opcode == ISD::ATOMIC_SWAP || 4743 Opcode == ISD::ATOMIC_STORE) && 4744 "Invalid Atomic Op"); 4745 4746 EVT VT = Val.getValueType(); 4747 4748 SDVTList VTs = Opcode == ISD::ATOMIC_STORE ? getVTList(MVT::Other) : 4749 getVTList(VT, MVT::Other); 4750 SDValue Ops[] = {Chain, Ptr, Val}; 4751 return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, Ordering, SynchScope); 4752 } 4753 4754 SDValue SelectionDAG::getAtomic(unsigned Opcode, SDLoc dl, EVT MemVT, 4755 EVT VT, SDValue Chain, 4756 SDValue Ptr, 4757 MachineMemOperand *MMO, 4758 AtomicOrdering Ordering, 4759 SynchronizationScope SynchScope) { 4760 assert(Opcode == ISD::ATOMIC_LOAD && "Invalid Atomic Op"); 4761 4762 SDVTList VTs = getVTList(VT, MVT::Other); 4763 SDValue Ops[] = {Chain, Ptr}; 4764 return getAtomic(Opcode, dl, MemVT, VTs, Ops, MMO, Ordering, SynchScope); 4765 } 4766 4767 /// getMergeValues - Create a MERGE_VALUES node from the given operands. 4768 SDValue SelectionDAG::getMergeValues(ArrayRef<SDValue> Ops, SDLoc dl) { 4769 if (Ops.size() == 1) 4770 return Ops[0]; 4771 4772 SmallVector<EVT, 4> VTs; 4773 VTs.reserve(Ops.size()); 4774 for (unsigned i = 0; i < Ops.size(); ++i) 4775 VTs.push_back(Ops[i].getValueType()); 4776 return getNode(ISD::MERGE_VALUES, dl, getVTList(VTs), Ops); 4777 } 4778 4779 SDValue 4780 SelectionDAG::getMemIntrinsicNode(unsigned Opcode, SDLoc dl, SDVTList VTList, 4781 ArrayRef<SDValue> Ops, 4782 EVT MemVT, MachinePointerInfo PtrInfo, 4783 unsigned Align, bool Vol, 4784 bool ReadMem, bool WriteMem, unsigned Size) { 4785 if (Align == 0) // Ensure that codegen never sees alignment 0 4786 Align = getEVTAlignment(MemVT); 4787 4788 MachineFunction &MF = getMachineFunction(); 4789 unsigned Flags = 0; 4790 if (WriteMem) 4791 Flags |= MachineMemOperand::MOStore; 4792 if (ReadMem) 4793 Flags |= MachineMemOperand::MOLoad; 4794 if (Vol) 4795 Flags |= MachineMemOperand::MOVolatile; 4796 if (!Size) 4797 Size = MemVT.getStoreSize(); 4798 MachineMemOperand *MMO = 4799 MF.getMachineMemOperand(PtrInfo, Flags, Size, Align); 4800 4801 return getMemIntrinsicNode(Opcode, dl, VTList, Ops, MemVT, MMO); 4802 } 4803 4804 SDValue 4805 SelectionDAG::getMemIntrinsicNode(unsigned Opcode, SDLoc dl, SDVTList VTList, 4806 ArrayRef<SDValue> Ops, EVT MemVT, 4807 MachineMemOperand *MMO) { 4808 assert((Opcode == ISD::INTRINSIC_VOID || 4809 Opcode == ISD::INTRINSIC_W_CHAIN || 4810 Opcode == ISD::PREFETCH || 4811 Opcode == ISD::LIFETIME_START || 4812 Opcode == ISD::LIFETIME_END || 4813 (Opcode <= INT_MAX && 4814 (int)Opcode >= ISD::FIRST_TARGET_MEMORY_OPCODE)) && 4815 "Opcode is not a memory-accessing opcode!"); 4816 4817 // Memoize the node unless it returns a flag. 4818 MemIntrinsicSDNode *N; 4819 if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) { 4820 FoldingSetNodeID ID; 4821 AddNodeIDNode(ID, Opcode, VTList, Ops); 4822 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 4823 void *IP = nullptr; 4824 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 4825 cast<MemIntrinsicSDNode>(E)->refineAlignment(MMO); 4826 return SDValue(E, 0); 4827 } 4828 4829 N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl.getIROrder(), 4830 dl.getDebugLoc(), VTList, Ops, 4831 MemVT, MMO); 4832 CSEMap.InsertNode(N, IP); 4833 } else { 4834 N = new (NodeAllocator) MemIntrinsicSDNode(Opcode, dl.getIROrder(), 4835 dl.getDebugLoc(), VTList, Ops, 4836 MemVT, MMO); 4837 } 4838 InsertNode(N); 4839 return SDValue(N, 0); 4840 } 4841 4842 /// InferPointerInfo - If the specified ptr/offset is a frame index, infer a 4843 /// MachinePointerInfo record from it. This is particularly useful because the 4844 /// code generator has many cases where it doesn't bother passing in a 4845 /// MachinePointerInfo to getLoad or getStore when it has "FI+Cst". 4846 static MachinePointerInfo InferPointerInfo(SDValue Ptr, int64_t Offset = 0) { 4847 // If this is FI+Offset, we can model it. 4848 if (const FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr)) 4849 return MachinePointerInfo::getFixedStack(FI->getIndex(), Offset); 4850 4851 // If this is (FI+Offset1)+Offset2, we can model it. 4852 if (Ptr.getOpcode() != ISD::ADD || 4853 !isa<ConstantSDNode>(Ptr.getOperand(1)) || 4854 !isa<FrameIndexSDNode>(Ptr.getOperand(0))) 4855 return MachinePointerInfo(); 4856 4857 int FI = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex(); 4858 return MachinePointerInfo::getFixedStack(FI, Offset+ 4859 cast<ConstantSDNode>(Ptr.getOperand(1))->getSExtValue()); 4860 } 4861 4862 /// InferPointerInfo - If the specified ptr/offset is a frame index, infer a 4863 /// MachinePointerInfo record from it. This is particularly useful because the 4864 /// code generator has many cases where it doesn't bother passing in a 4865 /// MachinePointerInfo to getLoad or getStore when it has "FI+Cst". 4866 static MachinePointerInfo InferPointerInfo(SDValue Ptr, SDValue OffsetOp) { 4867 // If the 'Offset' value isn't a constant, we can't handle this. 4868 if (ConstantSDNode *OffsetNode = dyn_cast<ConstantSDNode>(OffsetOp)) 4869 return InferPointerInfo(Ptr, OffsetNode->getSExtValue()); 4870 if (OffsetOp.getOpcode() == ISD::UNDEF) 4871 return InferPointerInfo(Ptr); 4872 return MachinePointerInfo(); 4873 } 4874 4875 4876 SDValue 4877 SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, 4878 EVT VT, SDLoc dl, SDValue Chain, 4879 SDValue Ptr, SDValue Offset, 4880 MachinePointerInfo PtrInfo, EVT MemVT, 4881 bool isVolatile, bool isNonTemporal, bool isInvariant, 4882 unsigned Alignment, const AAMDNodes &AAInfo, 4883 const MDNode *Ranges) { 4884 assert(Chain.getValueType() == MVT::Other && 4885 "Invalid chain type"); 4886 if (Alignment == 0) // Ensure that codegen never sees alignment 0 4887 Alignment = getEVTAlignment(VT); 4888 4889 unsigned Flags = MachineMemOperand::MOLoad; 4890 if (isVolatile) 4891 Flags |= MachineMemOperand::MOVolatile; 4892 if (isNonTemporal) 4893 Flags |= MachineMemOperand::MONonTemporal; 4894 if (isInvariant) 4895 Flags |= MachineMemOperand::MOInvariant; 4896 4897 // If we don't have a PtrInfo, infer the trivial frame index case to simplify 4898 // clients. 4899 if (PtrInfo.V.isNull()) 4900 PtrInfo = InferPointerInfo(Ptr, Offset); 4901 4902 MachineFunction &MF = getMachineFunction(); 4903 MachineMemOperand *MMO = 4904 MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment, 4905 AAInfo, Ranges); 4906 return getLoad(AM, ExtType, VT, dl, Chain, Ptr, Offset, MemVT, MMO); 4907 } 4908 4909 SDValue 4910 SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, 4911 EVT VT, SDLoc dl, SDValue Chain, 4912 SDValue Ptr, SDValue Offset, EVT MemVT, 4913 MachineMemOperand *MMO) { 4914 if (VT == MemVT) { 4915 ExtType = ISD::NON_EXTLOAD; 4916 } else if (ExtType == ISD::NON_EXTLOAD) { 4917 assert(VT == MemVT && "Non-extending load from different memory type!"); 4918 } else { 4919 // Extending load. 4920 assert(MemVT.getScalarType().bitsLT(VT.getScalarType()) && 4921 "Should only be an extending load, not truncating!"); 4922 assert(VT.isInteger() == MemVT.isInteger() && 4923 "Cannot convert from FP to Int or Int -> FP!"); 4924 assert(VT.isVector() == MemVT.isVector() && 4925 "Cannot use an ext load to convert to or from a vector!"); 4926 assert((!VT.isVector() || 4927 VT.getVectorNumElements() == MemVT.getVectorNumElements()) && 4928 "Cannot use an ext load to change the number of vector elements!"); 4929 } 4930 4931 bool Indexed = AM != ISD::UNINDEXED; 4932 assert((Indexed || Offset.getOpcode() == ISD::UNDEF) && 4933 "Unindexed load with an offset!"); 4934 4935 SDVTList VTs = Indexed ? 4936 getVTList(VT, Ptr.getValueType(), MVT::Other) : getVTList(VT, MVT::Other); 4937 SDValue Ops[] = { Chain, Ptr, Offset }; 4938 FoldingSetNodeID ID; 4939 AddNodeIDNode(ID, ISD::LOAD, VTs, Ops); 4940 ID.AddInteger(MemVT.getRawBits()); 4941 ID.AddInteger(encodeMemSDNodeFlags(ExtType, AM, MMO->isVolatile(), 4942 MMO->isNonTemporal(), 4943 MMO->isInvariant())); 4944 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 4945 void *IP = nullptr; 4946 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 4947 cast<LoadSDNode>(E)->refineAlignment(MMO); 4948 return SDValue(E, 0); 4949 } 4950 SDNode *N = new (NodeAllocator) LoadSDNode(Ops, dl.getIROrder(), 4951 dl.getDebugLoc(), VTs, AM, ExtType, 4952 MemVT, MMO); 4953 CSEMap.InsertNode(N, IP); 4954 InsertNode(N); 4955 return SDValue(N, 0); 4956 } 4957 4958 SDValue SelectionDAG::getLoad(EVT VT, SDLoc dl, 4959 SDValue Chain, SDValue Ptr, 4960 MachinePointerInfo PtrInfo, 4961 bool isVolatile, bool isNonTemporal, 4962 bool isInvariant, unsigned Alignment, 4963 const AAMDNodes &AAInfo, 4964 const MDNode *Ranges) { 4965 SDValue Undef = getUNDEF(Ptr.getValueType()); 4966 return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef, 4967 PtrInfo, VT, isVolatile, isNonTemporal, isInvariant, Alignment, 4968 AAInfo, Ranges); 4969 } 4970 4971 SDValue SelectionDAG::getLoad(EVT VT, SDLoc dl, 4972 SDValue Chain, SDValue Ptr, 4973 MachineMemOperand *MMO) { 4974 SDValue Undef = getUNDEF(Ptr.getValueType()); 4975 return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef, 4976 VT, MMO); 4977 } 4978 4979 SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT, 4980 SDValue Chain, SDValue Ptr, 4981 MachinePointerInfo PtrInfo, EVT MemVT, 4982 bool isVolatile, bool isNonTemporal, 4983 bool isInvariant, unsigned Alignment, 4984 const AAMDNodes &AAInfo) { 4985 SDValue Undef = getUNDEF(Ptr.getValueType()); 4986 return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef, 4987 PtrInfo, MemVT, isVolatile, isNonTemporal, isInvariant, 4988 Alignment, AAInfo); 4989 } 4990 4991 4992 SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT, 4993 SDValue Chain, SDValue Ptr, EVT MemVT, 4994 MachineMemOperand *MMO) { 4995 SDValue Undef = getUNDEF(Ptr.getValueType()); 4996 return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef, 4997 MemVT, MMO); 4998 } 4999 5000 SDValue 5001 SelectionDAG::getIndexedLoad(SDValue OrigLoad, SDLoc dl, SDValue Base, 5002 SDValue Offset, ISD::MemIndexedMode AM) { 5003 LoadSDNode *LD = cast<LoadSDNode>(OrigLoad); 5004 assert(LD->getOffset().getOpcode() == ISD::UNDEF && 5005 "Load is already a indexed load!"); 5006 return getLoad(AM, LD->getExtensionType(), OrigLoad.getValueType(), dl, 5007 LD->getChain(), Base, Offset, LD->getPointerInfo(), 5008 LD->getMemoryVT(), LD->isVolatile(), LD->isNonTemporal(), 5009 false, LD->getAlignment()); 5010 } 5011 5012 SDValue SelectionDAG::getStore(SDValue Chain, SDLoc dl, SDValue Val, 5013 SDValue Ptr, MachinePointerInfo PtrInfo, 5014 bool isVolatile, bool isNonTemporal, 5015 unsigned Alignment, const AAMDNodes &AAInfo) { 5016 assert(Chain.getValueType() == MVT::Other && 5017 "Invalid chain type"); 5018 if (Alignment == 0) // Ensure that codegen never sees alignment 0 5019 Alignment = getEVTAlignment(Val.getValueType()); 5020 5021 unsigned Flags = MachineMemOperand::MOStore; 5022 if (isVolatile) 5023 Flags |= MachineMemOperand::MOVolatile; 5024 if (isNonTemporal) 5025 Flags |= MachineMemOperand::MONonTemporal; 5026 5027 if (PtrInfo.V.isNull()) 5028 PtrInfo = InferPointerInfo(Ptr); 5029 5030 MachineFunction &MF = getMachineFunction(); 5031 MachineMemOperand *MMO = 5032 MF.getMachineMemOperand(PtrInfo, Flags, 5033 Val.getValueType().getStoreSize(), Alignment, 5034 AAInfo); 5035 5036 return getStore(Chain, dl, Val, Ptr, MMO); 5037 } 5038 5039 SDValue SelectionDAG::getStore(SDValue Chain, SDLoc dl, SDValue Val, 5040 SDValue Ptr, MachineMemOperand *MMO) { 5041 assert(Chain.getValueType() == MVT::Other && 5042 "Invalid chain type"); 5043 EVT VT = Val.getValueType(); 5044 SDVTList VTs = getVTList(MVT::Other); 5045 SDValue Undef = getUNDEF(Ptr.getValueType()); 5046 SDValue Ops[] = { Chain, Val, Ptr, Undef }; 5047 FoldingSetNodeID ID; 5048 AddNodeIDNode(ID, ISD::STORE, VTs, Ops); 5049 ID.AddInteger(VT.getRawBits()); 5050 ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(), 5051 MMO->isNonTemporal(), MMO->isInvariant())); 5052 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 5053 void *IP = nullptr; 5054 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 5055 cast<StoreSDNode>(E)->refineAlignment(MMO); 5056 return SDValue(E, 0); 5057 } 5058 SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(), 5059 dl.getDebugLoc(), VTs, 5060 ISD::UNINDEXED, false, VT, MMO); 5061 CSEMap.InsertNode(N, IP); 5062 InsertNode(N); 5063 return SDValue(N, 0); 5064 } 5065 5066 SDValue SelectionDAG::getTruncStore(SDValue Chain, SDLoc dl, SDValue Val, 5067 SDValue Ptr, MachinePointerInfo PtrInfo, 5068 EVT SVT,bool isVolatile, bool isNonTemporal, 5069 unsigned Alignment, 5070 const AAMDNodes &AAInfo) { 5071 assert(Chain.getValueType() == MVT::Other && 5072 "Invalid chain type"); 5073 if (Alignment == 0) // Ensure that codegen never sees alignment 0 5074 Alignment = getEVTAlignment(SVT); 5075 5076 unsigned Flags = MachineMemOperand::MOStore; 5077 if (isVolatile) 5078 Flags |= MachineMemOperand::MOVolatile; 5079 if (isNonTemporal) 5080 Flags |= MachineMemOperand::MONonTemporal; 5081 5082 if (PtrInfo.V.isNull()) 5083 PtrInfo = InferPointerInfo(Ptr); 5084 5085 MachineFunction &MF = getMachineFunction(); 5086 MachineMemOperand *MMO = 5087 MF.getMachineMemOperand(PtrInfo, Flags, SVT.getStoreSize(), Alignment, 5088 AAInfo); 5089 5090 return getTruncStore(Chain, dl, Val, Ptr, SVT, MMO); 5091 } 5092 5093 SDValue SelectionDAG::getTruncStore(SDValue Chain, SDLoc dl, SDValue Val, 5094 SDValue Ptr, EVT SVT, 5095 MachineMemOperand *MMO) { 5096 EVT VT = Val.getValueType(); 5097 5098 assert(Chain.getValueType() == MVT::Other && 5099 "Invalid chain type"); 5100 if (VT == SVT) 5101 return getStore(Chain, dl, Val, Ptr, MMO); 5102 5103 assert(SVT.getScalarType().bitsLT(VT.getScalarType()) && 5104 "Should only be a truncating store, not extending!"); 5105 assert(VT.isInteger() == SVT.isInteger() && 5106 "Can't do FP-INT conversion!"); 5107 assert(VT.isVector() == SVT.isVector() && 5108 "Cannot use trunc store to convert to or from a vector!"); 5109 assert((!VT.isVector() || 5110 VT.getVectorNumElements() == SVT.getVectorNumElements()) && 5111 "Cannot use trunc store to change the number of vector elements!"); 5112 5113 SDVTList VTs = getVTList(MVT::Other); 5114 SDValue Undef = getUNDEF(Ptr.getValueType()); 5115 SDValue Ops[] = { Chain, Val, Ptr, Undef }; 5116 FoldingSetNodeID ID; 5117 AddNodeIDNode(ID, ISD::STORE, VTs, Ops); 5118 ID.AddInteger(SVT.getRawBits()); 5119 ID.AddInteger(encodeMemSDNodeFlags(true, ISD::UNINDEXED, MMO->isVolatile(), 5120 MMO->isNonTemporal(), MMO->isInvariant())); 5121 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 5122 void *IP = nullptr; 5123 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 5124 cast<StoreSDNode>(E)->refineAlignment(MMO); 5125 return SDValue(E, 0); 5126 } 5127 SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(), 5128 dl.getDebugLoc(), VTs, 5129 ISD::UNINDEXED, true, SVT, MMO); 5130 CSEMap.InsertNode(N, IP); 5131 InsertNode(N); 5132 return SDValue(N, 0); 5133 } 5134 5135 SDValue 5136 SelectionDAG::getIndexedStore(SDValue OrigStore, SDLoc dl, SDValue Base, 5137 SDValue Offset, ISD::MemIndexedMode AM) { 5138 StoreSDNode *ST = cast<StoreSDNode>(OrigStore); 5139 assert(ST->getOffset().getOpcode() == ISD::UNDEF && 5140 "Store is already a indexed store!"); 5141 SDVTList VTs = getVTList(Base.getValueType(), MVT::Other); 5142 SDValue Ops[] = { ST->getChain(), ST->getValue(), Base, Offset }; 5143 FoldingSetNodeID ID; 5144 AddNodeIDNode(ID, ISD::STORE, VTs, Ops); 5145 ID.AddInteger(ST->getMemoryVT().getRawBits()); 5146 ID.AddInteger(ST->getRawSubclassData()); 5147 ID.AddInteger(ST->getPointerInfo().getAddrSpace()); 5148 void *IP = nullptr; 5149 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) 5150 return SDValue(E, 0); 5151 5152 SDNode *N = new (NodeAllocator) StoreSDNode(Ops, dl.getIROrder(), 5153 dl.getDebugLoc(), VTs, AM, 5154 ST->isTruncatingStore(), 5155 ST->getMemoryVT(), 5156 ST->getMemOperand()); 5157 CSEMap.InsertNode(N, IP); 5158 InsertNode(N); 5159 return SDValue(N, 0); 5160 } 5161 5162 SDValue 5163 SelectionDAG::getMaskedLoad(EVT VT, SDLoc dl, SDValue Chain, 5164 SDValue Ptr, SDValue Mask, SDValue Src0, EVT MemVT, 5165 MachineMemOperand *MMO, ISD::LoadExtType ExtTy) { 5166 5167 SDVTList VTs = getVTList(VT, MVT::Other); 5168 SDValue Ops[] = { Chain, Ptr, Mask, Src0 }; 5169 FoldingSetNodeID ID; 5170 AddNodeIDNode(ID, ISD::MLOAD, VTs, Ops); 5171 ID.AddInteger(VT.getRawBits()); 5172 ID.AddInteger(encodeMemSDNodeFlags(ExtTy, ISD::UNINDEXED, 5173 MMO->isVolatile(), 5174 MMO->isNonTemporal(), 5175 MMO->isInvariant())); 5176 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 5177 void *IP = nullptr; 5178 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 5179 cast<MaskedLoadSDNode>(E)->refineAlignment(MMO); 5180 return SDValue(E, 0); 5181 } 5182 SDNode *N = new (NodeAllocator) MaskedLoadSDNode(dl.getIROrder(), 5183 dl.getDebugLoc(), Ops, 4, VTs, 5184 ExtTy, MemVT, MMO); 5185 CSEMap.InsertNode(N, IP); 5186 InsertNode(N); 5187 return SDValue(N, 0); 5188 } 5189 5190 SDValue SelectionDAG::getMaskedStore(SDValue Chain, SDLoc dl, SDValue Val, 5191 SDValue Ptr, SDValue Mask, EVT MemVT, 5192 MachineMemOperand *MMO, bool isTrunc) { 5193 assert(Chain.getValueType() == MVT::Other && 5194 "Invalid chain type"); 5195 EVT VT = Val.getValueType(); 5196 SDVTList VTs = getVTList(MVT::Other); 5197 SDValue Ops[] = { Chain, Ptr, Mask, Val }; 5198 FoldingSetNodeID ID; 5199 AddNodeIDNode(ID, ISD::MSTORE, VTs, Ops); 5200 ID.AddInteger(VT.getRawBits()); 5201 ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(), 5202 MMO->isNonTemporal(), MMO->isInvariant())); 5203 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 5204 void *IP = nullptr; 5205 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 5206 cast<MaskedStoreSDNode>(E)->refineAlignment(MMO); 5207 return SDValue(E, 0); 5208 } 5209 SDNode *N = new (NodeAllocator) MaskedStoreSDNode(dl.getIROrder(), 5210 dl.getDebugLoc(), Ops, 4, 5211 VTs, isTrunc, MemVT, MMO); 5212 CSEMap.InsertNode(N, IP); 5213 InsertNode(N); 5214 return SDValue(N, 0); 5215 } 5216 5217 SDValue 5218 SelectionDAG::getMaskedGather(SDVTList VTs, EVT VT, SDLoc dl, 5219 ArrayRef<SDValue> Ops, 5220 MachineMemOperand *MMO) { 5221 5222 FoldingSetNodeID ID; 5223 AddNodeIDNode(ID, ISD::MGATHER, VTs, Ops); 5224 ID.AddInteger(VT.getRawBits()); 5225 ID.AddInteger(encodeMemSDNodeFlags(ISD::NON_EXTLOAD, ISD::UNINDEXED, 5226 MMO->isVolatile(), 5227 MMO->isNonTemporal(), 5228 MMO->isInvariant())); 5229 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 5230 void *IP = nullptr; 5231 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 5232 cast<MaskedGatherSDNode>(E)->refineAlignment(MMO); 5233 return SDValue(E, 0); 5234 } 5235 MaskedGatherSDNode *N = 5236 new (NodeAllocator) MaskedGatherSDNode(dl.getIROrder(), dl.getDebugLoc(), 5237 Ops, VTs, VT, MMO); 5238 CSEMap.InsertNode(N, IP); 5239 InsertNode(N); 5240 return SDValue(N, 0); 5241 } 5242 5243 SDValue SelectionDAG::getMaskedScatter(SDVTList VTs, EVT VT, SDLoc dl, 5244 ArrayRef<SDValue> Ops, 5245 MachineMemOperand *MMO) { 5246 FoldingSetNodeID ID; 5247 AddNodeIDNode(ID, ISD::MSCATTER, VTs, Ops); 5248 ID.AddInteger(VT.getRawBits()); 5249 ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(), 5250 MMO->isNonTemporal(), 5251 MMO->isInvariant())); 5252 ID.AddInteger(MMO->getPointerInfo().getAddrSpace()); 5253 void *IP = nullptr; 5254 if (SDNode *E = FindNodeOrInsertPos(ID, dl.getDebugLoc(), IP)) { 5255 cast<MaskedScatterSDNode>(E)->refineAlignment(MMO); 5256 return SDValue(E, 0); 5257 } 5258 SDNode *N = 5259 new (NodeAllocator) MaskedScatterSDNode(dl.getIROrder(), dl.getDebugLoc(), 5260 Ops, VTs, VT, MMO); 5261 CSEMap.InsertNode(N, IP); 5262 InsertNode(N); 5263 return SDValue(N, 0); 5264 } 5265 5266 SDValue SelectionDAG::getVAArg(EVT VT, SDLoc dl, 5267 SDValue Chain, SDValue Ptr, 5268 SDValue SV, 5269 unsigned Align) { 5270 SDValue Ops[] = { Chain, Ptr, SV, getTargetConstant(Align, dl, MVT::i32) }; 5271 return getNode(ISD::VAARG, dl, getVTList(VT, MVT::Other), Ops); 5272 } 5273 5274 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 5275 ArrayRef<SDUse> Ops) { 5276 switch (Ops.size()) { 5277 case 0: return getNode(Opcode, DL, VT); 5278 case 1: return getNode(Opcode, DL, VT, static_cast<const SDValue>(Ops[0])); 5279 case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]); 5280 case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]); 5281 default: break; 5282 } 5283 5284 // Copy from an SDUse array into an SDValue array for use with 5285 // the regular getNode logic. 5286 SmallVector<SDValue, 8> NewOps(Ops.begin(), Ops.end()); 5287 return getNode(Opcode, DL, VT, NewOps); 5288 } 5289 5290 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, EVT VT, 5291 ArrayRef<SDValue> Ops) { 5292 unsigned NumOps = Ops.size(); 5293 switch (NumOps) { 5294 case 0: return getNode(Opcode, DL, VT); 5295 case 1: return getNode(Opcode, DL, VT, Ops[0]); 5296 case 2: return getNode(Opcode, DL, VT, Ops[0], Ops[1]); 5297 case 3: return getNode(Opcode, DL, VT, Ops[0], Ops[1], Ops[2]); 5298 default: break; 5299 } 5300 5301 switch (Opcode) { 5302 default: break; 5303 case ISD::SELECT_CC: { 5304 assert(NumOps == 5 && "SELECT_CC takes 5 operands!"); 5305 assert(Ops[0].getValueType() == Ops[1].getValueType() && 5306 "LHS and RHS of condition must have same type!"); 5307 assert(Ops[2].getValueType() == Ops[3].getValueType() && 5308 "True and False arms of SelectCC must have same type!"); 5309 assert(Ops[2].getValueType() == VT && 5310 "select_cc node must be of same type as true and false value!"); 5311 break; 5312 } 5313 case ISD::BR_CC: { 5314 assert(NumOps == 5 && "BR_CC takes 5 operands!"); 5315 assert(Ops[2].getValueType() == Ops[3].getValueType() && 5316 "LHS/RHS of comparison should match types!"); 5317 break; 5318 } 5319 } 5320 5321 // Memoize nodes. 5322 SDNode *N; 5323 SDVTList VTs = getVTList(VT); 5324 5325 if (VT != MVT::Glue) { 5326 FoldingSetNodeID ID; 5327 AddNodeIDNode(ID, Opcode, VTs, Ops); 5328 void *IP = nullptr; 5329 5330 if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)) 5331 return SDValue(E, 0); 5332 5333 N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), 5334 VTs, Ops); 5335 CSEMap.InsertNode(N, IP); 5336 } else { 5337 N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), 5338 VTs, Ops); 5339 } 5340 5341 InsertNode(N); 5342 return SDValue(N, 0); 5343 } 5344 5345 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, 5346 ArrayRef<EVT> ResultTys, ArrayRef<SDValue> Ops) { 5347 return getNode(Opcode, DL, getVTList(ResultTys), Ops); 5348 } 5349 5350 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5351 ArrayRef<SDValue> Ops) { 5352 if (VTList.NumVTs == 1) 5353 return getNode(Opcode, DL, VTList.VTs[0], Ops); 5354 5355 #if 0 5356 switch (Opcode) { 5357 // FIXME: figure out how to safely handle things like 5358 // int foo(int x) { return 1 << (x & 255); } 5359 // int bar() { return foo(256); } 5360 case ISD::SRA_PARTS: 5361 case ISD::SRL_PARTS: 5362 case ISD::SHL_PARTS: 5363 if (N3.getOpcode() == ISD::SIGN_EXTEND_INREG && 5364 cast<VTSDNode>(N3.getOperand(1))->getVT() != MVT::i1) 5365 return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0)); 5366 else if (N3.getOpcode() == ISD::AND) 5367 if (ConstantSDNode *AndRHS = dyn_cast<ConstantSDNode>(N3.getOperand(1))) { 5368 // If the and is only masking out bits that cannot effect the shift, 5369 // eliminate the and. 5370 unsigned NumBits = VT.getScalarType().getSizeInBits()*2; 5371 if ((AndRHS->getValue() & (NumBits-1)) == NumBits-1) 5372 return getNode(Opcode, DL, VT, N1, N2, N3.getOperand(0)); 5373 } 5374 break; 5375 } 5376 #endif 5377 5378 // Memoize the node unless it returns a flag. 5379 SDNode *N; 5380 unsigned NumOps = Ops.size(); 5381 if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) { 5382 FoldingSetNodeID ID; 5383 AddNodeIDNode(ID, Opcode, VTList, Ops); 5384 void *IP = nullptr; 5385 if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)) 5386 return SDValue(E, 0); 5387 5388 if (NumOps == 1) { 5389 N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(), 5390 DL.getDebugLoc(), VTList, Ops[0]); 5391 } else if (NumOps == 2) { 5392 N = new (NodeAllocator) BinarySDNode(Opcode, DL.getIROrder(), 5393 DL.getDebugLoc(), VTList, Ops[0], 5394 Ops[1]); 5395 } else if (NumOps == 3) { 5396 N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(), 5397 DL.getDebugLoc(), VTList, Ops[0], 5398 Ops[1], Ops[2]); 5399 } else { 5400 N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), 5401 VTList, Ops); 5402 } 5403 CSEMap.InsertNode(N, IP); 5404 } else { 5405 if (NumOps == 1) { 5406 N = new (NodeAllocator) UnarySDNode(Opcode, DL.getIROrder(), 5407 DL.getDebugLoc(), VTList, Ops[0]); 5408 } else if (NumOps == 2) { 5409 N = new (NodeAllocator) BinarySDNode(Opcode, DL.getIROrder(), 5410 DL.getDebugLoc(), VTList, Ops[0], 5411 Ops[1]); 5412 } else if (NumOps == 3) { 5413 N = new (NodeAllocator) TernarySDNode(Opcode, DL.getIROrder(), 5414 DL.getDebugLoc(), VTList, Ops[0], 5415 Ops[1], Ops[2]); 5416 } else { 5417 N = new (NodeAllocator) SDNode(Opcode, DL.getIROrder(), DL.getDebugLoc(), 5418 VTList, Ops); 5419 } 5420 } 5421 InsertNode(N); 5422 return SDValue(N, 0); 5423 } 5424 5425 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList) { 5426 return getNode(Opcode, DL, VTList, None); 5427 } 5428 5429 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5430 SDValue N1) { 5431 SDValue Ops[] = { N1 }; 5432 return getNode(Opcode, DL, VTList, Ops); 5433 } 5434 5435 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5436 SDValue N1, SDValue N2) { 5437 SDValue Ops[] = { N1, N2 }; 5438 return getNode(Opcode, DL, VTList, Ops); 5439 } 5440 5441 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5442 SDValue N1, SDValue N2, SDValue N3) { 5443 SDValue Ops[] = { N1, N2, N3 }; 5444 return getNode(Opcode, DL, VTList, Ops); 5445 } 5446 5447 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5448 SDValue N1, SDValue N2, SDValue N3, 5449 SDValue N4) { 5450 SDValue Ops[] = { N1, N2, N3, N4 }; 5451 return getNode(Opcode, DL, VTList, Ops); 5452 } 5453 5454 SDValue SelectionDAG::getNode(unsigned Opcode, SDLoc DL, SDVTList VTList, 5455 SDValue N1, SDValue N2, SDValue N3, 5456 SDValue N4, SDValue N5) { 5457 SDValue Ops[] = { N1, N2, N3, N4, N5 }; 5458 return getNode(Opcode, DL, VTList, Ops); 5459 } 5460 5461 SDVTList SelectionDAG::getVTList(EVT VT) { 5462 return makeVTList(SDNode::getValueTypeList(VT), 1); 5463 } 5464 5465 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2) { 5466 FoldingSetNodeID ID; 5467 ID.AddInteger(2U); 5468 ID.AddInteger(VT1.getRawBits()); 5469 ID.AddInteger(VT2.getRawBits()); 5470 5471 void *IP = nullptr; 5472 SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP); 5473 if (!Result) { 5474 EVT *Array = Allocator.Allocate<EVT>(2); 5475 Array[0] = VT1; 5476 Array[1] = VT2; 5477 Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 2); 5478 VTListMap.InsertNode(Result, IP); 5479 } 5480 return Result->getSDVTList(); 5481 } 5482 5483 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3) { 5484 FoldingSetNodeID ID; 5485 ID.AddInteger(3U); 5486 ID.AddInteger(VT1.getRawBits()); 5487 ID.AddInteger(VT2.getRawBits()); 5488 ID.AddInteger(VT3.getRawBits()); 5489 5490 void *IP = nullptr; 5491 SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP); 5492 if (!Result) { 5493 EVT *Array = Allocator.Allocate<EVT>(3); 5494 Array[0] = VT1; 5495 Array[1] = VT2; 5496 Array[2] = VT3; 5497 Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 3); 5498 VTListMap.InsertNode(Result, IP); 5499 } 5500 return Result->getSDVTList(); 5501 } 5502 5503 SDVTList SelectionDAG::getVTList(EVT VT1, EVT VT2, EVT VT3, EVT VT4) { 5504 FoldingSetNodeID ID; 5505 ID.AddInteger(4U); 5506 ID.AddInteger(VT1.getRawBits()); 5507 ID.AddInteger(VT2.getRawBits()); 5508 ID.AddInteger(VT3.getRawBits()); 5509 ID.AddInteger(VT4.getRawBits()); 5510 5511 void *IP = nullptr; 5512 SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP); 5513 if (!Result) { 5514 EVT *Array = Allocator.Allocate<EVT>(4); 5515 Array[0] = VT1; 5516 Array[1] = VT2; 5517 Array[2] = VT3; 5518 Array[3] = VT4; 5519 Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, 4); 5520 VTListMap.InsertNode(Result, IP); 5521 } 5522 return Result->getSDVTList(); 5523 } 5524 5525 SDVTList SelectionDAG::getVTList(ArrayRef<EVT> VTs) { 5526 unsigned NumVTs = VTs.size(); 5527 FoldingSetNodeID ID; 5528 ID.AddInteger(NumVTs); 5529 for (unsigned index = 0; index < NumVTs; index++) { 5530 ID.AddInteger(VTs[index].getRawBits()); 5531 } 5532 5533 void *IP = nullptr; 5534 SDVTListNode *Result = VTListMap.FindNodeOrInsertPos(ID, IP); 5535 if (!Result) { 5536 EVT *Array = Allocator.Allocate<EVT>(NumVTs); 5537 std::copy(VTs.begin(), VTs.end(), Array); 5538 Result = new (Allocator) SDVTListNode(ID.Intern(Allocator), Array, NumVTs); 5539 VTListMap.InsertNode(Result, IP); 5540 } 5541 return Result->getSDVTList(); 5542 } 5543 5544 5545 /// UpdateNodeOperands - *Mutate* the specified node in-place to have the 5546 /// specified operands. If the resultant node already exists in the DAG, 5547 /// this does not modify the specified node, instead it returns the node that 5548 /// already exists. If the resultant node does not exist in the DAG, the 5549 /// input node is returned. As a degenerate case, if you specify the same 5550 /// input operands as the node already has, the input node is returned. 5551 SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op) { 5552 assert(N->getNumOperands() == 1 && "Update with wrong number of operands"); 5553 5554 // Check to see if there is no change. 5555 if (Op == N->getOperand(0)) return N; 5556 5557 // See if the modified node already exists. 5558 void *InsertPos = nullptr; 5559 if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos)) 5560 return Existing; 5561 5562 // Nope it doesn't. Remove the node from its current place in the maps. 5563 if (InsertPos) 5564 if (!RemoveNodeFromCSEMaps(N)) 5565 InsertPos = nullptr; 5566 5567 // Now we update the operands. 5568 N->OperandList[0].set(Op); 5569 5570 // If this gets put into a CSE map, add it. 5571 if (InsertPos) CSEMap.InsertNode(N, InsertPos); 5572 return N; 5573 } 5574 5575 SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2) { 5576 assert(N->getNumOperands() == 2 && "Update with wrong number of operands"); 5577 5578 // Check to see if there is no change. 5579 if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1)) 5580 return N; // No operands changed, just return the input node. 5581 5582 // See if the modified node already exists. 5583 void *InsertPos = nullptr; 5584 if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos)) 5585 return Existing; 5586 5587 // Nope it doesn't. Remove the node from its current place in the maps. 5588 if (InsertPos) 5589 if (!RemoveNodeFromCSEMaps(N)) 5590 InsertPos = nullptr; 5591 5592 // Now we update the operands. 5593 if (N->OperandList[0] != Op1) 5594 N->OperandList[0].set(Op1); 5595 if (N->OperandList[1] != Op2) 5596 N->OperandList[1].set(Op2); 5597 5598 // If this gets put into a CSE map, add it. 5599 if (InsertPos) CSEMap.InsertNode(N, InsertPos); 5600 return N; 5601 } 5602 5603 SDNode *SelectionDAG:: 5604 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, SDValue Op3) { 5605 SDValue Ops[] = { Op1, Op2, Op3 }; 5606 return UpdateNodeOperands(N, Ops); 5607 } 5608 5609 SDNode *SelectionDAG:: 5610 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, 5611 SDValue Op3, SDValue Op4) { 5612 SDValue Ops[] = { Op1, Op2, Op3, Op4 }; 5613 return UpdateNodeOperands(N, Ops); 5614 } 5615 5616 SDNode *SelectionDAG:: 5617 UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, 5618 SDValue Op3, SDValue Op4, SDValue Op5) { 5619 SDValue Ops[] = { Op1, Op2, Op3, Op4, Op5 }; 5620 return UpdateNodeOperands(N, Ops); 5621 } 5622 5623 SDNode *SelectionDAG:: 5624 UpdateNodeOperands(SDNode *N, ArrayRef<SDValue> Ops) { 5625 unsigned NumOps = Ops.size(); 5626 assert(N->getNumOperands() == NumOps && 5627 "Update with wrong number of operands"); 5628 5629 // If no operands changed just return the input node. 5630 if (Ops.empty() || std::equal(Ops.begin(), Ops.end(), N->op_begin())) 5631 return N; 5632 5633 // See if the modified node already exists. 5634 void *InsertPos = nullptr; 5635 if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, InsertPos)) 5636 return Existing; 5637 5638 // Nope it doesn't. Remove the node from its current place in the maps. 5639 if (InsertPos) 5640 if (!RemoveNodeFromCSEMaps(N)) 5641 InsertPos = nullptr; 5642 5643 // Now we update the operands. 5644 for (unsigned i = 0; i != NumOps; ++i) 5645 if (N->OperandList[i] != Ops[i]) 5646 N->OperandList[i].set(Ops[i]); 5647 5648 // If this gets put into a CSE map, add it. 5649 if (InsertPos) CSEMap.InsertNode(N, InsertPos); 5650 return N; 5651 } 5652 5653 /// DropOperands - Release the operands and set this node to have 5654 /// zero operands. 5655 void SDNode::DropOperands() { 5656 // Unlike the code in MorphNodeTo that does this, we don't need to 5657 // watch for dead nodes here. 5658 for (op_iterator I = op_begin(), E = op_end(); I != E; ) { 5659 SDUse &Use = *I++; 5660 Use.set(SDValue()); 5661 } 5662 } 5663 5664 /// SelectNodeTo - These are wrappers around MorphNodeTo that accept a 5665 /// machine opcode. 5666 /// 5667 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5668 EVT VT) { 5669 SDVTList VTs = getVTList(VT); 5670 return SelectNodeTo(N, MachineOpc, VTs, None); 5671 } 5672 5673 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5674 EVT VT, SDValue Op1) { 5675 SDVTList VTs = getVTList(VT); 5676 SDValue Ops[] = { Op1 }; 5677 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5678 } 5679 5680 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5681 EVT VT, SDValue Op1, 5682 SDValue Op2) { 5683 SDVTList VTs = getVTList(VT); 5684 SDValue Ops[] = { Op1, Op2 }; 5685 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5686 } 5687 5688 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5689 EVT VT, SDValue Op1, 5690 SDValue Op2, SDValue Op3) { 5691 SDVTList VTs = getVTList(VT); 5692 SDValue Ops[] = { Op1, Op2, Op3 }; 5693 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5694 } 5695 5696 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5697 EVT VT, ArrayRef<SDValue> Ops) { 5698 SDVTList VTs = getVTList(VT); 5699 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5700 } 5701 5702 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5703 EVT VT1, EVT VT2, ArrayRef<SDValue> Ops) { 5704 SDVTList VTs = getVTList(VT1, VT2); 5705 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5706 } 5707 5708 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5709 EVT VT1, EVT VT2) { 5710 SDVTList VTs = getVTList(VT1, VT2); 5711 return SelectNodeTo(N, MachineOpc, VTs, None); 5712 } 5713 5714 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5715 EVT VT1, EVT VT2, EVT VT3, 5716 ArrayRef<SDValue> Ops) { 5717 SDVTList VTs = getVTList(VT1, VT2, VT3); 5718 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5719 } 5720 5721 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5722 EVT VT1, EVT VT2, EVT VT3, EVT VT4, 5723 ArrayRef<SDValue> Ops) { 5724 SDVTList VTs = getVTList(VT1, VT2, VT3, VT4); 5725 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5726 } 5727 5728 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5729 EVT VT1, EVT VT2, 5730 SDValue Op1) { 5731 SDVTList VTs = getVTList(VT1, VT2); 5732 SDValue Ops[] = { Op1 }; 5733 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5734 } 5735 5736 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5737 EVT VT1, EVT VT2, 5738 SDValue Op1, SDValue Op2) { 5739 SDVTList VTs = getVTList(VT1, VT2); 5740 SDValue Ops[] = { Op1, Op2 }; 5741 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5742 } 5743 5744 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5745 EVT VT1, EVT VT2, 5746 SDValue Op1, SDValue Op2, 5747 SDValue Op3) { 5748 SDVTList VTs = getVTList(VT1, VT2); 5749 SDValue Ops[] = { Op1, Op2, Op3 }; 5750 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5751 } 5752 5753 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5754 EVT VT1, EVT VT2, EVT VT3, 5755 SDValue Op1, SDValue Op2, 5756 SDValue Op3) { 5757 SDVTList VTs = getVTList(VT1, VT2, VT3); 5758 SDValue Ops[] = { Op1, Op2, Op3 }; 5759 return SelectNodeTo(N, MachineOpc, VTs, Ops); 5760 } 5761 5762 SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, 5763 SDVTList VTs,ArrayRef<SDValue> Ops) { 5764 N = MorphNodeTo(N, ~MachineOpc, VTs, Ops); 5765 // Reset the NodeID to -1. 5766 N->setNodeId(-1); 5767 return N; 5768 } 5769 5770 /// UpdadeSDLocOnMergedSDNode - If the opt level is -O0 then it throws away 5771 /// the line number information on the merged node since it is not possible to 5772 /// preserve the information that operation is associated with multiple lines. 5773 /// This will make the debugger working better at -O0, were there is a higher 5774 /// probability having other instructions associated with that line. 5775 /// 5776 /// For IROrder, we keep the smaller of the two 5777 SDNode *SelectionDAG::UpdadeSDLocOnMergedSDNode(SDNode *N, SDLoc OLoc) { 5778 DebugLoc NLoc = N->getDebugLoc(); 5779 if (NLoc && OptLevel == CodeGenOpt::None && OLoc.getDebugLoc() != NLoc) { 5780 N->setDebugLoc(DebugLoc()); 5781 } 5782 unsigned Order = std::min(N->getIROrder(), OLoc.getIROrder()); 5783 N->setIROrder(Order); 5784 return N; 5785 } 5786 5787 /// MorphNodeTo - This *mutates* the specified node to have the specified 5788 /// return type, opcode, and operands. 5789 /// 5790 /// Note that MorphNodeTo returns the resultant node. If there is already a 5791 /// node of the specified opcode and operands, it returns that node instead of 5792 /// the current one. Note that the SDLoc need not be the same. 5793 /// 5794 /// Using MorphNodeTo is faster than creating a new node and swapping it in 5795 /// with ReplaceAllUsesWith both because it often avoids allocating a new 5796 /// node, and because it doesn't require CSE recalculation for any of 5797 /// the node's users. 5798 /// 5799 /// However, note that MorphNodeTo recursively deletes dead nodes from the DAG. 5800 /// As a consequence it isn't appropriate to use from within the DAG combiner or 5801 /// the legalizer which maintain worklists that would need to be updated when 5802 /// deleting things. 5803 SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc, 5804 SDVTList VTs, ArrayRef<SDValue> Ops) { 5805 unsigned NumOps = Ops.size(); 5806 // If an identical node already exists, use it. 5807 void *IP = nullptr; 5808 if (VTs.VTs[VTs.NumVTs-1] != MVT::Glue) { 5809 FoldingSetNodeID ID; 5810 AddNodeIDNode(ID, Opc, VTs, Ops); 5811 if (SDNode *ON = FindNodeOrInsertPos(ID, N->getDebugLoc(), IP)) 5812 return UpdadeSDLocOnMergedSDNode(ON, SDLoc(N)); 5813 } 5814 5815 if (!RemoveNodeFromCSEMaps(N)) 5816 IP = nullptr; 5817 5818 // Start the morphing. 5819 N->NodeType = Opc; 5820 N->ValueList = VTs.VTs; 5821 N->NumValues = VTs.NumVTs; 5822 5823 // Clear the operands list, updating used nodes to remove this from their 5824 // use list. Keep track of any operands that become dead as a result. 5825 SmallPtrSet<SDNode*, 16> DeadNodeSet; 5826 for (SDNode::op_iterator I = N->op_begin(), E = N->op_end(); I != E; ) { 5827 SDUse &Use = *I++; 5828 SDNode *Used = Use.getNode(); 5829 Use.set(SDValue()); 5830 if (Used->use_empty()) 5831 DeadNodeSet.insert(Used); 5832 } 5833 5834 if (MachineSDNode *MN = dyn_cast<MachineSDNode>(N)) { 5835 // Initialize the memory references information. 5836 MN->setMemRefs(nullptr, nullptr); 5837 // If NumOps is larger than the # of operands we can have in a 5838 // MachineSDNode, reallocate the operand list. 5839 if (NumOps > MN->NumOperands || !MN->OperandsNeedDelete) { 5840 if (MN->OperandsNeedDelete) 5841 delete[] MN->OperandList; 5842 if (NumOps > array_lengthof(MN->LocalOperands)) 5843 // We're creating a final node that will live unmorphed for the 5844 // remainder of the current SelectionDAG iteration, so we can allocate 5845 // the operands directly out of a pool with no recycling metadata. 5846 MN->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps), 5847 Ops.data(), NumOps); 5848 else 5849 MN->InitOperands(MN->LocalOperands, Ops.data(), NumOps); 5850 MN->OperandsNeedDelete = false; 5851 } else 5852 MN->InitOperands(MN->OperandList, Ops.data(), NumOps); 5853 } else { 5854 // If NumOps is larger than the # of operands we currently have, reallocate 5855 // the operand list. 5856 if (NumOps > N->NumOperands) { 5857 if (N->OperandsNeedDelete) 5858 delete[] N->OperandList; 5859 N->InitOperands(new SDUse[NumOps], Ops.data(), NumOps); 5860 N->OperandsNeedDelete = true; 5861 } else 5862 N->InitOperands(N->OperandList, Ops.data(), NumOps); 5863 } 5864 5865 // Delete any nodes that are still dead after adding the uses for the 5866 // new operands. 5867 if (!DeadNodeSet.empty()) { 5868 SmallVector<SDNode *, 16> DeadNodes; 5869 for (SDNode *N : DeadNodeSet) 5870 if (N->use_empty()) 5871 DeadNodes.push_back(N); 5872 RemoveDeadNodes(DeadNodes); 5873 } 5874 5875 if (IP) 5876 CSEMap.InsertNode(N, IP); // Memoize the new node. 5877 return N; 5878 } 5879 5880 5881 /// getMachineNode - These are used for target selectors to create a new node 5882 /// with specified return type(s), MachineInstr opcode, and operands. 5883 /// 5884 /// Note that getMachineNode returns the resultant node. If there is already a 5885 /// node of the specified opcode and operands, it returns that node instead of 5886 /// the current one. 5887 MachineSDNode * 5888 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT) { 5889 SDVTList VTs = getVTList(VT); 5890 return getMachineNode(Opcode, dl, VTs, None); 5891 } 5892 5893 MachineSDNode * 5894 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, SDValue Op1) { 5895 SDVTList VTs = getVTList(VT); 5896 SDValue Ops[] = { Op1 }; 5897 return getMachineNode(Opcode, dl, VTs, Ops); 5898 } 5899 5900 MachineSDNode * 5901 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, 5902 SDValue Op1, SDValue Op2) { 5903 SDVTList VTs = getVTList(VT); 5904 SDValue Ops[] = { Op1, Op2 }; 5905 return getMachineNode(Opcode, dl, VTs, Ops); 5906 } 5907 5908 MachineSDNode * 5909 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, 5910 SDValue Op1, SDValue Op2, SDValue Op3) { 5911 SDVTList VTs = getVTList(VT); 5912 SDValue Ops[] = { Op1, Op2, Op3 }; 5913 return getMachineNode(Opcode, dl, VTs, Ops); 5914 } 5915 5916 MachineSDNode * 5917 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT, 5918 ArrayRef<SDValue> Ops) { 5919 SDVTList VTs = getVTList(VT); 5920 return getMachineNode(Opcode, dl, VTs, Ops); 5921 } 5922 5923 MachineSDNode * 5924 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT1, EVT VT2) { 5925 SDVTList VTs = getVTList(VT1, VT2); 5926 return getMachineNode(Opcode, dl, VTs, None); 5927 } 5928 5929 MachineSDNode * 5930 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5931 EVT VT1, EVT VT2, SDValue Op1) { 5932 SDVTList VTs = getVTList(VT1, VT2); 5933 SDValue Ops[] = { Op1 }; 5934 return getMachineNode(Opcode, dl, VTs, Ops); 5935 } 5936 5937 MachineSDNode * 5938 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5939 EVT VT1, EVT VT2, SDValue Op1, SDValue Op2) { 5940 SDVTList VTs = getVTList(VT1, VT2); 5941 SDValue Ops[] = { Op1, Op2 }; 5942 return getMachineNode(Opcode, dl, VTs, Ops); 5943 } 5944 5945 MachineSDNode * 5946 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5947 EVT VT1, EVT VT2, SDValue Op1, 5948 SDValue Op2, SDValue Op3) { 5949 SDVTList VTs = getVTList(VT1, VT2); 5950 SDValue Ops[] = { Op1, Op2, Op3 }; 5951 return getMachineNode(Opcode, dl, VTs, Ops); 5952 } 5953 5954 MachineSDNode * 5955 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5956 EVT VT1, EVT VT2, 5957 ArrayRef<SDValue> Ops) { 5958 SDVTList VTs = getVTList(VT1, VT2); 5959 return getMachineNode(Opcode, dl, VTs, Ops); 5960 } 5961 5962 MachineSDNode * 5963 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5964 EVT VT1, EVT VT2, EVT VT3, 5965 SDValue Op1, SDValue Op2) { 5966 SDVTList VTs = getVTList(VT1, VT2, VT3); 5967 SDValue Ops[] = { Op1, Op2 }; 5968 return getMachineNode(Opcode, dl, VTs, Ops); 5969 } 5970 5971 MachineSDNode * 5972 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5973 EVT VT1, EVT VT2, EVT VT3, 5974 SDValue Op1, SDValue Op2, SDValue Op3) { 5975 SDVTList VTs = getVTList(VT1, VT2, VT3); 5976 SDValue Ops[] = { Op1, Op2, Op3 }; 5977 return getMachineNode(Opcode, dl, VTs, Ops); 5978 } 5979 5980 MachineSDNode * 5981 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5982 EVT VT1, EVT VT2, EVT VT3, 5983 ArrayRef<SDValue> Ops) { 5984 SDVTList VTs = getVTList(VT1, VT2, VT3); 5985 return getMachineNode(Opcode, dl, VTs, Ops); 5986 } 5987 5988 MachineSDNode * 5989 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, EVT VT1, 5990 EVT VT2, EVT VT3, EVT VT4, 5991 ArrayRef<SDValue> Ops) { 5992 SDVTList VTs = getVTList(VT1, VT2, VT3, VT4); 5993 return getMachineNode(Opcode, dl, VTs, Ops); 5994 } 5995 5996 MachineSDNode * 5997 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc dl, 5998 ArrayRef<EVT> ResultTys, 5999 ArrayRef<SDValue> Ops) { 6000 SDVTList VTs = getVTList(ResultTys); 6001 return getMachineNode(Opcode, dl, VTs, Ops); 6002 } 6003 6004 MachineSDNode * 6005 SelectionDAG::getMachineNode(unsigned Opcode, SDLoc DL, SDVTList VTs, 6006 ArrayRef<SDValue> OpsArray) { 6007 bool DoCSE = VTs.VTs[VTs.NumVTs-1] != MVT::Glue; 6008 MachineSDNode *N; 6009 void *IP = nullptr; 6010 const SDValue *Ops = OpsArray.data(); 6011 unsigned NumOps = OpsArray.size(); 6012 6013 if (DoCSE) { 6014 FoldingSetNodeID ID; 6015 AddNodeIDNode(ID, ~Opcode, VTs, OpsArray); 6016 IP = nullptr; 6017 if (SDNode *E = FindNodeOrInsertPos(ID, DL.getDebugLoc(), IP)) { 6018 return cast<MachineSDNode>(UpdadeSDLocOnMergedSDNode(E, DL)); 6019 } 6020 } 6021 6022 // Allocate a new MachineSDNode. 6023 N = new (NodeAllocator) MachineSDNode(~Opcode, DL.getIROrder(), 6024 DL.getDebugLoc(), VTs); 6025 6026 // Initialize the operands list. 6027 if (NumOps > array_lengthof(N->LocalOperands)) 6028 // We're creating a final node that will live unmorphed for the 6029 // remainder of the current SelectionDAG iteration, so we can allocate 6030 // the operands directly out of a pool with no recycling metadata. 6031 N->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps), 6032 Ops, NumOps); 6033 else 6034 N->InitOperands(N->LocalOperands, Ops, NumOps); 6035 N->OperandsNeedDelete = false; 6036 6037 if (DoCSE) 6038 CSEMap.InsertNode(N, IP); 6039 6040 InsertNode(N); 6041 return N; 6042 } 6043 6044 /// getTargetExtractSubreg - A convenience function for creating 6045 /// TargetOpcode::EXTRACT_SUBREG nodes. 6046 SDValue 6047 SelectionDAG::getTargetExtractSubreg(int SRIdx, SDLoc DL, EVT VT, 6048 SDValue Operand) { 6049 SDValue SRIdxVal = getTargetConstant(SRIdx, DL, MVT::i32); 6050 SDNode *Subreg = getMachineNode(TargetOpcode::EXTRACT_SUBREG, DL, 6051 VT, Operand, SRIdxVal); 6052 return SDValue(Subreg, 0); 6053 } 6054 6055 /// getTargetInsertSubreg - A convenience function for creating 6056 /// TargetOpcode::INSERT_SUBREG nodes. 6057 SDValue 6058 SelectionDAG::getTargetInsertSubreg(int SRIdx, SDLoc DL, EVT VT, 6059 SDValue Operand, SDValue Subreg) { 6060 SDValue SRIdxVal = getTargetConstant(SRIdx, DL, MVT::i32); 6061 SDNode *Result = getMachineNode(TargetOpcode::INSERT_SUBREG, DL, 6062 VT, Operand, Subreg, SRIdxVal); 6063 return SDValue(Result, 0); 6064 } 6065 6066 /// getNodeIfExists - Get the specified node if it's already available, or 6067 /// else return NULL. 6068 SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList, 6069 ArrayRef<SDValue> Ops, bool nuw, bool nsw, 6070 bool exact) { 6071 if (VTList.VTs[VTList.NumVTs - 1] != MVT::Glue) { 6072 FoldingSetNodeID ID; 6073 AddNodeIDNode(ID, Opcode, VTList, Ops); 6074 if (isBinOpWithFlags(Opcode)) 6075 AddBinaryNodeIDCustom(ID, nuw, nsw, exact); 6076 void *IP = nullptr; 6077 if (SDNode *E = FindNodeOrInsertPos(ID, DebugLoc(), IP)) 6078 return E; 6079 } 6080 return nullptr; 6081 } 6082 6083 /// getDbgValue - Creates a SDDbgValue node. 6084 /// 6085 /// SDNode 6086 SDDbgValue *SelectionDAG::getDbgValue(MDNode *Var, MDNode *Expr, SDNode *N, 6087 unsigned R, bool IsIndirect, uint64_t Off, 6088 DebugLoc DL, unsigned O) { 6089 assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) && 6090 "Expected inlined-at fields to agree"); 6091 return new (DbgInfo->getAlloc()) 6092 SDDbgValue(Var, Expr, N, R, IsIndirect, Off, DL, O); 6093 } 6094 6095 /// Constant 6096 SDDbgValue *SelectionDAG::getConstantDbgValue(MDNode *Var, MDNode *Expr, 6097 const Value *C, uint64_t Off, 6098 DebugLoc DL, unsigned O) { 6099 assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) && 6100 "Expected inlined-at fields to agree"); 6101 return new (DbgInfo->getAlloc()) SDDbgValue(Var, Expr, C, Off, DL, O); 6102 } 6103 6104 /// FrameIndex 6105 SDDbgValue *SelectionDAG::getFrameIndexDbgValue(MDNode *Var, MDNode *Expr, 6106 unsigned FI, uint64_t Off, 6107 DebugLoc DL, unsigned O) { 6108 assert(cast<DILocalVariable>(Var)->isValidLocationForIntrinsic(DL) && 6109 "Expected inlined-at fields to agree"); 6110 return new (DbgInfo->getAlloc()) SDDbgValue(Var, Expr, FI, Off, DL, O); 6111 } 6112 6113 namespace { 6114 6115 /// RAUWUpdateListener - Helper for ReplaceAllUsesWith - When the node 6116 /// pointed to by a use iterator is deleted, increment the use iterator 6117 /// so that it doesn't dangle. 6118 /// 6119 class RAUWUpdateListener : public SelectionDAG::DAGUpdateListener { 6120 SDNode::use_iterator &UI; 6121 SDNode::use_iterator &UE; 6122 6123 void NodeDeleted(SDNode *N, SDNode *E) override { 6124 // Increment the iterator as needed. 6125 while (UI != UE && N == *UI) 6126 ++UI; 6127 } 6128 6129 public: 6130 RAUWUpdateListener(SelectionDAG &d, 6131 SDNode::use_iterator &ui, 6132 SDNode::use_iterator &ue) 6133 : SelectionDAG::DAGUpdateListener(d), UI(ui), UE(ue) {} 6134 }; 6135 6136 } 6137 6138 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead. 6139 /// This can cause recursive merging of nodes in the DAG. 6140 /// 6141 /// This version assumes From has a single result value. 6142 /// 6143 void SelectionDAG::ReplaceAllUsesWith(SDValue FromN, SDValue To) { 6144 SDNode *From = FromN.getNode(); 6145 assert(From->getNumValues() == 1 && FromN.getResNo() == 0 && 6146 "Cannot replace with this method!"); 6147 assert(From != To.getNode() && "Cannot replace uses of with self"); 6148 6149 // Iterate over all the existing uses of From. New uses will be added 6150 // to the beginning of the use list, which we avoid visiting. 6151 // This specifically avoids visiting uses of From that arise while the 6152 // replacement is happening, because any such uses would be the result 6153 // of CSE: If an existing node looks like From after one of its operands 6154 // is replaced by To, we don't want to replace of all its users with To 6155 // too. See PR3018 for more info. 6156 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end(); 6157 RAUWUpdateListener Listener(*this, UI, UE); 6158 while (UI != UE) { 6159 SDNode *User = *UI; 6160 6161 // This node is about to morph, remove its old self from the CSE maps. 6162 RemoveNodeFromCSEMaps(User); 6163 6164 // A user can appear in a use list multiple times, and when this 6165 // happens the uses are usually next to each other in the list. 6166 // To help reduce the number of CSE recomputations, process all 6167 // the uses of this user that we can find this way. 6168 do { 6169 SDUse &Use = UI.getUse(); 6170 ++UI; 6171 Use.set(To); 6172 } while (UI != UE && *UI == User); 6173 6174 // Now that we have modified User, add it back to the CSE maps. If it 6175 // already exists there, recursively merge the results together. 6176 AddModifiedNodeToCSEMaps(User); 6177 } 6178 6179 // If we just RAUW'd the root, take note. 6180 if (FromN == getRoot()) 6181 setRoot(To); 6182 } 6183 6184 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead. 6185 /// This can cause recursive merging of nodes in the DAG. 6186 /// 6187 /// This version assumes that for each value of From, there is a 6188 /// corresponding value in To in the same position with the same type. 6189 /// 6190 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, SDNode *To) { 6191 #ifndef NDEBUG 6192 for (unsigned i = 0, e = From->getNumValues(); i != e; ++i) 6193 assert((!From->hasAnyUseOfValue(i) || 6194 From->getValueType(i) == To->getValueType(i)) && 6195 "Cannot use this version of ReplaceAllUsesWith!"); 6196 #endif 6197 6198 // Handle the trivial case. 6199 if (From == To) 6200 return; 6201 6202 // Iterate over just the existing users of From. See the comments in 6203 // the ReplaceAllUsesWith above. 6204 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end(); 6205 RAUWUpdateListener Listener(*this, UI, UE); 6206 while (UI != UE) { 6207 SDNode *User = *UI; 6208 6209 // This node is about to morph, remove its old self from the CSE maps. 6210 RemoveNodeFromCSEMaps(User); 6211 6212 // A user can appear in a use list multiple times, and when this 6213 // happens the uses are usually next to each other in the list. 6214 // To help reduce the number of CSE recomputations, process all 6215 // the uses of this user that we can find this way. 6216 do { 6217 SDUse &Use = UI.getUse(); 6218 ++UI; 6219 Use.setNode(To); 6220 } while (UI != UE && *UI == User); 6221 6222 // Now that we have modified User, add it back to the CSE maps. If it 6223 // already exists there, recursively merge the results together. 6224 AddModifiedNodeToCSEMaps(User); 6225 } 6226 6227 // If we just RAUW'd the root, take note. 6228 if (From == getRoot().getNode()) 6229 setRoot(SDValue(To, getRoot().getResNo())); 6230 } 6231 6232 /// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead. 6233 /// This can cause recursive merging of nodes in the DAG. 6234 /// 6235 /// This version can replace From with any result values. To must match the 6236 /// number and types of values returned by From. 6237 void SelectionDAG::ReplaceAllUsesWith(SDNode *From, const SDValue *To) { 6238 if (From->getNumValues() == 1) // Handle the simple case efficiently. 6239 return ReplaceAllUsesWith(SDValue(From, 0), To[0]); 6240 6241 // Iterate over just the existing users of From. See the comments in 6242 // the ReplaceAllUsesWith above. 6243 SDNode::use_iterator UI = From->use_begin(), UE = From->use_end(); 6244 RAUWUpdateListener Listener(*this, UI, UE); 6245 while (UI != UE) { 6246 SDNode *User = *UI; 6247 6248 // This node is about to morph, remove its old self from the CSE maps. 6249 RemoveNodeFromCSEMaps(User); 6250 6251 // A user can appear in a use list multiple times, and when this 6252 // happens the uses are usually next to each other in the list. 6253 // To help reduce the number of CSE recomputations, process all 6254 // the uses of this user that we can find this way. 6255 do { 6256 SDUse &Use = UI.getUse(); 6257 const SDValue &ToOp = To[Use.getResNo()]; 6258 ++UI; 6259 Use.set(ToOp); 6260 } while (UI != UE && *UI == User); 6261 6262 // Now that we have modified User, add it back to the CSE maps. If it 6263 // already exists there, recursively merge the results together. 6264 AddModifiedNodeToCSEMaps(User); 6265 } 6266 6267 // If we just RAUW'd the root, take note. 6268 if (From == getRoot().getNode()) 6269 setRoot(SDValue(To[getRoot().getResNo()])); 6270 } 6271 6272 /// ReplaceAllUsesOfValueWith - Replace any uses of From with To, leaving 6273 /// uses of other values produced by From.getNode() alone. The Deleted 6274 /// vector is handled the same way as for ReplaceAllUsesWith. 6275 void SelectionDAG::ReplaceAllUsesOfValueWith(SDValue From, SDValue To){ 6276 // Handle the really simple, really trivial case efficiently. 6277 if (From == To) return; 6278 6279 // Handle the simple, trivial, case efficiently. 6280 if (From.getNode()->getNumValues() == 1) { 6281 ReplaceAllUsesWith(From, To); 6282 return; 6283 } 6284 6285 // Iterate over just the existing users of From. See the comments in 6286 // the ReplaceAllUsesWith above. 6287 SDNode::use_iterator UI = From.getNode()->use_begin(), 6288 UE = From.getNode()->use_end(); 6289 RAUWUpdateListener Listener(*this, UI, UE); 6290 while (UI != UE) { 6291 SDNode *User = *UI; 6292 bool UserRemovedFromCSEMaps = false; 6293 6294 // A user can appear in a use list multiple times, and when this 6295 // happens the uses are usually next to each other in the list. 6296 // To help reduce the number of CSE recomputations, process all 6297 // the uses of this user that we can find this way. 6298 do { 6299 SDUse &Use = UI.getUse(); 6300 6301 // Skip uses of different values from the same node. 6302 if (Use.getResNo() != From.getResNo()) { 6303 ++UI; 6304 continue; 6305 } 6306 6307 // If this node hasn't been modified yet, it's still in the CSE maps, 6308 // so remove its old self from the CSE maps. 6309 if (!UserRemovedFromCSEMaps) { 6310 RemoveNodeFromCSEMaps(User); 6311 UserRemovedFromCSEMaps = true; 6312 } 6313 6314 ++UI; 6315 Use.set(To); 6316 } while (UI != UE && *UI == User); 6317 6318 // We are iterating over all uses of the From node, so if a use 6319 // doesn't use the specific value, no changes are made. 6320 if (!UserRemovedFromCSEMaps) 6321 continue; 6322 6323 // Now that we have modified User, add it back to the CSE maps. If it 6324 // already exists there, recursively merge the results together. 6325 AddModifiedNodeToCSEMaps(User); 6326 } 6327 6328 // If we just RAUW'd the root, take note. 6329 if (From == getRoot()) 6330 setRoot(To); 6331 } 6332 6333 namespace { 6334 /// UseMemo - This class is used by SelectionDAG::ReplaceAllUsesOfValuesWith 6335 /// to record information about a use. 6336 struct UseMemo { 6337 SDNode *User; 6338 unsigned Index; 6339 SDUse *Use; 6340 }; 6341 6342 /// operator< - Sort Memos by User. 6343 bool operator<(const UseMemo &L, const UseMemo &R) { 6344 return (intptr_t)L.User < (intptr_t)R.User; 6345 } 6346 } 6347 6348 /// ReplaceAllUsesOfValuesWith - Replace any uses of From with To, leaving 6349 /// uses of other values produced by From.getNode() alone. The same value 6350 /// may appear in both the From and To list. The Deleted vector is 6351 /// handled the same way as for ReplaceAllUsesWith. 6352 void SelectionDAG::ReplaceAllUsesOfValuesWith(const SDValue *From, 6353 const SDValue *To, 6354 unsigned Num){ 6355 // Handle the simple, trivial case efficiently. 6356 if (Num == 1) 6357 return ReplaceAllUsesOfValueWith(*From, *To); 6358 6359 // Read up all the uses and make records of them. This helps 6360 // processing new uses that are introduced during the 6361 // replacement process. 6362 SmallVector<UseMemo, 4> Uses; 6363 for (unsigned i = 0; i != Num; ++i) { 6364 unsigned FromResNo = From[i].getResNo(); 6365 SDNode *FromNode = From[i].getNode(); 6366 for (SDNode::use_iterator UI = FromNode->use_begin(), 6367 E = FromNode->use_end(); UI != E; ++UI) { 6368 SDUse &Use = UI.getUse(); 6369 if (Use.getResNo() == FromResNo) { 6370 UseMemo Memo = { *UI, i, &Use }; 6371 Uses.push_back(Memo); 6372 } 6373 } 6374 } 6375 6376 // Sort the uses, so that all the uses from a given User are together. 6377 std::sort(Uses.begin(), Uses.end()); 6378 6379 for (unsigned UseIndex = 0, UseIndexEnd = Uses.size(); 6380 UseIndex != UseIndexEnd; ) { 6381 // We know that this user uses some value of From. If it is the right 6382 // value, update it. 6383 SDNode *User = Uses[UseIndex].User; 6384 6385 // This node is about to morph, remove its old self from the CSE maps. 6386 RemoveNodeFromCSEMaps(User); 6387 6388 // The Uses array is sorted, so all the uses for a given User 6389 // are next to each other in the list. 6390 // To help reduce the number of CSE recomputations, process all 6391 // the uses of this user that we can find this way. 6392 do { 6393 unsigned i = Uses[UseIndex].Index; 6394 SDUse &Use = *Uses[UseIndex].Use; 6395 ++UseIndex; 6396 6397 Use.set(To[i]); 6398 } while (UseIndex != UseIndexEnd && Uses[UseIndex].User == User); 6399 6400 // Now that we have modified User, add it back to the CSE maps. If it 6401 // already exists there, recursively merge the results together. 6402 AddModifiedNodeToCSEMaps(User); 6403 } 6404 } 6405 6406 /// AssignTopologicalOrder - Assign a unique node id for each node in the DAG 6407 /// based on their topological order. It returns the maximum id and a vector 6408 /// of the SDNodes* in assigned order by reference. 6409 unsigned SelectionDAG::AssignTopologicalOrder() { 6410 6411 unsigned DAGSize = 0; 6412 6413 // SortedPos tracks the progress of the algorithm. Nodes before it are 6414 // sorted, nodes after it are unsorted. When the algorithm completes 6415 // it is at the end of the list. 6416 allnodes_iterator SortedPos = allnodes_begin(); 6417 6418 // Visit all the nodes. Move nodes with no operands to the front of 6419 // the list immediately. Annotate nodes that do have operands with their 6420 // operand count. Before we do this, the Node Id fields of the nodes 6421 // may contain arbitrary values. After, the Node Id fields for nodes 6422 // before SortedPos will contain the topological sort index, and the 6423 // Node Id fields for nodes At SortedPos and after will contain the 6424 // count of outstanding operands. 6425 for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ) { 6426 SDNode *N = I++; 6427 checkForCycles(N, this); 6428 unsigned Degree = N->getNumOperands(); 6429 if (Degree == 0) { 6430 // A node with no uses, add it to the result array immediately. 6431 N->setNodeId(DAGSize++); 6432 allnodes_iterator Q = N; 6433 if (Q != SortedPos) 6434 SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(Q)); 6435 assert(SortedPos != AllNodes.end() && "Overran node list"); 6436 ++SortedPos; 6437 } else { 6438 // Temporarily use the Node Id as scratch space for the degree count. 6439 N->setNodeId(Degree); 6440 } 6441 } 6442 6443 // Visit all the nodes. As we iterate, move nodes into sorted order, 6444 // such that by the time the end is reached all nodes will be sorted. 6445 for (allnodes_iterator I = allnodes_begin(),E = allnodes_end(); I != E; ++I) { 6446 SDNode *N = I; 6447 checkForCycles(N, this); 6448 // N is in sorted position, so all its uses have one less operand 6449 // that needs to be sorted. 6450 for (SDNode::use_iterator UI = N->use_begin(), UE = N->use_end(); 6451 UI != UE; ++UI) { 6452 SDNode *P = *UI; 6453 unsigned Degree = P->getNodeId(); 6454 assert(Degree != 0 && "Invalid node degree"); 6455 --Degree; 6456 if (Degree == 0) { 6457 // All of P's operands are sorted, so P may sorted now. 6458 P->setNodeId(DAGSize++); 6459 if (P != SortedPos) 6460 SortedPos = AllNodes.insert(SortedPos, AllNodes.remove(P)); 6461 assert(SortedPos != AllNodes.end() && "Overran node list"); 6462 ++SortedPos; 6463 } else { 6464 // Update P's outstanding operand count. 6465 P->setNodeId(Degree); 6466 } 6467 } 6468 if (I == SortedPos) { 6469 #ifndef NDEBUG 6470 SDNode *S = ++I; 6471 dbgs() << "Overran sorted position:\n"; 6472 S->dumprFull(this); dbgs() << "\n"; 6473 dbgs() << "Checking if this is due to cycles\n"; 6474 checkForCycles(this, true); 6475 #endif 6476 llvm_unreachable(nullptr); 6477 } 6478 } 6479 6480 assert(SortedPos == AllNodes.end() && 6481 "Topological sort incomplete!"); 6482 assert(AllNodes.front().getOpcode() == ISD::EntryToken && 6483 "First node in topological sort is not the entry token!"); 6484 assert(AllNodes.front().getNodeId() == 0 && 6485 "First node in topological sort has non-zero id!"); 6486 assert(AllNodes.front().getNumOperands() == 0 && 6487 "First node in topological sort has operands!"); 6488 assert(AllNodes.back().getNodeId() == (int)DAGSize-1 && 6489 "Last node in topologic sort has unexpected id!"); 6490 assert(AllNodes.back().use_empty() && 6491 "Last node in topologic sort has users!"); 6492 assert(DAGSize == allnodes_size() && "Node count mismatch!"); 6493 return DAGSize; 6494 } 6495 6496 /// AddDbgValue - Add a dbg_value SDNode. If SD is non-null that means the 6497 /// value is produced by SD. 6498 void SelectionDAG::AddDbgValue(SDDbgValue *DB, SDNode *SD, bool isParameter) { 6499 if (SD) { 6500 assert(DbgInfo->getSDDbgValues(SD).empty() || SD->getHasDebugValue()); 6501 SD->setHasDebugValue(true); 6502 } 6503 DbgInfo->add(DB, SD, isParameter); 6504 } 6505 6506 /// TransferDbgValues - Transfer SDDbgValues. 6507 void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) { 6508 if (From == To || !From.getNode()->getHasDebugValue()) 6509 return; 6510 SDNode *FromNode = From.getNode(); 6511 SDNode *ToNode = To.getNode(); 6512 ArrayRef<SDDbgValue *> DVs = GetDbgValues(FromNode); 6513 SmallVector<SDDbgValue *, 2> ClonedDVs; 6514 for (ArrayRef<SDDbgValue *>::iterator I = DVs.begin(), E = DVs.end(); 6515 I != E; ++I) { 6516 SDDbgValue *Dbg = *I; 6517 if (Dbg->getKind() == SDDbgValue::SDNODE) { 6518 SDDbgValue *Clone = 6519 getDbgValue(Dbg->getVariable(), Dbg->getExpression(), ToNode, 6520 To.getResNo(), Dbg->isIndirect(), Dbg->getOffset(), 6521 Dbg->getDebugLoc(), Dbg->getOrder()); 6522 ClonedDVs.push_back(Clone); 6523 } 6524 } 6525 for (SmallVectorImpl<SDDbgValue *>::iterator I = ClonedDVs.begin(), 6526 E = ClonedDVs.end(); I != E; ++I) 6527 AddDbgValue(*I, ToNode, false); 6528 } 6529 6530 //===----------------------------------------------------------------------===// 6531 // SDNode Class 6532 //===----------------------------------------------------------------------===// 6533 6534 HandleSDNode::~HandleSDNode() { 6535 DropOperands(); 6536 } 6537 6538 GlobalAddressSDNode::GlobalAddressSDNode(unsigned Opc, unsigned Order, 6539 DebugLoc DL, const GlobalValue *GA, 6540 EVT VT, int64_t o, unsigned char TF) 6541 : SDNode(Opc, Order, DL, getSDVTList(VT)), Offset(o), TargetFlags(TF) { 6542 TheGlobal = GA; 6543 } 6544 6545 AddrSpaceCastSDNode::AddrSpaceCastSDNode(unsigned Order, DebugLoc dl, EVT VT, 6546 SDValue X, unsigned SrcAS, 6547 unsigned DestAS) 6548 : UnarySDNode(ISD::ADDRSPACECAST, Order, dl, getSDVTList(VT), X), 6549 SrcAddrSpace(SrcAS), DestAddrSpace(DestAS) {} 6550 6551 MemSDNode::MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, 6552 EVT memvt, MachineMemOperand *mmo) 6553 : SDNode(Opc, Order, dl, VTs), MemoryVT(memvt), MMO(mmo) { 6554 SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(), 6555 MMO->isNonTemporal(), MMO->isInvariant()); 6556 assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!"); 6557 assert(isNonTemporal() == MMO->isNonTemporal() && 6558 "Non-temporal encoding error!"); 6559 // We check here that the size of the memory operand fits within the size of 6560 // the MMO. This is because the MMO might indicate only a possible address 6561 // range instead of specifying the affected memory addresses precisely. 6562 assert(memvt.getStoreSize() <= MMO->getSize() && "Size mismatch!"); 6563 } 6564 6565 MemSDNode::MemSDNode(unsigned Opc, unsigned Order, DebugLoc dl, SDVTList VTs, 6566 ArrayRef<SDValue> Ops, EVT memvt, MachineMemOperand *mmo) 6567 : SDNode(Opc, Order, dl, VTs, Ops), 6568 MemoryVT(memvt), MMO(mmo) { 6569 SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(), 6570 MMO->isNonTemporal(), MMO->isInvariant()); 6571 assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!"); 6572 assert(memvt.getStoreSize() <= MMO->getSize() && "Size mismatch!"); 6573 } 6574 6575 /// Profile - Gather unique data for the node. 6576 /// 6577 void SDNode::Profile(FoldingSetNodeID &ID) const { 6578 AddNodeIDNode(ID, this); 6579 } 6580 6581 namespace { 6582 struct EVTArray { 6583 std::vector<EVT> VTs; 6584 6585 EVTArray() { 6586 VTs.reserve(MVT::LAST_VALUETYPE); 6587 for (unsigned i = 0; i < MVT::LAST_VALUETYPE; ++i) 6588 VTs.push_back(MVT((MVT::SimpleValueType)i)); 6589 } 6590 }; 6591 } 6592 6593 static ManagedStatic<std::set<EVT, EVT::compareRawBits> > EVTs; 6594 static ManagedStatic<EVTArray> SimpleVTArray; 6595 static ManagedStatic<sys::SmartMutex<true> > VTMutex; 6596 6597 /// getValueTypeList - Return a pointer to the specified value type. 6598 /// 6599 const EVT *SDNode::getValueTypeList(EVT VT) { 6600 if (VT.isExtended()) { 6601 sys::SmartScopedLock<true> Lock(*VTMutex); 6602 return &(*EVTs->insert(VT).first); 6603 } else { 6604 assert(VT.getSimpleVT() < MVT::LAST_VALUETYPE && 6605 "Value type out of range!"); 6606 return &SimpleVTArray->VTs[VT.getSimpleVT().SimpleTy]; 6607 } 6608 } 6609 6610 /// hasNUsesOfValue - Return true if there are exactly NUSES uses of the 6611 /// indicated value. This method ignores uses of other values defined by this 6612 /// operation. 6613 bool SDNode::hasNUsesOfValue(unsigned NUses, unsigned Value) const { 6614 assert(Value < getNumValues() && "Bad value!"); 6615 6616 // TODO: Only iterate over uses of a given value of the node 6617 for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI) { 6618 if (UI.getUse().getResNo() == Value) { 6619 if (NUses == 0) 6620 return false; 6621 --NUses; 6622 } 6623 } 6624 6625 // Found exactly the right number of uses? 6626 return NUses == 0; 6627 } 6628 6629 6630 /// hasAnyUseOfValue - Return true if there are any use of the indicated 6631 /// value. This method ignores uses of other values defined by this operation. 6632 bool SDNode::hasAnyUseOfValue(unsigned Value) const { 6633 assert(Value < getNumValues() && "Bad value!"); 6634 6635 for (SDNode::use_iterator UI = use_begin(), E = use_end(); UI != E; ++UI) 6636 if (UI.getUse().getResNo() == Value) 6637 return true; 6638 6639 return false; 6640 } 6641 6642 6643 /// isOnlyUserOf - Return true if this node is the only use of N. 6644 /// 6645 bool SDNode::isOnlyUserOf(SDNode *N) const { 6646 bool Seen = false; 6647 for (SDNode::use_iterator I = N->use_begin(), E = N->use_end(); I != E; ++I) { 6648 SDNode *User = *I; 6649 if (User == this) 6650 Seen = true; 6651 else 6652 return false; 6653 } 6654 6655 return Seen; 6656 } 6657 6658 /// isOperand - Return true if this node is an operand of N. 6659 /// 6660 bool SDValue::isOperandOf(SDNode *N) const { 6661 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) 6662 if (*this == N->getOperand(i)) 6663 return true; 6664 return false; 6665 } 6666 6667 bool SDNode::isOperandOf(SDNode *N) const { 6668 for (unsigned i = 0, e = N->NumOperands; i != e; ++i) 6669 if (this == N->OperandList[i].getNode()) 6670 return true; 6671 return false; 6672 } 6673 6674 /// reachesChainWithoutSideEffects - Return true if this operand (which must 6675 /// be a chain) reaches the specified operand without crossing any 6676 /// side-effecting instructions on any chain path. In practice, this looks 6677 /// through token factors and non-volatile loads. In order to remain efficient, 6678 /// this only looks a couple of nodes in, it does not do an exhaustive search. 6679 bool SDValue::reachesChainWithoutSideEffects(SDValue Dest, 6680 unsigned Depth) const { 6681 if (*this == Dest) return true; 6682 6683 // Don't search too deeply, we just want to be able to see through 6684 // TokenFactor's etc. 6685 if (Depth == 0) return false; 6686 6687 // If this is a token factor, all inputs to the TF happen in parallel. If any 6688 // of the operands of the TF does not reach dest, then we cannot do the xform. 6689 if (getOpcode() == ISD::TokenFactor) { 6690 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) 6691 if (!getOperand(i).reachesChainWithoutSideEffects(Dest, Depth-1)) 6692 return false; 6693 return true; 6694 } 6695 6696 // Loads don't have side effects, look through them. 6697 if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(*this)) { 6698 if (!Ld->isVolatile()) 6699 return Ld->getChain().reachesChainWithoutSideEffects(Dest, Depth-1); 6700 } 6701 return false; 6702 } 6703 6704 /// hasPredecessor - Return true if N is a predecessor of this node. 6705 /// N is either an operand of this node, or can be reached by recursively 6706 /// traversing up the operands. 6707 /// NOTE: This is an expensive method. Use it carefully. 6708 bool SDNode::hasPredecessor(const SDNode *N) const { 6709 SmallPtrSet<const SDNode *, 32> Visited; 6710 SmallVector<const SDNode *, 16> Worklist; 6711 return hasPredecessorHelper(N, Visited, Worklist); 6712 } 6713 6714 bool 6715 SDNode::hasPredecessorHelper(const SDNode *N, 6716 SmallPtrSetImpl<const SDNode *> &Visited, 6717 SmallVectorImpl<const SDNode *> &Worklist) const { 6718 if (Visited.empty()) { 6719 Worklist.push_back(this); 6720 } else { 6721 // Take a look in the visited set. If we've already encountered this node 6722 // we needn't search further. 6723 if (Visited.count(N)) 6724 return true; 6725 } 6726 6727 // Haven't visited N yet. Continue the search. 6728 while (!Worklist.empty()) { 6729 const SDNode *M = Worklist.pop_back_val(); 6730 for (unsigned i = 0, e = M->getNumOperands(); i != e; ++i) { 6731 SDNode *Op = M->getOperand(i).getNode(); 6732 if (Visited.insert(Op).second) 6733 Worklist.push_back(Op); 6734 if (Op == N) 6735 return true; 6736 } 6737 } 6738 6739 return false; 6740 } 6741 6742 uint64_t SDNode::getConstantOperandVal(unsigned Num) const { 6743 assert(Num < NumOperands && "Invalid child # of SDNode!"); 6744 return cast<ConstantSDNode>(OperandList[Num])->getZExtValue(); 6745 } 6746 6747 SDValue SelectionDAG::UnrollVectorOp(SDNode *N, unsigned ResNE) { 6748 assert(N->getNumValues() == 1 && 6749 "Can't unroll a vector with multiple results!"); 6750 6751 EVT VT = N->getValueType(0); 6752 unsigned NE = VT.getVectorNumElements(); 6753 EVT EltVT = VT.getVectorElementType(); 6754 SDLoc dl(N); 6755 6756 SmallVector<SDValue, 8> Scalars; 6757 SmallVector<SDValue, 4> Operands(N->getNumOperands()); 6758 6759 // If ResNE is 0, fully unroll the vector op. 6760 if (ResNE == 0) 6761 ResNE = NE; 6762 else if (NE > ResNE) 6763 NE = ResNE; 6764 6765 unsigned i; 6766 for (i= 0; i != NE; ++i) { 6767 for (unsigned j = 0, e = N->getNumOperands(); j != e; ++j) { 6768 SDValue Operand = N->getOperand(j); 6769 EVT OperandVT = Operand.getValueType(); 6770 if (OperandVT.isVector()) { 6771 // A vector operand; extract a single element. 6772 EVT OperandEltVT = OperandVT.getVectorElementType(); 6773 Operands[j] = getNode(ISD::EXTRACT_VECTOR_ELT, dl, 6774 OperandEltVT, 6775 Operand, 6776 getConstant(i, dl, TLI->getVectorIdxTy())); 6777 } else { 6778 // A scalar operand; just use it as is. 6779 Operands[j] = Operand; 6780 } 6781 } 6782 6783 switch (N->getOpcode()) { 6784 default: 6785 Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands)); 6786 break; 6787 case ISD::VSELECT: 6788 Scalars.push_back(getNode(ISD::SELECT, dl, EltVT, Operands)); 6789 break; 6790 case ISD::SHL: 6791 case ISD::SRA: 6792 case ISD::SRL: 6793 case ISD::ROTL: 6794 case ISD::ROTR: 6795 Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands[0], 6796 getShiftAmountOperand(Operands[0].getValueType(), 6797 Operands[1]))); 6798 break; 6799 case ISD::SIGN_EXTEND_INREG: 6800 case ISD::FP_ROUND_INREG: { 6801 EVT ExtVT = cast<VTSDNode>(Operands[1])->getVT().getVectorElementType(); 6802 Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, 6803 Operands[0], 6804 getValueType(ExtVT))); 6805 } 6806 } 6807 } 6808 6809 for (; i < ResNE; ++i) 6810 Scalars.push_back(getUNDEF(EltVT)); 6811 6812 return getNode(ISD::BUILD_VECTOR, dl, 6813 EVT::getVectorVT(*getContext(), EltVT, ResNE), Scalars); 6814 } 6815 6816 6817 /// isConsecutiveLoad - Return true if LD is loading 'Bytes' bytes from a 6818 /// location that is 'Dist' units away from the location that the 'Base' load 6819 /// is loading from. 6820 bool SelectionDAG::isConsecutiveLoad(LoadSDNode *LD, LoadSDNode *Base, 6821 unsigned Bytes, int Dist) const { 6822 if (LD->getChain() != Base->getChain()) 6823 return false; 6824 EVT VT = LD->getValueType(0); 6825 if (VT.getSizeInBits() / 8 != Bytes) 6826 return false; 6827 6828 SDValue Loc = LD->getOperand(1); 6829 SDValue BaseLoc = Base->getOperand(1); 6830 if (Loc.getOpcode() == ISD::FrameIndex) { 6831 if (BaseLoc.getOpcode() != ISD::FrameIndex) 6832 return false; 6833 const MachineFrameInfo *MFI = getMachineFunction().getFrameInfo(); 6834 int FI = cast<FrameIndexSDNode>(Loc)->getIndex(); 6835 int BFI = cast<FrameIndexSDNode>(BaseLoc)->getIndex(); 6836 int FS = MFI->getObjectSize(FI); 6837 int BFS = MFI->getObjectSize(BFI); 6838 if (FS != BFS || FS != (int)Bytes) return false; 6839 return MFI->getObjectOffset(FI) == (MFI->getObjectOffset(BFI) + Dist*Bytes); 6840 } 6841 6842 // Handle X + C. 6843 if (isBaseWithConstantOffset(Loc)) { 6844 int64_t LocOffset = cast<ConstantSDNode>(Loc.getOperand(1))->getSExtValue(); 6845 if (Loc.getOperand(0) == BaseLoc) { 6846 // If the base location is a simple address with no offset itself, then 6847 // the second load's first add operand should be the base address. 6848 if (LocOffset == Dist * (int)Bytes) 6849 return true; 6850 } else if (isBaseWithConstantOffset(BaseLoc)) { 6851 // The base location itself has an offset, so subtract that value from the 6852 // second load's offset before comparing to distance * size. 6853 int64_t BOffset = 6854 cast<ConstantSDNode>(BaseLoc.getOperand(1))->getSExtValue(); 6855 if (Loc.getOperand(0) == BaseLoc.getOperand(0)) { 6856 if ((LocOffset - BOffset) == Dist * (int)Bytes) 6857 return true; 6858 } 6859 } 6860 } 6861 const GlobalValue *GV1 = nullptr; 6862 const GlobalValue *GV2 = nullptr; 6863 int64_t Offset1 = 0; 6864 int64_t Offset2 = 0; 6865 bool isGA1 = TLI->isGAPlusOffset(Loc.getNode(), GV1, Offset1); 6866 bool isGA2 = TLI->isGAPlusOffset(BaseLoc.getNode(), GV2, Offset2); 6867 if (isGA1 && isGA2 && GV1 == GV2) 6868 return Offset1 == (Offset2 + Dist*Bytes); 6869 return false; 6870 } 6871 6872 6873 /// InferPtrAlignment - Infer alignment of a load / store address. Return 0 if 6874 /// it cannot be inferred. 6875 unsigned SelectionDAG::InferPtrAlignment(SDValue Ptr) const { 6876 // If this is a GlobalAddress + cst, return the alignment. 6877 const GlobalValue *GV; 6878 int64_t GVOffset = 0; 6879 if (TLI->isGAPlusOffset(Ptr.getNode(), GV, GVOffset)) { 6880 unsigned PtrWidth = TLI->getPointerTypeSizeInBits(GV->getType()); 6881 APInt KnownZero(PtrWidth, 0), KnownOne(PtrWidth, 0); 6882 llvm::computeKnownBits(const_cast<GlobalValue *>(GV), KnownZero, KnownOne, 6883 *TLI->getDataLayout()); 6884 unsigned AlignBits = KnownZero.countTrailingOnes(); 6885 unsigned Align = AlignBits ? 1 << std::min(31U, AlignBits) : 0; 6886 if (Align) 6887 return MinAlign(Align, GVOffset); 6888 } 6889 6890 // If this is a direct reference to a stack slot, use information about the 6891 // stack slot's alignment. 6892 int FrameIdx = 1 << 31; 6893 int64_t FrameOffset = 0; 6894 if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Ptr)) { 6895 FrameIdx = FI->getIndex(); 6896 } else if (isBaseWithConstantOffset(Ptr) && 6897 isa<FrameIndexSDNode>(Ptr.getOperand(0))) { 6898 // Handle FI+Cst 6899 FrameIdx = cast<FrameIndexSDNode>(Ptr.getOperand(0))->getIndex(); 6900 FrameOffset = Ptr.getConstantOperandVal(1); 6901 } 6902 6903 if (FrameIdx != (1 << 31)) { 6904 const MachineFrameInfo &MFI = *getMachineFunction().getFrameInfo(); 6905 unsigned FIInfoAlign = MinAlign(MFI.getObjectAlignment(FrameIdx), 6906 FrameOffset); 6907 return FIInfoAlign; 6908 } 6909 6910 return 0; 6911 } 6912 6913 /// GetSplitDestVTs - Compute the VTs needed for the low/hi parts of a type 6914 /// which is split (or expanded) into two not necessarily identical pieces. 6915 std::pair<EVT, EVT> SelectionDAG::GetSplitDestVTs(const EVT &VT) const { 6916 // Currently all types are split in half. 6917 EVT LoVT, HiVT; 6918 if (!VT.isVector()) { 6919 LoVT = HiVT = TLI->getTypeToTransformTo(*getContext(), VT); 6920 } else { 6921 unsigned NumElements = VT.getVectorNumElements(); 6922 assert(!(NumElements & 1) && "Splitting vector, but not in half!"); 6923 LoVT = HiVT = EVT::getVectorVT(*getContext(), VT.getVectorElementType(), 6924 NumElements/2); 6925 } 6926 return std::make_pair(LoVT, HiVT); 6927 } 6928 6929 /// SplitVector - Split the vector with EXTRACT_SUBVECTOR and return the 6930 /// low/high part. 6931 std::pair<SDValue, SDValue> 6932 SelectionDAG::SplitVector(const SDValue &N, const SDLoc &DL, const EVT &LoVT, 6933 const EVT &HiVT) { 6934 assert(LoVT.getVectorNumElements() + HiVT.getVectorNumElements() <= 6935 N.getValueType().getVectorNumElements() && 6936 "More vector elements requested than available!"); 6937 SDValue Lo, Hi; 6938 Lo = getNode(ISD::EXTRACT_SUBVECTOR, DL, LoVT, N, 6939 getConstant(0, DL, TLI->getVectorIdxTy())); 6940 Hi = getNode(ISD::EXTRACT_SUBVECTOR, DL, HiVT, N, 6941 getConstant(LoVT.getVectorNumElements(), DL, 6942 TLI->getVectorIdxTy())); 6943 return std::make_pair(Lo, Hi); 6944 } 6945 6946 void SelectionDAG::ExtractVectorElements(SDValue Op, 6947 SmallVectorImpl<SDValue> &Args, 6948 unsigned Start, unsigned Count) { 6949 EVT VT = Op.getValueType(); 6950 if (Count == 0) 6951 Count = VT.getVectorNumElements(); 6952 6953 EVT EltVT = VT.getVectorElementType(); 6954 EVT IdxTy = TLI->getVectorIdxTy(); 6955 SDLoc SL(Op); 6956 for (unsigned i = Start, e = Start + Count; i != e; ++i) { 6957 Args.push_back(getNode(ISD::EXTRACT_VECTOR_ELT, SL, EltVT, 6958 Op, getConstant(i, SL, IdxTy))); 6959 } 6960 } 6961 6962 // getAddressSpace - Return the address space this GlobalAddress belongs to. 6963 unsigned GlobalAddressSDNode::getAddressSpace() const { 6964 return getGlobal()->getType()->getAddressSpace(); 6965 } 6966 6967 6968 Type *ConstantPoolSDNode::getType() const { 6969 if (isMachineConstantPoolEntry()) 6970 return Val.MachineCPVal->getType(); 6971 return Val.ConstVal->getType(); 6972 } 6973 6974 bool BuildVectorSDNode::isConstantSplat(APInt &SplatValue, 6975 APInt &SplatUndef, 6976 unsigned &SplatBitSize, 6977 bool &HasAnyUndefs, 6978 unsigned MinSplatBits, 6979 bool isBigEndian) const { 6980 EVT VT = getValueType(0); 6981 assert(VT.isVector() && "Expected a vector type"); 6982 unsigned sz = VT.getSizeInBits(); 6983 if (MinSplatBits > sz) 6984 return false; 6985 6986 SplatValue = APInt(sz, 0); 6987 SplatUndef = APInt(sz, 0); 6988 6989 // Get the bits. Bits with undefined values (when the corresponding element 6990 // of the vector is an ISD::UNDEF value) are set in SplatUndef and cleared 6991 // in SplatValue. If any of the values are not constant, give up and return 6992 // false. 6993 unsigned int nOps = getNumOperands(); 6994 assert(nOps > 0 && "isConstantSplat has 0-size build vector"); 6995 unsigned EltBitSize = VT.getVectorElementType().getSizeInBits(); 6996 6997 for (unsigned j = 0; j < nOps; ++j) { 6998 unsigned i = isBigEndian ? nOps-1-j : j; 6999 SDValue OpVal = getOperand(i); 7000 unsigned BitPos = j * EltBitSize; 7001 7002 if (OpVal.getOpcode() == ISD::UNDEF) 7003 SplatUndef |= APInt::getBitsSet(sz, BitPos, BitPos + EltBitSize); 7004 else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal)) 7005 SplatValue |= CN->getAPIntValue().zextOrTrunc(EltBitSize). 7006 zextOrTrunc(sz) << BitPos; 7007 else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal)) 7008 SplatValue |= CN->getValueAPF().bitcastToAPInt().zextOrTrunc(sz) <<BitPos; 7009 else 7010 return false; 7011 } 7012 7013 // The build_vector is all constants or undefs. Find the smallest element 7014 // size that splats the vector. 7015 7016 HasAnyUndefs = (SplatUndef != 0); 7017 while (sz > 8) { 7018 7019 unsigned HalfSize = sz / 2; 7020 APInt HighValue = SplatValue.lshr(HalfSize).trunc(HalfSize); 7021 APInt LowValue = SplatValue.trunc(HalfSize); 7022 APInt HighUndef = SplatUndef.lshr(HalfSize).trunc(HalfSize); 7023 APInt LowUndef = SplatUndef.trunc(HalfSize); 7024 7025 // If the two halves do not match (ignoring undef bits), stop here. 7026 if ((HighValue & ~LowUndef) != (LowValue & ~HighUndef) || 7027 MinSplatBits > HalfSize) 7028 break; 7029 7030 SplatValue = HighValue | LowValue; 7031 SplatUndef = HighUndef & LowUndef; 7032 7033 sz = HalfSize; 7034 } 7035 7036 SplatBitSize = sz; 7037 return true; 7038 } 7039 7040 SDValue BuildVectorSDNode::getSplatValue(BitVector *UndefElements) const { 7041 if (UndefElements) { 7042 UndefElements->clear(); 7043 UndefElements->resize(getNumOperands()); 7044 } 7045 SDValue Splatted; 7046 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 7047 SDValue Op = getOperand(i); 7048 if (Op.getOpcode() == ISD::UNDEF) { 7049 if (UndefElements) 7050 (*UndefElements)[i] = true; 7051 } else if (!Splatted) { 7052 Splatted = Op; 7053 } else if (Splatted != Op) { 7054 return SDValue(); 7055 } 7056 } 7057 7058 if (!Splatted) { 7059 assert(getOperand(0).getOpcode() == ISD::UNDEF && 7060 "Can only have a splat without a constant for all undefs."); 7061 return getOperand(0); 7062 } 7063 7064 return Splatted; 7065 } 7066 7067 ConstantSDNode * 7068 BuildVectorSDNode::getConstantSplatNode(BitVector *UndefElements) const { 7069 return dyn_cast_or_null<ConstantSDNode>( 7070 getSplatValue(UndefElements).getNode()); 7071 } 7072 7073 ConstantFPSDNode * 7074 BuildVectorSDNode::getConstantFPSplatNode(BitVector *UndefElements) const { 7075 return dyn_cast_or_null<ConstantFPSDNode>( 7076 getSplatValue(UndefElements).getNode()); 7077 } 7078 7079 bool BuildVectorSDNode::isConstant() const { 7080 for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { 7081 unsigned Opc = getOperand(i).getOpcode(); 7082 if (Opc != ISD::UNDEF && Opc != ISD::Constant && Opc != ISD::ConstantFP) 7083 return false; 7084 } 7085 return true; 7086 } 7087 7088 bool ShuffleVectorSDNode::isSplatMask(const int *Mask, EVT VT) { 7089 // Find the first non-undef value in the shuffle mask. 7090 unsigned i, e; 7091 for (i = 0, e = VT.getVectorNumElements(); i != e && Mask[i] < 0; ++i) 7092 /* search */; 7093 7094 assert(i != e && "VECTOR_SHUFFLE node with all undef indices!"); 7095 7096 // Make sure all remaining elements are either undef or the same as the first 7097 // non-undef value. 7098 for (int Idx = Mask[i]; i != e; ++i) 7099 if (Mask[i] >= 0 && Mask[i] != Idx) 7100 return false; 7101 return true; 7102 } 7103 7104 #ifndef NDEBUG 7105 static void checkForCyclesHelper(const SDNode *N, 7106 SmallPtrSetImpl<const SDNode*> &Visited, 7107 SmallPtrSetImpl<const SDNode*> &Checked, 7108 const llvm::SelectionDAG *DAG) { 7109 // If this node has already been checked, don't check it again. 7110 if (Checked.count(N)) 7111 return; 7112 7113 // If a node has already been visited on this depth-first walk, reject it as 7114 // a cycle. 7115 if (!Visited.insert(N).second) { 7116 errs() << "Detected cycle in SelectionDAG\n"; 7117 dbgs() << "Offending node:\n"; 7118 N->dumprFull(DAG); dbgs() << "\n"; 7119 abort(); 7120 } 7121 7122 for(unsigned i = 0, e = N->getNumOperands(); i != e; ++i) 7123 checkForCyclesHelper(N->getOperand(i).getNode(), Visited, Checked, DAG); 7124 7125 Checked.insert(N); 7126 Visited.erase(N); 7127 } 7128 #endif 7129 7130 void llvm::checkForCycles(const llvm::SDNode *N, 7131 const llvm::SelectionDAG *DAG, 7132 bool force) { 7133 #ifndef NDEBUG 7134 bool check = force; 7135 #ifdef XDEBUG 7136 check = true; 7137 #endif // XDEBUG 7138 if (check) { 7139 assert(N && "Checking nonexistent SDNode"); 7140 SmallPtrSet<const SDNode*, 32> visited; 7141 SmallPtrSet<const SDNode*, 32> checked; 7142 checkForCyclesHelper(N, visited, checked, DAG); 7143 } 7144 #endif // !NDEBUG 7145 } 7146 7147 void llvm::checkForCycles(const llvm::SelectionDAG *DAG, bool force) { 7148 checkForCycles(DAG->getRoot().getNode(), DAG, force); 7149 } 7150