1 //===-- llvm/Target/TargetLowering.h - Target Lowering Info -----*- C++ -*-===// 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 /// \file 11 /// This file describes how to lower LLVM code to machine code. This has two 12 /// main components: 13 /// 14 /// 1. Which ValueTypes are natively supported by the target. 15 /// 2. Which operations are supported for supported ValueTypes. 16 /// 3. Cost thresholds for alternative implementations of certain operations. 17 /// 18 /// In addition it has a few other components, like information about FP 19 /// immediates. 20 /// 21 //===----------------------------------------------------------------------===// 22 23 #ifndef LLVM_TARGET_TARGETLOWERING_H 24 #define LLVM_TARGET_TARGETLOWERING_H 25 26 #include "llvm/ADT/DenseMap.h" 27 #include "llvm/CodeGen/DAGCombine.h" 28 #include "llvm/CodeGen/RuntimeLibcalls.h" 29 #include "llvm/CodeGen/SelectionDAGNodes.h" 30 #include "llvm/IR/Attributes.h" 31 #include "llvm/IR/CallSite.h" 32 #include "llvm/IR/CallingConv.h" 33 #include "llvm/IR/IRBuilder.h" 34 #include "llvm/IR/InlineAsm.h" 35 #include "llvm/IR/Instructions.h" 36 #include "llvm/MC/MCRegisterInfo.h" 37 #include "llvm/Target/TargetCallingConv.h" 38 #include "llvm/Target/TargetMachine.h" 39 #include <climits> 40 #include <map> 41 #include <vector> 42 43 namespace llvm { 44 class CallInst; 45 class CCState; 46 class FastISel; 47 class FunctionLoweringInfo; 48 class ImmutableCallSite; 49 class IntrinsicInst; 50 class MachineBasicBlock; 51 class MachineFunction; 52 class MachineInstr; 53 class MachineJumpTableInfo; 54 class MachineLoop; 55 class Mangler; 56 class MCContext; 57 class MCExpr; 58 class MCSymbol; 59 template<typename T> class SmallVectorImpl; 60 class DataLayout; 61 class TargetRegisterClass; 62 class TargetLibraryInfo; 63 class TargetLoweringObjectFile; 64 class Value; 65 66 namespace Sched { 67 enum Preference { 68 None, // No preference 69 Source, // Follow source order. 70 RegPressure, // Scheduling for lowest register pressure. 71 Hybrid, // Scheduling for both latency and register pressure. 72 ILP, // Scheduling for ILP in low register pressure mode. 73 VLIW // Scheduling for VLIW targets. 74 }; 75 } 76 77 /// This base class for TargetLowering contains the SelectionDAG-independent 78 /// parts that can be used from the rest of CodeGen. 79 class TargetLoweringBase { 80 TargetLoweringBase(const TargetLoweringBase&) = delete; 81 void operator=(const TargetLoweringBase&) = delete; 82 83 public: 84 /// This enum indicates whether operations are valid for a target, and if not, 85 /// what action should be used to make them valid. 86 enum LegalizeAction { 87 Legal, // The target natively supports this operation. 88 Promote, // This operation should be executed in a larger type. 89 Expand, // Try to expand this to other ops, otherwise use a libcall. 90 Custom // Use the LowerOperation hook to implement custom lowering. 91 }; 92 93 /// This enum indicates whether a types are legal for a target, and if not, 94 /// what action should be used to make them valid. 95 enum LegalizeTypeAction { 96 TypeLegal, // The target natively supports this type. 97 TypePromoteInteger, // Replace this integer with a larger one. 98 TypeExpandInteger, // Split this integer into two of half the size. 99 TypeSoftenFloat, // Convert this float to a same size integer type. 100 TypeExpandFloat, // Split this float into two of half the size. 101 TypeScalarizeVector, // Replace this one-element vector with its element. 102 TypeSplitVector, // Split this vector into two of half the size. 103 TypeWidenVector, // This vector should be widened into a larger vector. 104 TypePromoteFloat // Replace this float with a larger one. 105 }; 106 107 /// LegalizeKind holds the legalization kind that needs to happen to EVT 108 /// in order to type-legalize it. 109 typedef std::pair<LegalizeTypeAction, EVT> LegalizeKind; 110 111 /// Enum that describes how the target represents true/false values. 112 enum BooleanContent { 113 UndefinedBooleanContent, // Only bit 0 counts, the rest can hold garbage. 114 ZeroOrOneBooleanContent, // All bits zero except for bit 0. 115 ZeroOrNegativeOneBooleanContent // All bits equal to bit 0. 116 }; 117 118 /// Enum that describes what type of support for selects the target has. 119 enum SelectSupportKind { 120 ScalarValSelect, // The target supports scalar selects (ex: cmov). 121 ScalarCondVectorVal, // The target supports selects with a scalar condition 122 // and vector values (ex: cmov). 123 VectorMaskSelect // The target supports vector selects with a vector 124 // mask (ex: x86 blends). 125 }; 126 127 /// Enum that specifies what a AtomicRMWInst is expanded to, if at all. Exists 128 /// because different targets have different levels of support for these 129 /// atomic RMW instructions, and also have different options w.r.t. what they should 130 /// expand to. 131 enum class AtomicRMWExpansionKind { 132 None, // Don't expand the instruction. 133 LLSC, // Expand the instruction into loadlinked/storeconditional; used 134 // by ARM/AArch64. Implies `hasLoadLinkedStoreConditional` 135 // returns true. 136 CmpXChg, // Expand the instruction into cmpxchg; used by at least X86. 137 }; 138 getExtendForContent(BooleanContent Content)139 static ISD::NodeType getExtendForContent(BooleanContent Content) { 140 switch (Content) { 141 case UndefinedBooleanContent: 142 // Extend by adding rubbish bits. 143 return ISD::ANY_EXTEND; 144 case ZeroOrOneBooleanContent: 145 // Extend by adding zero bits. 146 return ISD::ZERO_EXTEND; 147 case ZeroOrNegativeOneBooleanContent: 148 // Extend by copying the sign bit. 149 return ISD::SIGN_EXTEND; 150 } 151 llvm_unreachable("Invalid content kind"); 152 } 153 154 /// NOTE: The TargetMachine owns TLOF. 155 explicit TargetLoweringBase(const TargetMachine &TM); ~TargetLoweringBase()156 virtual ~TargetLoweringBase() {} 157 158 protected: 159 /// \brief Initialize all of the actions to default values. 160 void initActions(); 161 162 public: getTargetMachine()163 const TargetMachine &getTargetMachine() const { return TM; } getDataLayout()164 const DataLayout *getDataLayout() const { return TM.getDataLayout(); } 165 isBigEndian()166 bool isBigEndian() const { return !IsLittleEndian; } isLittleEndian()167 bool isLittleEndian() const { return IsLittleEndian; } 168 169 /// Return the pointer type for the given address space, defaults to 170 /// the pointer type from the data layout. 171 /// FIXME: The default needs to be removed once all the code is updated. 172 virtual MVT getPointerTy(uint32_t /*AS*/ = 0) const; 173 unsigned getPointerSizeInBits(uint32_t AS = 0) const; 174 unsigned getPointerTypeSizeInBits(Type *Ty) const; 175 virtual MVT getScalarShiftAmountTy(EVT LHSTy) const; 176 177 EVT getShiftAmountTy(EVT LHSTy) const; 178 179 /// Returns the type to be used for the index operand of: 180 /// ISD::INSERT_VECTOR_ELT, ISD::EXTRACT_VECTOR_ELT, 181 /// ISD::INSERT_SUBVECTOR, and ISD::EXTRACT_SUBVECTOR getVectorIdxTy()182 virtual MVT getVectorIdxTy() const { 183 return getPointerTy(); 184 } 185 186 /// Return true if the select operation is expensive for this target. isSelectExpensive()187 bool isSelectExpensive() const { return SelectIsExpensive; } 188 isSelectSupported(SelectSupportKind)189 virtual bool isSelectSupported(SelectSupportKind /*kind*/) const { 190 return true; 191 } 192 193 /// Return true if multiple condition registers are available. hasMultipleConditionRegisters()194 bool hasMultipleConditionRegisters() const { 195 return HasMultipleConditionRegisters; 196 } 197 198 /// Return true if the target has BitExtract instructions. hasExtractBitsInsn()199 bool hasExtractBitsInsn() const { return HasExtractBitsInsn; } 200 201 /// Return the preferred vector type legalization action. 202 virtual TargetLoweringBase::LegalizeTypeAction getPreferredVectorAction(EVT VT)203 getPreferredVectorAction(EVT VT) const { 204 // The default action for one element vectors is to scalarize 205 if (VT.getVectorNumElements() == 1) 206 return TypeScalarizeVector; 207 // The default action for other vectors is to promote 208 return TypePromoteInteger; 209 } 210 211 // There are two general methods for expanding a BUILD_VECTOR node: 212 // 1. Use SCALAR_TO_VECTOR on the defined scalar values and then shuffle 213 // them together. 214 // 2. Build the vector on the stack and then load it. 215 // If this function returns true, then method (1) will be used, subject to 216 // the constraint that all of the necessary shuffles are legal (as determined 217 // by isShuffleMaskLegal). If this function returns false, then method (2) is 218 // always used. The vector type, and the number of defined values, are 219 // provided. 220 virtual bool shouldExpandBuildVectorWithShuffles(EVT,unsigned DefinedValues)221 shouldExpandBuildVectorWithShuffles(EVT /* VT */, 222 unsigned DefinedValues) const { 223 return DefinedValues < 3; 224 } 225 226 /// Return true if integer divide is usually cheaper than a sequence of 227 /// several shifts, adds, and multiplies for this target. isIntDivCheap()228 bool isIntDivCheap() const { return IntDivIsCheap; } 229 230 /// Return true if sqrt(x) is as cheap or cheaper than 1 / rsqrt(x) isFsqrtCheap()231 bool isFsqrtCheap() const { 232 return FsqrtIsCheap; 233 } 234 235 /// Returns true if target has indicated at least one type should be bypassed. isSlowDivBypassed()236 bool isSlowDivBypassed() const { return !BypassSlowDivWidths.empty(); } 237 238 /// Returns map of slow types for division or remainder with corresponding 239 /// fast types getBypassSlowDivWidths()240 const DenseMap<unsigned int, unsigned int> &getBypassSlowDivWidths() const { 241 return BypassSlowDivWidths; 242 } 243 244 /// Return true if pow2 sdiv is cheaper than a chain of sra/srl/add/sra. isPow2SDivCheap()245 bool isPow2SDivCheap() const { return Pow2SDivIsCheap; } 246 247 /// Return true if Flow Control is an expensive operation that should be 248 /// avoided. isJumpExpensive()249 bool isJumpExpensive() const { return JumpIsExpensive; } 250 251 /// Return true if selects are only cheaper than branches if the branch is 252 /// unlikely to be predicted right. isPredictableSelectExpensive()253 bool isPredictableSelectExpensive() const { 254 return PredictableSelectIsExpensive; 255 } 256 257 /// isLoadBitCastBeneficial() - Return true if the following transform 258 /// is beneficial. 259 /// fold (conv (load x)) -> (load (conv*)x) 260 /// On architectures that don't natively support some vector loads efficiently, 261 /// casting the load to a smaller vector of larger types and loading 262 /// is more efficient, however, this can be undone by optimizations in 263 /// dag combiner. isLoadBitCastBeneficial(EVT,EVT)264 virtual bool isLoadBitCastBeneficial(EVT /* Load */, EVT /* Bitcast */) const { 265 return true; 266 } 267 268 /// \brief Return true if it is cheap to speculate a call to intrinsic cttz. isCheapToSpeculateCttz()269 virtual bool isCheapToSpeculateCttz() const { 270 return false; 271 } 272 273 /// \brief Return true if it is cheap to speculate a call to intrinsic ctlz. isCheapToSpeculateCtlz()274 virtual bool isCheapToSpeculateCtlz() const { 275 return false; 276 } 277 278 /// \brief Return if the target supports combining a 279 /// chain like: 280 /// \code 281 /// %andResult = and %val1, #imm-with-one-bit-set; 282 /// %icmpResult = icmp %andResult, 0 283 /// br i1 %icmpResult, label %dest1, label %dest2 284 /// \endcode 285 /// into a single machine instruction of a form like: 286 /// \code 287 /// brOnBitSet %register, #bitNumber, dest 288 /// \endcode isMaskAndBranchFoldingLegal()289 bool isMaskAndBranchFoldingLegal() const { 290 return MaskAndBranchFoldingIsLegal; 291 } 292 293 /// \brief Return true if the target wants to use the optimization that 294 /// turns ext(promotableInst1(...(promotableInstN(load)))) into 295 /// promotedInst1(...(promotedInstN(ext(load)))). enableExtLdPromotion()296 bool enableExtLdPromotion() const { return EnableExtLdPromotion; } 297 298 /// Return true if the target can combine store(extractelement VectorTy, 299 /// Idx). 300 /// \p Cost[out] gives the cost of that transformation when this is true. canCombineStoreAndExtract(Type * VectorTy,Value * Idx,unsigned & Cost)301 virtual bool canCombineStoreAndExtract(Type *VectorTy, Value *Idx, 302 unsigned &Cost) const { 303 return false; 304 } 305 306 /// Return true if target supports floating point exceptions. hasFloatingPointExceptions()307 bool hasFloatingPointExceptions() const { 308 return HasFloatingPointExceptions; 309 } 310 311 /// Return true if target always beneficiates from combining into FMA for a 312 /// given value type. This must typically return false on targets where FMA 313 /// takes more cycles to execute than FADD. enableAggressiveFMAFusion(EVT VT)314 virtual bool enableAggressiveFMAFusion(EVT VT) const { 315 return false; 316 } 317 318 /// Return the ValueType of the result of SETCC operations. 319 virtual EVT getSetCCResultType(LLVMContext &Context, EVT VT) const; 320 321 /// Return the ValueType for comparison libcalls. Comparions libcalls include 322 /// floating point comparion calls, and Ordered/Unordered check calls on 323 /// floating point numbers. 324 virtual 325 MVT::SimpleValueType getCmpLibcallReturnType() const; 326 327 /// For targets without i1 registers, this gives the nature of the high-bits 328 /// of boolean values held in types wider than i1. 329 /// 330 /// "Boolean values" are special true/false values produced by nodes like 331 /// SETCC and consumed (as the condition) by nodes like SELECT and BRCOND. 332 /// Not to be confused with general values promoted from i1. Some cpus 333 /// distinguish between vectors of boolean and scalars; the isVec parameter 334 /// selects between the two kinds. For example on X86 a scalar boolean should 335 /// be zero extended from i1, while the elements of a vector of booleans 336 /// should be sign extended from i1. 337 /// 338 /// Some cpus also treat floating point types the same way as they treat 339 /// vectors instead of the way they treat scalars. getBooleanContents(bool isVec,bool isFloat)340 BooleanContent getBooleanContents(bool isVec, bool isFloat) const { 341 if (isVec) 342 return BooleanVectorContents; 343 return isFloat ? BooleanFloatContents : BooleanContents; 344 } 345 getBooleanContents(EVT Type)346 BooleanContent getBooleanContents(EVT Type) const { 347 return getBooleanContents(Type.isVector(), Type.isFloatingPoint()); 348 } 349 350 /// Return target scheduling preference. getSchedulingPreference()351 Sched::Preference getSchedulingPreference() const { 352 return SchedPreferenceInfo; 353 } 354 355 /// Some scheduler, e.g. hybrid, can switch to different scheduling heuristics 356 /// for different nodes. This function returns the preference (or none) for 357 /// the given node. getSchedulingPreference(SDNode *)358 virtual Sched::Preference getSchedulingPreference(SDNode *) const { 359 return Sched::None; 360 } 361 362 /// Return the register class that should be used for the specified value 363 /// type. getRegClassFor(MVT VT)364 virtual const TargetRegisterClass *getRegClassFor(MVT VT) const { 365 const TargetRegisterClass *RC = RegClassForVT[VT.SimpleTy]; 366 assert(RC && "This value type is not natively supported!"); 367 return RC; 368 } 369 370 /// Return the 'representative' register class for the specified value 371 /// type. 372 /// 373 /// The 'representative' register class is the largest legal super-reg 374 /// register class for the register class of the value type. For example, on 375 /// i386 the rep register class for i8, i16, and i32 are GR32; while the rep 376 /// register class is GR64 on x86_64. getRepRegClassFor(MVT VT)377 virtual const TargetRegisterClass *getRepRegClassFor(MVT VT) const { 378 const TargetRegisterClass *RC = RepRegClassForVT[VT.SimpleTy]; 379 return RC; 380 } 381 382 /// Return the cost of the 'representative' register class for the specified 383 /// value type. getRepRegClassCostFor(MVT VT)384 virtual uint8_t getRepRegClassCostFor(MVT VT) const { 385 return RepRegClassCostForVT[VT.SimpleTy]; 386 } 387 388 /// Return true if the target has native support for the specified value type. 389 /// This means that it has a register that directly holds it without 390 /// promotions or expansions. isTypeLegal(EVT VT)391 bool isTypeLegal(EVT VT) const { 392 assert(!VT.isSimple() || 393 (unsigned)VT.getSimpleVT().SimpleTy < array_lengthof(RegClassForVT)); 394 return VT.isSimple() && RegClassForVT[VT.getSimpleVT().SimpleTy] != nullptr; 395 } 396 397 class ValueTypeActionImpl { 398 /// ValueTypeActions - For each value type, keep a LegalizeTypeAction enum 399 /// that indicates how instruction selection should deal with the type. 400 uint8_t ValueTypeActions[MVT::LAST_VALUETYPE]; 401 402 public: ValueTypeActionImpl()403 ValueTypeActionImpl() { 404 std::fill(std::begin(ValueTypeActions), std::end(ValueTypeActions), 0); 405 } 406 getTypeAction(MVT VT)407 LegalizeTypeAction getTypeAction(MVT VT) const { 408 return (LegalizeTypeAction)ValueTypeActions[VT.SimpleTy]; 409 } 410 setTypeAction(MVT VT,LegalizeTypeAction Action)411 void setTypeAction(MVT VT, LegalizeTypeAction Action) { 412 unsigned I = VT.SimpleTy; 413 ValueTypeActions[I] = Action; 414 } 415 }; 416 getValueTypeActions()417 const ValueTypeActionImpl &getValueTypeActions() const { 418 return ValueTypeActions; 419 } 420 421 /// Return how we should legalize values of this type, either it is already 422 /// legal (return 'Legal') or we need to promote it to a larger type (return 423 /// 'Promote'), or we need to expand it into multiple registers of smaller 424 /// integer type (return 'Expand'). 'Custom' is not an option. getTypeAction(LLVMContext & Context,EVT VT)425 LegalizeTypeAction getTypeAction(LLVMContext &Context, EVT VT) const { 426 return getTypeConversion(Context, VT).first; 427 } getTypeAction(MVT VT)428 LegalizeTypeAction getTypeAction(MVT VT) const { 429 return ValueTypeActions.getTypeAction(VT); 430 } 431 432 /// For types supported by the target, this is an identity function. For 433 /// types that must be promoted to larger types, this returns the larger type 434 /// to promote to. For integer types that are larger than the largest integer 435 /// register, this contains one step in the expansion to get to the smaller 436 /// register. For illegal floating point types, this returns the integer type 437 /// to transform to. getTypeToTransformTo(LLVMContext & Context,EVT VT)438 EVT getTypeToTransformTo(LLVMContext &Context, EVT VT) const { 439 return getTypeConversion(Context, VT).second; 440 } 441 442 /// For types supported by the target, this is an identity function. For 443 /// types that must be expanded (i.e. integer types that are larger than the 444 /// largest integer register or illegal floating point types), this returns 445 /// the largest legal type it will be expanded to. getTypeToExpandTo(LLVMContext & Context,EVT VT)446 EVT getTypeToExpandTo(LLVMContext &Context, EVT VT) const { 447 assert(!VT.isVector()); 448 while (true) { 449 switch (getTypeAction(Context, VT)) { 450 case TypeLegal: 451 return VT; 452 case TypeExpandInteger: 453 VT = getTypeToTransformTo(Context, VT); 454 break; 455 default: 456 llvm_unreachable("Type is not legal nor is it to be expanded!"); 457 } 458 } 459 } 460 461 /// Vector types are broken down into some number of legal first class types. 462 /// For example, EVT::v8f32 maps to 2 EVT::v4f32 with Altivec or SSE1, or 8 463 /// promoted EVT::f64 values with the X86 FP stack. Similarly, EVT::v2i64 464 /// turns into 4 EVT::i32 values with both PPC and X86. 465 /// 466 /// This method returns the number of registers needed, and the VT for each 467 /// register. It also returns the VT and quantity of the intermediate values 468 /// before they are promoted/expanded. 469 unsigned getVectorTypeBreakdown(LLVMContext &Context, EVT VT, 470 EVT &IntermediateVT, 471 unsigned &NumIntermediates, 472 MVT &RegisterVT) const; 473 474 struct IntrinsicInfo { 475 unsigned opc; // target opcode 476 EVT memVT; // memory VT 477 const Value* ptrVal; // value representing memory location 478 int offset; // offset off of ptrVal 479 unsigned size; // the size of the memory location 480 // (taken from memVT if zero) 481 unsigned align; // alignment 482 bool vol; // is volatile? 483 bool readMem; // reads memory? 484 bool writeMem; // writes memory? 485 IntrinsicInfoIntrinsicInfo486 IntrinsicInfo() : opc(0), ptrVal(nullptr), offset(0), size(0), align(1), 487 vol(false), readMem(false), writeMem(false) {} 488 }; 489 490 /// Given an intrinsic, checks if on the target the intrinsic will need to map 491 /// to a MemIntrinsicNode (touches memory). If this is the case, it returns 492 /// true and store the intrinsic information into the IntrinsicInfo that was 493 /// passed to the function. getTgtMemIntrinsic(IntrinsicInfo &,const CallInst &,unsigned)494 virtual bool getTgtMemIntrinsic(IntrinsicInfo &, const CallInst &, 495 unsigned /*Intrinsic*/) const { 496 return false; 497 } 498 499 /// Returns true if the target can instruction select the specified FP 500 /// immediate natively. If false, the legalizer will materialize the FP 501 /// immediate as a load from a constant pool. isFPImmLegal(const APFloat &,EVT)502 virtual bool isFPImmLegal(const APFloat &/*Imm*/, EVT /*VT*/) const { 503 return false; 504 } 505 506 /// Targets can use this to indicate that they only support *some* 507 /// VECTOR_SHUFFLE operations, those with specific masks. By default, if a 508 /// target supports the VECTOR_SHUFFLE node, all mask values are assumed to be 509 /// legal. isShuffleMaskLegal(const SmallVectorImpl<int> &,EVT)510 virtual bool isShuffleMaskLegal(const SmallVectorImpl<int> &/*Mask*/, 511 EVT /*VT*/) const { 512 return true; 513 } 514 515 /// Returns true if the operation can trap for the value type. 516 /// 517 /// VT must be a legal type. By default, we optimistically assume most 518 /// operations don't trap except for divide and remainder. 519 virtual bool canOpTrap(unsigned Op, EVT VT) const; 520 521 /// Similar to isShuffleMaskLegal. This is used by Targets can use this to 522 /// indicate if there is a suitable VECTOR_SHUFFLE that can be used to replace 523 /// a VAND with a constant pool entry. isVectorClearMaskLegal(const SmallVectorImpl<int> &,EVT)524 virtual bool isVectorClearMaskLegal(const SmallVectorImpl<int> &/*Mask*/, 525 EVT /*VT*/) const { 526 return false; 527 } 528 529 /// Return how this operation should be treated: either it is legal, needs to 530 /// be promoted to a larger size, needs to be expanded to some other code 531 /// sequence, or the target has a custom expander for it. getOperationAction(unsigned Op,EVT VT)532 LegalizeAction getOperationAction(unsigned Op, EVT VT) const { 533 if (VT.isExtended()) return Expand; 534 // If a target-specific SDNode requires legalization, require the target 535 // to provide custom legalization for it. 536 if (Op > array_lengthof(OpActions[0])) return Custom; 537 unsigned I = (unsigned) VT.getSimpleVT().SimpleTy; 538 return (LegalizeAction)OpActions[I][Op]; 539 } 540 541 /// Return true if the specified operation is legal on this target or can be 542 /// made legal with custom lowering. This is used to help guide high-level 543 /// lowering decisions. isOperationLegalOrCustom(unsigned Op,EVT VT)544 bool isOperationLegalOrCustom(unsigned Op, EVT VT) const { 545 return (VT == MVT::Other || isTypeLegal(VT)) && 546 (getOperationAction(Op, VT) == Legal || 547 getOperationAction(Op, VT) == Custom); 548 } 549 550 /// Return true if the specified operation is legal on this target or can be 551 /// made legal using promotion. This is used to help guide high-level lowering 552 /// decisions. isOperationLegalOrPromote(unsigned Op,EVT VT)553 bool isOperationLegalOrPromote(unsigned Op, EVT VT) const { 554 return (VT == MVT::Other || isTypeLegal(VT)) && 555 (getOperationAction(Op, VT) == Legal || 556 getOperationAction(Op, VT) == Promote); 557 } 558 559 /// Return true if the specified operation is illegal on this target or 560 /// unlikely to be made legal with custom lowering. This is used to help guide 561 /// high-level lowering decisions. isOperationExpand(unsigned Op,EVT VT)562 bool isOperationExpand(unsigned Op, EVT VT) const { 563 return (!isTypeLegal(VT) || getOperationAction(Op, VT) == Expand); 564 } 565 566 /// Return true if the specified operation is legal on this target. isOperationLegal(unsigned Op,EVT VT)567 bool isOperationLegal(unsigned Op, EVT VT) const { 568 return (VT == MVT::Other || isTypeLegal(VT)) && 569 getOperationAction(Op, VT) == Legal; 570 } 571 572 /// Return how this load with extension should be treated: either it is legal, 573 /// needs to be promoted to a larger size, needs to be expanded to some other 574 /// code sequence, or the target has a custom expander for it. getLoadExtAction(unsigned ExtType,EVT ValVT,EVT MemVT)575 LegalizeAction getLoadExtAction(unsigned ExtType, EVT ValVT, EVT MemVT) const { 576 if (ValVT.isExtended() || MemVT.isExtended()) return Expand; 577 unsigned ValI = (unsigned) ValVT.getSimpleVT().SimpleTy; 578 unsigned MemI = (unsigned) MemVT.getSimpleVT().SimpleTy; 579 assert(ExtType < ISD::LAST_LOADEXT_TYPE && ValI < MVT::LAST_VALUETYPE && 580 MemI < MVT::LAST_VALUETYPE && "Table isn't big enough!"); 581 return (LegalizeAction)LoadExtActions[ValI][MemI][ExtType]; 582 } 583 584 /// Return true if the specified load with extension is legal on this target. isLoadExtLegal(unsigned ExtType,EVT ValVT,EVT MemVT)585 bool isLoadExtLegal(unsigned ExtType, EVT ValVT, EVT MemVT) const { 586 return ValVT.isSimple() && MemVT.isSimple() && 587 getLoadExtAction(ExtType, ValVT, MemVT) == Legal; 588 } 589 590 /// Return true if the specified load with extension is legal or custom 591 /// on this target. isLoadExtLegalOrCustom(unsigned ExtType,EVT ValVT,EVT MemVT)592 bool isLoadExtLegalOrCustom(unsigned ExtType, EVT ValVT, EVT MemVT) const { 593 return ValVT.isSimple() && MemVT.isSimple() && 594 (getLoadExtAction(ExtType, ValVT, MemVT) == Legal || 595 getLoadExtAction(ExtType, ValVT, MemVT) == Custom); 596 } 597 598 /// Return how this store with truncation should be treated: either it is 599 /// legal, needs to be promoted to a larger size, needs to be expanded to some 600 /// other code sequence, or the target has a custom expander for it. getTruncStoreAction(EVT ValVT,EVT MemVT)601 LegalizeAction getTruncStoreAction(EVT ValVT, EVT MemVT) const { 602 if (ValVT.isExtended() || MemVT.isExtended()) return Expand; 603 unsigned ValI = (unsigned) ValVT.getSimpleVT().SimpleTy; 604 unsigned MemI = (unsigned) MemVT.getSimpleVT().SimpleTy; 605 assert(ValI < MVT::LAST_VALUETYPE && MemI < MVT::LAST_VALUETYPE && 606 "Table isn't big enough!"); 607 return (LegalizeAction)TruncStoreActions[ValI][MemI]; 608 } 609 610 /// Return true if the specified store with truncation is legal on this 611 /// target. isTruncStoreLegal(EVT ValVT,EVT MemVT)612 bool isTruncStoreLegal(EVT ValVT, EVT MemVT) const { 613 return isTypeLegal(ValVT) && MemVT.isSimple() && 614 getTruncStoreAction(ValVT.getSimpleVT(), MemVT.getSimpleVT()) == Legal; 615 } 616 617 /// Return how the indexed load should be treated: either it is legal, needs 618 /// to be promoted to a larger size, needs to be expanded to some other code 619 /// sequence, or the target has a custom expander for it. 620 LegalizeAction getIndexedLoadAction(unsigned IdxMode,MVT VT)621 getIndexedLoadAction(unsigned IdxMode, MVT VT) const { 622 assert(IdxMode < ISD::LAST_INDEXED_MODE && VT.isValid() && 623 "Table isn't big enough!"); 624 unsigned Ty = (unsigned)VT.SimpleTy; 625 return (LegalizeAction)((IndexedModeActions[Ty][IdxMode] & 0xf0) >> 4); 626 } 627 628 /// Return true if the specified indexed load is legal on this target. isIndexedLoadLegal(unsigned IdxMode,EVT VT)629 bool isIndexedLoadLegal(unsigned IdxMode, EVT VT) const { 630 return VT.isSimple() && 631 (getIndexedLoadAction(IdxMode, VT.getSimpleVT()) == Legal || 632 getIndexedLoadAction(IdxMode, VT.getSimpleVT()) == Custom); 633 } 634 635 /// Return how the indexed store should be treated: either it is legal, needs 636 /// to be promoted to a larger size, needs to be expanded to some other code 637 /// sequence, or the target has a custom expander for it. 638 LegalizeAction getIndexedStoreAction(unsigned IdxMode,MVT VT)639 getIndexedStoreAction(unsigned IdxMode, MVT VT) const { 640 assert(IdxMode < ISD::LAST_INDEXED_MODE && VT.isValid() && 641 "Table isn't big enough!"); 642 unsigned Ty = (unsigned)VT.SimpleTy; 643 return (LegalizeAction)(IndexedModeActions[Ty][IdxMode] & 0x0f); 644 } 645 646 /// Return true if the specified indexed load is legal on this target. isIndexedStoreLegal(unsigned IdxMode,EVT VT)647 bool isIndexedStoreLegal(unsigned IdxMode, EVT VT) const { 648 return VT.isSimple() && 649 (getIndexedStoreAction(IdxMode, VT.getSimpleVT()) == Legal || 650 getIndexedStoreAction(IdxMode, VT.getSimpleVT()) == Custom); 651 } 652 653 /// Return how the condition code should be treated: either it is legal, needs 654 /// to be expanded to some other code sequence, or the target has a custom 655 /// expander for it. 656 LegalizeAction getCondCodeAction(ISD::CondCode CC,MVT VT)657 getCondCodeAction(ISD::CondCode CC, MVT VT) const { 658 assert((unsigned)CC < array_lengthof(CondCodeActions) && 659 ((unsigned)VT.SimpleTy >> 4) < array_lengthof(CondCodeActions[0]) && 660 "Table isn't big enough!"); 661 // See setCondCodeAction for how this is encoded. 662 uint32_t Shift = 2 * (VT.SimpleTy & 0xF); 663 uint32_t Value = CondCodeActions[CC][VT.SimpleTy >> 4]; 664 LegalizeAction Action = (LegalizeAction) ((Value >> Shift) & 0x3); 665 assert(Action != Promote && "Can't promote condition code!"); 666 return Action; 667 } 668 669 /// Return true if the specified condition code is legal on this target. isCondCodeLegal(ISD::CondCode CC,MVT VT)670 bool isCondCodeLegal(ISD::CondCode CC, MVT VT) const { 671 return 672 getCondCodeAction(CC, VT) == Legal || 673 getCondCodeAction(CC, VT) == Custom; 674 } 675 676 677 /// If the action for this operation is to promote, this method returns the 678 /// ValueType to promote to. getTypeToPromoteTo(unsigned Op,MVT VT)679 MVT getTypeToPromoteTo(unsigned Op, MVT VT) const { 680 assert(getOperationAction(Op, VT) == Promote && 681 "This operation isn't promoted!"); 682 683 // See if this has an explicit type specified. 684 std::map<std::pair<unsigned, MVT::SimpleValueType>, 685 MVT::SimpleValueType>::const_iterator PTTI = 686 PromoteToType.find(std::make_pair(Op, VT.SimpleTy)); 687 if (PTTI != PromoteToType.end()) return PTTI->second; 688 689 assert((VT.isInteger() || VT.isFloatingPoint()) && 690 "Cannot autopromote this type, add it with AddPromotedToType."); 691 692 MVT NVT = VT; 693 do { 694 NVT = (MVT::SimpleValueType)(NVT.SimpleTy+1); 695 assert(NVT.isInteger() == VT.isInteger() && NVT != MVT::isVoid && 696 "Didn't find type to promote to!"); 697 } while (!isTypeLegal(NVT) || 698 getOperationAction(Op, NVT) == Promote); 699 return NVT; 700 } 701 702 /// Return the EVT corresponding to this LLVM type. This is fixed by the LLVM 703 /// operations except for the pointer size. If AllowUnknown is true, this 704 /// will return MVT::Other for types with no EVT counterpart (e.g. structs), 705 /// otherwise it will assert. 706 EVT getValueType(Type *Ty, bool AllowUnknown = false) const { 707 // Lower scalar pointers to native pointer types. 708 if (PointerType *PTy = dyn_cast<PointerType>(Ty)) 709 return getPointerTy(PTy->getAddressSpace()); 710 711 if (Ty->isVectorTy()) { 712 VectorType *VTy = cast<VectorType>(Ty); 713 Type *Elm = VTy->getElementType(); 714 // Lower vectors of pointers to native pointer types. 715 if (PointerType *PT = dyn_cast<PointerType>(Elm)) { 716 EVT PointerTy(getPointerTy(PT->getAddressSpace())); 717 Elm = PointerTy.getTypeForEVT(Ty->getContext()); 718 } 719 720 return EVT::getVectorVT(Ty->getContext(), EVT::getEVT(Elm, false), 721 VTy->getNumElements()); 722 } 723 return EVT::getEVT(Ty, AllowUnknown); 724 } 725 726 /// Return the MVT corresponding to this LLVM type. See getValueType. 727 MVT getSimpleValueType(Type *Ty, bool AllowUnknown = false) const { 728 return getValueType(Ty, AllowUnknown).getSimpleVT(); 729 } 730 731 /// Return the desired alignment for ByVal or InAlloca aggregate function 732 /// arguments in the caller parameter area. This is the actual alignment, not 733 /// its logarithm. 734 virtual unsigned getByValTypeAlignment(Type *Ty) const; 735 736 /// Return the type of registers that this ValueType will eventually require. getRegisterType(MVT VT)737 MVT getRegisterType(MVT VT) const { 738 assert((unsigned)VT.SimpleTy < array_lengthof(RegisterTypeForVT)); 739 return RegisterTypeForVT[VT.SimpleTy]; 740 } 741 742 /// Return the type of registers that this ValueType will eventually require. getRegisterType(LLVMContext & Context,EVT VT)743 MVT getRegisterType(LLVMContext &Context, EVT VT) const { 744 if (VT.isSimple()) { 745 assert((unsigned)VT.getSimpleVT().SimpleTy < 746 array_lengthof(RegisterTypeForVT)); 747 return RegisterTypeForVT[VT.getSimpleVT().SimpleTy]; 748 } 749 if (VT.isVector()) { 750 EVT VT1; 751 MVT RegisterVT; 752 unsigned NumIntermediates; 753 (void)getVectorTypeBreakdown(Context, VT, VT1, 754 NumIntermediates, RegisterVT); 755 return RegisterVT; 756 } 757 if (VT.isInteger()) { 758 return getRegisterType(Context, getTypeToTransformTo(Context, VT)); 759 } 760 llvm_unreachable("Unsupported extended type!"); 761 } 762 763 /// Return the number of registers that this ValueType will eventually 764 /// require. 765 /// 766 /// This is one for any types promoted to live in larger registers, but may be 767 /// more than one for types (like i64) that are split into pieces. For types 768 /// like i140, which are first promoted then expanded, it is the number of 769 /// registers needed to hold all the bits of the original type. For an i140 770 /// on a 32 bit machine this means 5 registers. getNumRegisters(LLVMContext & Context,EVT VT)771 unsigned getNumRegisters(LLVMContext &Context, EVT VT) const { 772 if (VT.isSimple()) { 773 assert((unsigned)VT.getSimpleVT().SimpleTy < 774 array_lengthof(NumRegistersForVT)); 775 return NumRegistersForVT[VT.getSimpleVT().SimpleTy]; 776 } 777 if (VT.isVector()) { 778 EVT VT1; 779 MVT VT2; 780 unsigned NumIntermediates; 781 return getVectorTypeBreakdown(Context, VT, VT1, NumIntermediates, VT2); 782 } 783 if (VT.isInteger()) { 784 unsigned BitWidth = VT.getSizeInBits(); 785 unsigned RegWidth = getRegisterType(Context, VT).getSizeInBits(); 786 return (BitWidth + RegWidth - 1) / RegWidth; 787 } 788 llvm_unreachable("Unsupported extended type!"); 789 } 790 791 /// If true, then instruction selection should seek to shrink the FP constant 792 /// of the specified type to a smaller type in order to save space and / or 793 /// reduce runtime. ShouldShrinkFPConstant(EVT)794 virtual bool ShouldShrinkFPConstant(EVT) const { return true; } 795 796 // Return true if it is profitable to reduce the given load node to a smaller 797 // type. 798 // 799 // e.g. (i16 (trunc (i32 (load x))) -> i16 load x should be performed shouldReduceLoadWidth(SDNode * Load,ISD::LoadExtType ExtTy,EVT NewVT)800 virtual bool shouldReduceLoadWidth(SDNode *Load, 801 ISD::LoadExtType ExtTy, 802 EVT NewVT) const { 803 return true; 804 } 805 806 /// When splitting a value of the specified type into parts, does the Lo 807 /// or Hi part come first? This usually follows the endianness, except 808 /// for ppcf128, where the Hi part always comes first. hasBigEndianPartOrdering(EVT VT)809 bool hasBigEndianPartOrdering(EVT VT) const { 810 return isBigEndian() || VT == MVT::ppcf128; 811 } 812 813 /// If true, the target has custom DAG combine transformations that it can 814 /// perform for the specified node. hasTargetDAGCombine(ISD::NodeType NT)815 bool hasTargetDAGCombine(ISD::NodeType NT) const { 816 assert(unsigned(NT >> 3) < array_lengthof(TargetDAGCombineArray)); 817 return TargetDAGCombineArray[NT >> 3] & (1 << (NT&7)); 818 } 819 820 /// \brief Get maximum # of store operations permitted for llvm.memset 821 /// 822 /// This function returns the maximum number of store operations permitted 823 /// to replace a call to llvm.memset. The value is set by the target at the 824 /// performance threshold for such a replacement. If OptSize is true, 825 /// return the limit for functions that have OptSize attribute. getMaxStoresPerMemset(bool OptSize)826 unsigned getMaxStoresPerMemset(bool OptSize) const { 827 return OptSize ? MaxStoresPerMemsetOptSize : MaxStoresPerMemset; 828 } 829 830 /// \brief Get maximum # of store operations permitted for llvm.memcpy 831 /// 832 /// This function returns the maximum number of store operations permitted 833 /// to replace a call to llvm.memcpy. The value is set by the target at the 834 /// performance threshold for such a replacement. If OptSize is true, 835 /// return the limit for functions that have OptSize attribute. getMaxStoresPerMemcpy(bool OptSize)836 unsigned getMaxStoresPerMemcpy(bool OptSize) const { 837 return OptSize ? MaxStoresPerMemcpyOptSize : MaxStoresPerMemcpy; 838 } 839 840 /// \brief Get maximum # of store operations permitted for llvm.memmove 841 /// 842 /// This function returns the maximum number of store operations permitted 843 /// to replace a call to llvm.memmove. The value is set by the target at the 844 /// performance threshold for such a replacement. If OptSize is true, 845 /// return the limit for functions that have OptSize attribute. getMaxStoresPerMemmove(bool OptSize)846 unsigned getMaxStoresPerMemmove(bool OptSize) const { 847 return OptSize ? MaxStoresPerMemmoveOptSize : MaxStoresPerMemmove; 848 } 849 850 /// \brief Determine if the target supports unaligned memory accesses. 851 /// 852 /// This function returns true if the target allows unaligned memory accesses 853 /// of the specified type in the given address space. If true, it also returns 854 /// whether the unaligned memory access is "fast" in the last argument by 855 /// reference. This is used, for example, in situations where an array 856 /// copy/move/set is converted to a sequence of store operations. Its use 857 /// helps to ensure that such replacements don't generate code that causes an 858 /// alignment error (trap) on the target machine. 859 virtual bool allowsMisalignedMemoryAccesses(EVT, 860 unsigned AddrSpace = 0, 861 unsigned Align = 1, 862 bool * /*Fast*/ = nullptr) const { 863 return false; 864 } 865 866 /// Returns the target specific optimal type for load and store operations as 867 /// a result of memset, memcpy, and memmove lowering. 868 /// 869 /// If DstAlign is zero that means it's safe to destination alignment can 870 /// satisfy any constraint. Similarly if SrcAlign is zero it means there isn't 871 /// a need to check it against alignment requirement, probably because the 872 /// source does not need to be loaded. If 'IsMemset' is true, that means it's 873 /// expanding a memset. If 'ZeroMemset' is true, that means it's a memset of 874 /// zero. 'MemcpyStrSrc' indicates whether the memcpy source is constant so it 875 /// does not need to be loaded. It returns EVT::Other if the type should be 876 /// determined using generic target-independent logic. getOptimalMemOpType(uint64_t,unsigned,unsigned,bool,bool,bool,MachineFunction &)877 virtual EVT getOptimalMemOpType(uint64_t /*Size*/, 878 unsigned /*DstAlign*/, unsigned /*SrcAlign*/, 879 bool /*IsMemset*/, 880 bool /*ZeroMemset*/, 881 bool /*MemcpyStrSrc*/, 882 MachineFunction &/*MF*/) const { 883 return MVT::Other; 884 } 885 886 /// Returns true if it's safe to use load / store of the specified type to 887 /// expand memcpy / memset inline. 888 /// 889 /// This is mostly true for all types except for some special cases. For 890 /// example, on X86 targets without SSE2 f64 load / store are done with fldl / 891 /// fstpl which also does type conversion. Note the specified type doesn't 892 /// have to be legal as the hook is used before type legalization. isSafeMemOpType(MVT)893 virtual bool isSafeMemOpType(MVT /*VT*/) const { return true; } 894 895 /// Determine if we should use _setjmp or setjmp to implement llvm.setjmp. usesUnderscoreSetJmp()896 bool usesUnderscoreSetJmp() const { 897 return UseUnderscoreSetJmp; 898 } 899 900 /// Determine if we should use _longjmp or longjmp to implement llvm.longjmp. usesUnderscoreLongJmp()901 bool usesUnderscoreLongJmp() const { 902 return UseUnderscoreLongJmp; 903 } 904 905 /// Return integer threshold on number of blocks to use jump tables rather 906 /// than if sequence. getMinimumJumpTableEntries()907 int getMinimumJumpTableEntries() const { 908 return MinimumJumpTableEntries; 909 } 910 911 /// If a physical register, this specifies the register that 912 /// llvm.savestack/llvm.restorestack should save and restore. getStackPointerRegisterToSaveRestore()913 unsigned getStackPointerRegisterToSaveRestore() const { 914 return StackPointerRegisterToSaveRestore; 915 } 916 917 /// If a physical register, this returns the register that receives the 918 /// exception address on entry to a landing pad. getExceptionPointerRegister()919 unsigned getExceptionPointerRegister() const { 920 return ExceptionPointerRegister; 921 } 922 923 /// If a physical register, this returns the register that receives the 924 /// exception typeid on entry to a landing pad. getExceptionSelectorRegister()925 unsigned getExceptionSelectorRegister() const { 926 return ExceptionSelectorRegister; 927 } 928 929 /// Returns the target's jmp_buf size in bytes (if never set, the default is 930 /// 200) getJumpBufSize()931 unsigned getJumpBufSize() const { 932 return JumpBufSize; 933 } 934 935 /// Returns the target's jmp_buf alignment in bytes (if never set, the default 936 /// is 0) getJumpBufAlignment()937 unsigned getJumpBufAlignment() const { 938 return JumpBufAlignment; 939 } 940 941 /// Return the minimum stack alignment of an argument. getMinStackArgumentAlignment()942 unsigned getMinStackArgumentAlignment() const { 943 return MinStackArgumentAlignment; 944 } 945 946 /// Return the minimum function alignment. getMinFunctionAlignment()947 unsigned getMinFunctionAlignment() const { 948 return MinFunctionAlignment; 949 } 950 951 /// Return the preferred function alignment. getPrefFunctionAlignment()952 unsigned getPrefFunctionAlignment() const { 953 return PrefFunctionAlignment; 954 } 955 956 /// Return the preferred loop alignment. 957 virtual unsigned getPrefLoopAlignment(MachineLoop *ML = nullptr) const { 958 return PrefLoopAlignment; 959 } 960 961 /// Return whether the DAG builder should automatically insert fences and 962 /// reduce ordering for atomics. getInsertFencesForAtomic()963 bool getInsertFencesForAtomic() const { 964 return InsertFencesForAtomic; 965 } 966 967 /// Return true if the target stores stack protector cookies at a fixed offset 968 /// in some non-standard address space, and populates the address space and 969 /// offset as appropriate. getStackCookieLocation(unsigned &,unsigned &)970 virtual bool getStackCookieLocation(unsigned &/*AddressSpace*/, 971 unsigned &/*Offset*/) const { 972 return false; 973 } 974 975 /// Returns true if a cast between SrcAS and DestAS is a noop. isNoopAddrSpaceCast(unsigned SrcAS,unsigned DestAS)976 virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const { 977 return false; 978 } 979 980 /// Return true if the pointer arguments to CI should be aligned by aligning 981 /// the object whose address is being passed. If so then MinSize is set to the 982 /// minimum size the object must be to be aligned and PrefAlign is set to the 983 /// preferred alignment. shouldAlignPointerArgs(CallInst *,unsigned &,unsigned &)984 virtual bool shouldAlignPointerArgs(CallInst * /*CI*/, unsigned & /*MinSize*/, 985 unsigned & /*PrefAlign*/) const { 986 return false; 987 } 988 989 //===--------------------------------------------------------------------===// 990 /// \name Helpers for TargetTransformInfo implementations 991 /// @{ 992 993 /// Get the ISD node that corresponds to the Instruction class opcode. 994 int InstructionOpcodeToISD(unsigned Opcode) const; 995 996 /// Estimate the cost of type-legalization and the legalized type. 997 std::pair<unsigned, MVT> getTypeLegalizationCost(Type *Ty) const; 998 999 /// @} 1000 1001 //===--------------------------------------------------------------------===// 1002 /// \name Helpers for atomic expansion. 1003 /// @{ 1004 1005 /// True if AtomicExpandPass should use emitLoadLinked/emitStoreConditional 1006 /// and expand AtomicCmpXchgInst. hasLoadLinkedStoreConditional()1007 virtual bool hasLoadLinkedStoreConditional() const { return false; } 1008 1009 /// Perform a load-linked operation on Addr, returning a "Value *" with the 1010 /// corresponding pointee type. This may entail some non-trivial operations to 1011 /// truncate or reconstruct types that will be illegal in the backend. See 1012 /// ARMISelLowering for an example implementation. emitLoadLinked(IRBuilder<> & Builder,Value * Addr,AtomicOrdering Ord)1013 virtual Value *emitLoadLinked(IRBuilder<> &Builder, Value *Addr, 1014 AtomicOrdering Ord) const { 1015 llvm_unreachable("Load linked unimplemented on this target"); 1016 } 1017 1018 /// Perform a store-conditional operation to Addr. Return the status of the 1019 /// store. This should be 0 if the store succeeded, non-zero otherwise. emitStoreConditional(IRBuilder<> & Builder,Value * Val,Value * Addr,AtomicOrdering Ord)1020 virtual Value *emitStoreConditional(IRBuilder<> &Builder, Value *Val, 1021 Value *Addr, AtomicOrdering Ord) const { 1022 llvm_unreachable("Store conditional unimplemented on this target"); 1023 } 1024 1025 /// Inserts in the IR a target-specific intrinsic specifying a fence. 1026 /// It is called by AtomicExpandPass before expanding an 1027 /// AtomicRMW/AtomicCmpXchg/AtomicStore/AtomicLoad. 1028 /// RMW and CmpXchg set both IsStore and IsLoad to true. 1029 /// This function should either return a nullptr, or a pointer to an IR-level 1030 /// Instruction*. Even complex fence sequences can be represented by a 1031 /// single Instruction* through an intrinsic to be lowered later. 1032 /// Backends with !getInsertFencesForAtomic() should keep a no-op here. 1033 /// Backends should override this method to produce target-specific intrinsic 1034 /// for their fences. 1035 /// FIXME: Please note that the default implementation here in terms of 1036 /// IR-level fences exists for historical/compatibility reasons and is 1037 /// *unsound* ! Fences cannot, in general, be used to restore sequential 1038 /// consistency. For example, consider the following example: 1039 /// atomic<int> x = y = 0; 1040 /// int r1, r2, r3, r4; 1041 /// Thread 0: 1042 /// x.store(1); 1043 /// Thread 1: 1044 /// y.store(1); 1045 /// Thread 2: 1046 /// r1 = x.load(); 1047 /// r2 = y.load(); 1048 /// Thread 3: 1049 /// r3 = y.load(); 1050 /// r4 = x.load(); 1051 /// r1 = r3 = 1 and r2 = r4 = 0 is impossible as long as the accesses are all 1052 /// seq_cst. But if they are lowered to monotonic accesses, no amount of 1053 /// IR-level fences can prevent it. 1054 /// @{ emitLeadingFence(IRBuilder<> & Builder,AtomicOrdering Ord,bool IsStore,bool IsLoad)1055 virtual Instruction* emitLeadingFence(IRBuilder<> &Builder, AtomicOrdering Ord, 1056 bool IsStore, bool IsLoad) const { 1057 if (!getInsertFencesForAtomic()) 1058 return nullptr; 1059 1060 if (isAtLeastRelease(Ord) && IsStore) 1061 return Builder.CreateFence(Ord); 1062 else 1063 return nullptr; 1064 } 1065 emitTrailingFence(IRBuilder<> & Builder,AtomicOrdering Ord,bool IsStore,bool IsLoad)1066 virtual Instruction* emitTrailingFence(IRBuilder<> &Builder, AtomicOrdering Ord, 1067 bool IsStore, bool IsLoad) const { 1068 if (!getInsertFencesForAtomic()) 1069 return nullptr; 1070 1071 if (isAtLeastAcquire(Ord)) 1072 return Builder.CreateFence(Ord); 1073 else 1074 return nullptr; 1075 } 1076 /// @} 1077 1078 /// Returns true if the given (atomic) store should be expanded by the 1079 /// IR-level AtomicExpand pass into an "atomic xchg" which ignores its input. shouldExpandAtomicStoreInIR(StoreInst * SI)1080 virtual bool shouldExpandAtomicStoreInIR(StoreInst *SI) const { 1081 return false; 1082 } 1083 1084 /// Returns true if arguments should be sign-extended in lib calls. shouldSignExtendTypeInLibCall(EVT Type,bool IsSigned)1085 virtual bool shouldSignExtendTypeInLibCall(EVT Type, bool IsSigned) const { 1086 return IsSigned; 1087 } 1088 1089 /// Returns true if the given (atomic) load should be expanded by the 1090 /// IR-level AtomicExpand pass into a load-linked instruction 1091 /// (through emitLoadLinked()). shouldExpandAtomicLoadInIR(LoadInst * LI)1092 virtual bool shouldExpandAtomicLoadInIR(LoadInst *LI) const { return false; } 1093 1094 /// Returns how the IR-level AtomicExpand pass should expand the given 1095 /// AtomicRMW, if at all. Default is to never expand. 1096 virtual AtomicRMWExpansionKind shouldExpandAtomicRMWInIR(AtomicRMWInst *)1097 shouldExpandAtomicRMWInIR(AtomicRMWInst *) const { 1098 return AtomicRMWExpansionKind::None; 1099 } 1100 1101 /// On some platforms, an AtomicRMW that never actually modifies the value 1102 /// (such as fetch_add of 0) can be turned into a fence followed by an 1103 /// atomic load. This may sound useless, but it makes it possible for the 1104 /// processor to keep the cacheline shared, dramatically improving 1105 /// performance. And such idempotent RMWs are useful for implementing some 1106 /// kinds of locks, see for example (justification + benchmarks): 1107 /// http://www.hpl.hp.com/techreports/2012/HPL-2012-68.pdf 1108 /// This method tries doing that transformation, returning the atomic load if 1109 /// it succeeds, and nullptr otherwise. 1110 /// If shouldExpandAtomicLoadInIR returns true on that load, it will undergo 1111 /// another round of expansion. lowerIdempotentRMWIntoFencedLoad(AtomicRMWInst * RMWI)1112 virtual LoadInst *lowerIdempotentRMWIntoFencedLoad(AtomicRMWInst *RMWI) const { 1113 return nullptr; 1114 } 1115 1116 /// Returns true if we should normalize 1117 /// select(N0&N1, X, Y) => select(N0, select(N1, X, Y), Y) and 1118 /// select(N0|N1, X, Y) => select(N0, select(N1, X, Y, Y)) if it is likely 1119 /// that it saves us from materializing N0 and N1 in an integer register. 1120 /// Targets that are able to perform and/or on flags should return false here. shouldNormalizeToSelectSequence(LLVMContext & Context,EVT VT)1121 virtual bool shouldNormalizeToSelectSequence(LLVMContext &Context, 1122 EVT VT) const { 1123 // If a target has multiple condition registers, then it likely has logical 1124 // operations on those registers. 1125 if (hasMultipleConditionRegisters()) 1126 return false; 1127 // Only do the transform if the value won't be split into multiple 1128 // registers. 1129 LegalizeTypeAction Action = getTypeAction(Context, VT); 1130 return Action != TypeExpandInteger && Action != TypeExpandFloat && 1131 Action != TypeSplitVector; 1132 } 1133 1134 //===--------------------------------------------------------------------===// 1135 // TargetLowering Configuration Methods - These methods should be invoked by 1136 // the derived class constructor to configure this object for the target. 1137 // 1138 protected: 1139 /// Specify how the target extends the result of integer and floating point 1140 /// boolean values from i1 to a wider type. See getBooleanContents. setBooleanContents(BooleanContent Ty)1141 void setBooleanContents(BooleanContent Ty) { 1142 BooleanContents = Ty; 1143 BooleanFloatContents = Ty; 1144 } 1145 1146 /// Specify how the target extends the result of integer and floating point 1147 /// boolean values from i1 to a wider type. See getBooleanContents. setBooleanContents(BooleanContent IntTy,BooleanContent FloatTy)1148 void setBooleanContents(BooleanContent IntTy, BooleanContent FloatTy) { 1149 BooleanContents = IntTy; 1150 BooleanFloatContents = FloatTy; 1151 } 1152 1153 /// Specify how the target extends the result of a vector boolean value from a 1154 /// vector of i1 to a wider type. See getBooleanContents. setBooleanVectorContents(BooleanContent Ty)1155 void setBooleanVectorContents(BooleanContent Ty) { 1156 BooleanVectorContents = Ty; 1157 } 1158 1159 /// Specify the target scheduling preference. setSchedulingPreference(Sched::Preference Pref)1160 void setSchedulingPreference(Sched::Preference Pref) { 1161 SchedPreferenceInfo = Pref; 1162 } 1163 1164 /// Indicate whether this target prefers to use _setjmp to implement 1165 /// llvm.setjmp or the version without _. Defaults to false. setUseUnderscoreSetJmp(bool Val)1166 void setUseUnderscoreSetJmp(bool Val) { 1167 UseUnderscoreSetJmp = Val; 1168 } 1169 1170 /// Indicate whether this target prefers to use _longjmp to implement 1171 /// llvm.longjmp or the version without _. Defaults to false. setUseUnderscoreLongJmp(bool Val)1172 void setUseUnderscoreLongJmp(bool Val) { 1173 UseUnderscoreLongJmp = Val; 1174 } 1175 1176 /// Indicate the number of blocks to generate jump tables rather than if 1177 /// sequence. setMinimumJumpTableEntries(int Val)1178 void setMinimumJumpTableEntries(int Val) { 1179 MinimumJumpTableEntries = Val; 1180 } 1181 1182 /// If set to a physical register, this specifies the register that 1183 /// llvm.savestack/llvm.restorestack should save and restore. setStackPointerRegisterToSaveRestore(unsigned R)1184 void setStackPointerRegisterToSaveRestore(unsigned R) { 1185 StackPointerRegisterToSaveRestore = R; 1186 } 1187 1188 /// If set to a physical register, this sets the register that receives the 1189 /// exception address on entry to a landing pad. setExceptionPointerRegister(unsigned R)1190 void setExceptionPointerRegister(unsigned R) { 1191 ExceptionPointerRegister = R; 1192 } 1193 1194 /// If set to a physical register, this sets the register that receives the 1195 /// exception typeid on entry to a landing pad. setExceptionSelectorRegister(unsigned R)1196 void setExceptionSelectorRegister(unsigned R) { 1197 ExceptionSelectorRegister = R; 1198 } 1199 1200 /// Tells the code generator not to expand operations into sequences that use 1201 /// the select operations if possible. 1202 void setSelectIsExpensive(bool isExpensive = true) { 1203 SelectIsExpensive = isExpensive; 1204 } 1205 1206 /// Tells the code generator that the target has multiple (allocatable) 1207 /// condition registers that can be used to store the results of comparisons 1208 /// for use by selects and conditional branches. With multiple condition 1209 /// registers, the code generator will not aggressively sink comparisons into 1210 /// the blocks of their users. 1211 void setHasMultipleConditionRegisters(bool hasManyRegs = true) { 1212 HasMultipleConditionRegisters = hasManyRegs; 1213 } 1214 1215 /// Tells the code generator that the target has BitExtract instructions. 1216 /// The code generator will aggressively sink "shift"s into the blocks of 1217 /// their users if the users will generate "and" instructions which can be 1218 /// combined with "shift" to BitExtract instructions. 1219 void setHasExtractBitsInsn(bool hasExtractInsn = true) { 1220 HasExtractBitsInsn = hasExtractInsn; 1221 } 1222 1223 /// Tells the code generator not to expand sequence of operations into a 1224 /// separate sequences that increases the amount of flow control. 1225 void setJumpIsExpensive(bool isExpensive = true) { 1226 JumpIsExpensive = isExpensive; 1227 } 1228 1229 /// Tells the code generator that integer divide is expensive, and if 1230 /// possible, should be replaced by an alternate sequence of instructions not 1231 /// containing an integer divide. 1232 void setIntDivIsCheap(bool isCheap = true) { IntDivIsCheap = isCheap; } 1233 1234 /// Tells the code generator that fsqrt is cheap, and should not be replaced 1235 /// with an alternative sequence of instructions. 1236 void setFsqrtIsCheap(bool isCheap = true) { FsqrtIsCheap = isCheap; } 1237 1238 /// Tells the code generator that this target supports floating point 1239 /// exceptions and cares about preserving floating point exception behavior. 1240 void setHasFloatingPointExceptions(bool FPExceptions = true) { 1241 HasFloatingPointExceptions = FPExceptions; 1242 } 1243 1244 /// Tells the code generator which bitwidths to bypass. addBypassSlowDiv(unsigned int SlowBitWidth,unsigned int FastBitWidth)1245 void addBypassSlowDiv(unsigned int SlowBitWidth, unsigned int FastBitWidth) { 1246 BypassSlowDivWidths[SlowBitWidth] = FastBitWidth; 1247 } 1248 1249 /// Tells the code generator that it shouldn't generate sra/srl/add/sra for a 1250 /// signed divide by power of two; let the target handle it. 1251 void setPow2SDivIsCheap(bool isCheap = true) { Pow2SDivIsCheap = isCheap; } 1252 1253 /// Add the specified register class as an available regclass for the 1254 /// specified value type. This indicates the selector can handle values of 1255 /// that class natively. addRegisterClass(MVT VT,const TargetRegisterClass * RC)1256 void addRegisterClass(MVT VT, const TargetRegisterClass *RC) { 1257 assert((unsigned)VT.SimpleTy < array_lengthof(RegClassForVT)); 1258 AvailableRegClasses.push_back(std::make_pair(VT, RC)); 1259 RegClassForVT[VT.SimpleTy] = RC; 1260 } 1261 1262 /// Remove all register classes. clearRegisterClasses()1263 void clearRegisterClasses() { 1264 memset(RegClassForVT, 0,MVT::LAST_VALUETYPE * sizeof(TargetRegisterClass*)); 1265 1266 AvailableRegClasses.clear(); 1267 } 1268 1269 /// \brief Remove all operation actions. clearOperationActions()1270 void clearOperationActions() { 1271 } 1272 1273 /// Return the largest legal super-reg register class of the register class 1274 /// for the specified type and its associated "cost". 1275 virtual std::pair<const TargetRegisterClass *, uint8_t> 1276 findRepresentativeClass(const TargetRegisterInfo *TRI, MVT VT) const; 1277 1278 /// Once all of the register classes are added, this allows us to compute 1279 /// derived properties we expose. 1280 void computeRegisterProperties(const TargetRegisterInfo *TRI); 1281 1282 /// Indicate that the specified operation does not work with the specified 1283 /// type and indicate what to do about it. setOperationAction(unsigned Op,MVT VT,LegalizeAction Action)1284 void setOperationAction(unsigned Op, MVT VT, 1285 LegalizeAction Action) { 1286 assert(Op < array_lengthof(OpActions[0]) && "Table isn't big enough!"); 1287 OpActions[(unsigned)VT.SimpleTy][Op] = (uint8_t)Action; 1288 } 1289 1290 /// Indicate that the specified load with extension does not work with the 1291 /// specified type and indicate what to do about it. setLoadExtAction(unsigned ExtType,MVT ValVT,MVT MemVT,LegalizeAction Action)1292 void setLoadExtAction(unsigned ExtType, MVT ValVT, MVT MemVT, 1293 LegalizeAction Action) { 1294 assert(ExtType < ISD::LAST_LOADEXT_TYPE && ValVT.isValid() && 1295 MemVT.isValid() && "Table isn't big enough!"); 1296 LoadExtActions[ValVT.SimpleTy][MemVT.SimpleTy][ExtType] = (uint8_t)Action; 1297 } 1298 1299 /// Indicate that the specified truncating store does not work with the 1300 /// specified type and indicate what to do about it. setTruncStoreAction(MVT ValVT,MVT MemVT,LegalizeAction Action)1301 void setTruncStoreAction(MVT ValVT, MVT MemVT, 1302 LegalizeAction Action) { 1303 assert(ValVT.isValid() && MemVT.isValid() && "Table isn't big enough!"); 1304 TruncStoreActions[ValVT.SimpleTy][MemVT.SimpleTy] = (uint8_t)Action; 1305 } 1306 1307 /// Indicate that the specified indexed load does or does not work with the 1308 /// specified type and indicate what to do abort it. 1309 /// 1310 /// NOTE: All indexed mode loads are initialized to Expand in 1311 /// TargetLowering.cpp setIndexedLoadAction(unsigned IdxMode,MVT VT,LegalizeAction Action)1312 void setIndexedLoadAction(unsigned IdxMode, MVT VT, 1313 LegalizeAction Action) { 1314 assert(VT.isValid() && IdxMode < ISD::LAST_INDEXED_MODE && 1315 (unsigned)Action < 0xf && "Table isn't big enough!"); 1316 // Load action are kept in the upper half. 1317 IndexedModeActions[(unsigned)VT.SimpleTy][IdxMode] &= ~0xf0; 1318 IndexedModeActions[(unsigned)VT.SimpleTy][IdxMode] |= ((uint8_t)Action) <<4; 1319 } 1320 1321 /// Indicate that the specified indexed store does or does not work with the 1322 /// specified type and indicate what to do about it. 1323 /// 1324 /// NOTE: All indexed mode stores are initialized to Expand in 1325 /// TargetLowering.cpp setIndexedStoreAction(unsigned IdxMode,MVT VT,LegalizeAction Action)1326 void setIndexedStoreAction(unsigned IdxMode, MVT VT, 1327 LegalizeAction Action) { 1328 assert(VT.isValid() && IdxMode < ISD::LAST_INDEXED_MODE && 1329 (unsigned)Action < 0xf && "Table isn't big enough!"); 1330 // Store action are kept in the lower half. 1331 IndexedModeActions[(unsigned)VT.SimpleTy][IdxMode] &= ~0x0f; 1332 IndexedModeActions[(unsigned)VT.SimpleTy][IdxMode] |= ((uint8_t)Action); 1333 } 1334 1335 /// Indicate that the specified condition code is or isn't supported on the 1336 /// target and indicate what to do about it. setCondCodeAction(ISD::CondCode CC,MVT VT,LegalizeAction Action)1337 void setCondCodeAction(ISD::CondCode CC, MVT VT, 1338 LegalizeAction Action) { 1339 assert(VT.isValid() && (unsigned)CC < array_lengthof(CondCodeActions) && 1340 "Table isn't big enough!"); 1341 /// The lower 5 bits of the SimpleTy index into Nth 2bit set from the 32-bit 1342 /// value and the upper 27 bits index into the second dimension of the array 1343 /// to select what 32-bit value to use. 1344 uint32_t Shift = 2 * (VT.SimpleTy & 0xF); 1345 CondCodeActions[CC][VT.SimpleTy >> 4] &= ~((uint32_t)0x3 << Shift); 1346 CondCodeActions[CC][VT.SimpleTy >> 4] |= (uint32_t)Action << Shift; 1347 } 1348 1349 /// If Opc/OrigVT is specified as being promoted, the promotion code defaults 1350 /// to trying a larger integer/fp until it can find one that works. If that 1351 /// default is insufficient, this method can be used by the target to override 1352 /// the default. AddPromotedToType(unsigned Opc,MVT OrigVT,MVT DestVT)1353 void AddPromotedToType(unsigned Opc, MVT OrigVT, MVT DestVT) { 1354 PromoteToType[std::make_pair(Opc, OrigVT.SimpleTy)] = DestVT.SimpleTy; 1355 } 1356 1357 /// Targets should invoke this method for each target independent node that 1358 /// they want to provide a custom DAG combiner for by implementing the 1359 /// PerformDAGCombine virtual method. setTargetDAGCombine(ISD::NodeType NT)1360 void setTargetDAGCombine(ISD::NodeType NT) { 1361 assert(unsigned(NT >> 3) < array_lengthof(TargetDAGCombineArray)); 1362 TargetDAGCombineArray[NT >> 3] |= 1 << (NT&7); 1363 } 1364 1365 /// Set the target's required jmp_buf buffer size (in bytes); default is 200 setJumpBufSize(unsigned Size)1366 void setJumpBufSize(unsigned Size) { 1367 JumpBufSize = Size; 1368 } 1369 1370 /// Set the target's required jmp_buf buffer alignment (in bytes); default is 1371 /// 0 setJumpBufAlignment(unsigned Align)1372 void setJumpBufAlignment(unsigned Align) { 1373 JumpBufAlignment = Align; 1374 } 1375 1376 /// Set the target's minimum function alignment (in log2(bytes)) setMinFunctionAlignment(unsigned Align)1377 void setMinFunctionAlignment(unsigned Align) { 1378 MinFunctionAlignment = Align; 1379 } 1380 1381 /// Set the target's preferred function alignment. This should be set if 1382 /// there is a performance benefit to higher-than-minimum alignment (in 1383 /// log2(bytes)) setPrefFunctionAlignment(unsigned Align)1384 void setPrefFunctionAlignment(unsigned Align) { 1385 PrefFunctionAlignment = Align; 1386 } 1387 1388 /// Set the target's preferred loop alignment. Default alignment is zero, it 1389 /// means the target does not care about loop alignment. The alignment is 1390 /// specified in log2(bytes). The target may also override 1391 /// getPrefLoopAlignment to provide per-loop values. setPrefLoopAlignment(unsigned Align)1392 void setPrefLoopAlignment(unsigned Align) { 1393 PrefLoopAlignment = Align; 1394 } 1395 1396 /// Set the minimum stack alignment of an argument (in log2(bytes)). setMinStackArgumentAlignment(unsigned Align)1397 void setMinStackArgumentAlignment(unsigned Align) { 1398 MinStackArgumentAlignment = Align; 1399 } 1400 1401 /// Set if the DAG builder should automatically insert fences and reduce the 1402 /// order of atomic memory operations to Monotonic. setInsertFencesForAtomic(bool fence)1403 void setInsertFencesForAtomic(bool fence) { 1404 InsertFencesForAtomic = fence; 1405 } 1406 1407 public: 1408 //===--------------------------------------------------------------------===// 1409 // Addressing mode description hooks (used by LSR etc). 1410 // 1411 1412 /// CodeGenPrepare sinks address calculations into the same BB as Load/Store 1413 /// instructions reading the address. This allows as much computation as 1414 /// possible to be done in the address mode for that operand. This hook lets 1415 /// targets also pass back when this should be done on intrinsics which 1416 /// load/store. GetAddrModeArguments(IntrinsicInst *,SmallVectorImpl<Value * > &,Type * &)1417 virtual bool GetAddrModeArguments(IntrinsicInst * /*I*/, 1418 SmallVectorImpl<Value*> &/*Ops*/, 1419 Type *&/*AccessTy*/) const { 1420 return false; 1421 } 1422 1423 /// This represents an addressing mode of: 1424 /// BaseGV + BaseOffs + BaseReg + Scale*ScaleReg 1425 /// If BaseGV is null, there is no BaseGV. 1426 /// If BaseOffs is zero, there is no base offset. 1427 /// If HasBaseReg is false, there is no base register. 1428 /// If Scale is zero, there is no ScaleReg. Scale of 1 indicates a reg with 1429 /// no scale. 1430 struct AddrMode { 1431 GlobalValue *BaseGV; 1432 int64_t BaseOffs; 1433 bool HasBaseReg; 1434 int64_t Scale; AddrModeAddrMode1435 AddrMode() : BaseGV(nullptr), BaseOffs(0), HasBaseReg(false), Scale(0) {} 1436 }; 1437 1438 /// Return true if the addressing mode represented by AM is legal for this 1439 /// target, for a load/store of the specified type. 1440 /// 1441 /// The type may be VoidTy, in which case only return true if the addressing 1442 /// mode is legal for a load/store of any legal type. TODO: Handle 1443 /// pre/postinc as well. 1444 virtual bool isLegalAddressingMode(const AddrMode &AM, Type *Ty) const; 1445 1446 /// \brief Return the cost of the scaling factor used in the addressing mode 1447 /// represented by AM for this target, for a load/store of the specified type. 1448 /// 1449 /// If the AM is supported, the return value must be >= 0. 1450 /// If the AM is not supported, it returns a negative value. 1451 /// TODO: Handle pre/postinc as well. getScalingFactorCost(const AddrMode & AM,Type * Ty)1452 virtual int getScalingFactorCost(const AddrMode &AM, Type *Ty) const { 1453 // Default: assume that any scaling factor used in a legal AM is free. 1454 if (isLegalAddressingMode(AM, Ty)) return 0; 1455 return -1; 1456 } 1457 1458 /// Return true if the specified immediate is legal icmp immediate, that is 1459 /// the target has icmp instructions which can compare a register against the 1460 /// immediate without having to materialize the immediate into a register. isLegalICmpImmediate(int64_t)1461 virtual bool isLegalICmpImmediate(int64_t) const { 1462 return true; 1463 } 1464 1465 /// Return true if the specified immediate is legal add immediate, that is the 1466 /// target has add instructions which can add a register with the immediate 1467 /// without having to materialize the immediate into a register. isLegalAddImmediate(int64_t)1468 virtual bool isLegalAddImmediate(int64_t) const { 1469 return true; 1470 } 1471 1472 /// Return true if it's significantly cheaper to shift a vector by a uniform 1473 /// scalar than by an amount which will vary across each lane. On x86, for 1474 /// example, there is a "psllw" instruction for the former case, but no simple 1475 /// instruction for a general "a << b" operation on vectors. isVectorShiftByScalarCheap(Type * Ty)1476 virtual bool isVectorShiftByScalarCheap(Type *Ty) const { 1477 return false; 1478 } 1479 1480 /// Return true if it's free to truncate a value of type Ty1 to type 1481 /// Ty2. e.g. On x86 it's free to truncate a i32 value in register EAX to i16 1482 /// by referencing its sub-register AX. isTruncateFree(Type *,Type *)1483 virtual bool isTruncateFree(Type * /*Ty1*/, Type * /*Ty2*/) const { 1484 return false; 1485 } 1486 1487 /// Return true if a truncation from Ty1 to Ty2 is permitted when deciding 1488 /// whether a call is in tail position. Typically this means that both results 1489 /// would be assigned to the same register or stack slot, but it could mean 1490 /// the target performs adequate checks of its own before proceeding with the 1491 /// tail call. allowTruncateForTailCall(Type *,Type *)1492 virtual bool allowTruncateForTailCall(Type * /*Ty1*/, Type * /*Ty2*/) const { 1493 return false; 1494 } 1495 isTruncateFree(EVT,EVT)1496 virtual bool isTruncateFree(EVT /*VT1*/, EVT /*VT2*/) const { 1497 return false; 1498 } 1499 isProfitableToHoist(Instruction * I)1500 virtual bool isProfitableToHoist(Instruction *I) const { return true; } 1501 1502 /// Return true if the extension represented by \p I is free. 1503 /// Unlikely the is[Z|FP]ExtFree family which is based on types, 1504 /// this method can use the context provided by \p I to decide 1505 /// whether or not \p I is free. 1506 /// This method extends the behavior of the is[Z|FP]ExtFree family. 1507 /// In other words, if is[Z|FP]Free returns true, then this method 1508 /// returns true as well. The converse is not true. 1509 /// The target can perform the adequate checks by overriding isExtFreeImpl. 1510 /// \pre \p I must be a sign, zero, or fp extension. isExtFree(const Instruction * I)1511 bool isExtFree(const Instruction *I) const { 1512 switch (I->getOpcode()) { 1513 case Instruction::FPExt: 1514 if (isFPExtFree(EVT::getEVT(I->getType()))) 1515 return true; 1516 break; 1517 case Instruction::ZExt: 1518 if (isZExtFree(I->getOperand(0)->getType(), I->getType())) 1519 return true; 1520 break; 1521 case Instruction::SExt: 1522 break; 1523 default: 1524 llvm_unreachable("Instruction is not an extension"); 1525 } 1526 return isExtFreeImpl(I); 1527 } 1528 1529 /// Return true if any actual instruction that defines a value of type Ty1 1530 /// implicitly zero-extends the value to Ty2 in the result register. 1531 /// 1532 /// This does not necessarily include registers defined in unknown ways, such 1533 /// as incoming arguments, or copies from unknown virtual registers. Also, if 1534 /// isTruncateFree(Ty2, Ty1) is true, this does not necessarily apply to 1535 /// truncate instructions. e.g. on x86-64, all instructions that define 32-bit 1536 /// values implicit zero-extend the result out to 64 bits. isZExtFree(Type *,Type *)1537 virtual bool isZExtFree(Type * /*Ty1*/, Type * /*Ty2*/) const { 1538 return false; 1539 } 1540 isZExtFree(EVT,EVT)1541 virtual bool isZExtFree(EVT /*VT1*/, EVT /*VT2*/) const { 1542 return false; 1543 } 1544 1545 /// Return true if the target supplies and combines to a paired load 1546 /// two loaded values of type LoadedType next to each other in memory. 1547 /// RequiredAlignment gives the minimal alignment constraints that must be met 1548 /// to be able to select this paired load. 1549 /// 1550 /// This information is *not* used to generate actual paired loads, but it is 1551 /// used to generate a sequence of loads that is easier to combine into a 1552 /// paired load. 1553 /// For instance, something like this: 1554 /// a = load i64* addr 1555 /// b = trunc i64 a to i32 1556 /// c = lshr i64 a, 32 1557 /// d = trunc i64 c to i32 1558 /// will be optimized into: 1559 /// b = load i32* addr1 1560 /// d = load i32* addr2 1561 /// Where addr1 = addr2 +/- sizeof(i32). 1562 /// 1563 /// In other words, unless the target performs a post-isel load combining, 1564 /// this information should not be provided because it will generate more 1565 /// loads. hasPairedLoad(Type *,unsigned &)1566 virtual bool hasPairedLoad(Type * /*LoadedType*/, 1567 unsigned & /*RequiredAligment*/) const { 1568 return false; 1569 } 1570 hasPairedLoad(EVT,unsigned &)1571 virtual bool hasPairedLoad(EVT /*LoadedType*/, 1572 unsigned & /*RequiredAligment*/) const { 1573 return false; 1574 } 1575 1576 /// Return true if zero-extending the specific node Val to type VT2 is free 1577 /// (either because it's implicitly zero-extended such as ARM ldrb / ldrh or 1578 /// because it's folded such as X86 zero-extending loads). isZExtFree(SDValue Val,EVT VT2)1579 virtual bool isZExtFree(SDValue Val, EVT VT2) const { 1580 return isZExtFree(Val.getValueType(), VT2); 1581 } 1582 1583 /// Return true if an fpext operation is free (for instance, because 1584 /// single-precision floating-point numbers are implicitly extended to 1585 /// double-precision). isFPExtFree(EVT VT)1586 virtual bool isFPExtFree(EVT VT) const { 1587 assert(VT.isFloatingPoint()); 1588 return false; 1589 } 1590 1591 /// Return true if folding a vector load into ExtVal (a sign, zero, or any 1592 /// extend node) is profitable. isVectorLoadExtDesirable(SDValue ExtVal)1593 virtual bool isVectorLoadExtDesirable(SDValue ExtVal) const { return false; } 1594 1595 /// Return true if an fneg operation is free to the point where it is never 1596 /// worthwhile to replace it with a bitwise operation. isFNegFree(EVT VT)1597 virtual bool isFNegFree(EVT VT) const { 1598 assert(VT.isFloatingPoint()); 1599 return false; 1600 } 1601 1602 /// Return true if an fabs operation is free to the point where it is never 1603 /// worthwhile to replace it with a bitwise operation. isFAbsFree(EVT VT)1604 virtual bool isFAbsFree(EVT VT) const { 1605 assert(VT.isFloatingPoint()); 1606 return false; 1607 } 1608 1609 /// Return true if an FMA operation is faster than a pair of fmul and fadd 1610 /// instructions. fmuladd intrinsics will be expanded to FMAs when this method 1611 /// returns true, otherwise fmuladd is expanded to fmul + fadd. 1612 /// 1613 /// NOTE: This may be called before legalization on types for which FMAs are 1614 /// not legal, but should return true if those types will eventually legalize 1615 /// to types that support FMAs. After legalization, it will only be called on 1616 /// types that support FMAs (via Legal or Custom actions) isFMAFasterThanFMulAndFAdd(EVT)1617 virtual bool isFMAFasterThanFMulAndFAdd(EVT) const { 1618 return false; 1619 } 1620 1621 /// Return true if it's profitable to narrow operations of type VT1 to 1622 /// VT2. e.g. on x86, it's profitable to narrow from i32 to i8 but not from 1623 /// i32 to i16. isNarrowingProfitable(EVT,EVT)1624 virtual bool isNarrowingProfitable(EVT /*VT1*/, EVT /*VT2*/) const { 1625 return false; 1626 } 1627 1628 /// \brief Return true if it is beneficial to convert a load of a constant to 1629 /// just the constant itself. 1630 /// On some targets it might be more efficient to use a combination of 1631 /// arithmetic instructions to materialize the constant instead of loading it 1632 /// from a constant pool. shouldConvertConstantLoadToIntImm(const APInt & Imm,Type * Ty)1633 virtual bool shouldConvertConstantLoadToIntImm(const APInt &Imm, 1634 Type *Ty) const { 1635 return false; 1636 } 1637 1638 /// Return true if EXTRACT_SUBVECTOR is cheap for this result type 1639 /// with this index. This is needed because EXTRACT_SUBVECTOR usually 1640 /// has custom lowering that depends on the index of the first element, 1641 /// and only the target knows which lowering is cheap. isExtractSubvectorCheap(EVT ResVT,unsigned Index)1642 virtual bool isExtractSubvectorCheap(EVT ResVT, unsigned Index) const { 1643 return false; 1644 } 1645 1646 //===--------------------------------------------------------------------===// 1647 // Runtime Library hooks 1648 // 1649 1650 /// Rename the default libcall routine name for the specified libcall. setLibcallName(RTLIB::Libcall Call,const char * Name)1651 void setLibcallName(RTLIB::Libcall Call, const char *Name) { 1652 LibcallRoutineNames[Call] = Name; 1653 } 1654 1655 /// Get the libcall routine name for the specified libcall. getLibcallName(RTLIB::Libcall Call)1656 const char *getLibcallName(RTLIB::Libcall Call) const { 1657 return LibcallRoutineNames[Call]; 1658 } 1659 1660 /// Override the default CondCode to be used to test the result of the 1661 /// comparison libcall against zero. setCmpLibcallCC(RTLIB::Libcall Call,ISD::CondCode CC)1662 void setCmpLibcallCC(RTLIB::Libcall Call, ISD::CondCode CC) { 1663 CmpLibcallCCs[Call] = CC; 1664 } 1665 1666 /// Get the CondCode that's to be used to test the result of the comparison 1667 /// libcall against zero. getCmpLibcallCC(RTLIB::Libcall Call)1668 ISD::CondCode getCmpLibcallCC(RTLIB::Libcall Call) const { 1669 return CmpLibcallCCs[Call]; 1670 } 1671 1672 /// Set the CallingConv that should be used for the specified libcall. setLibcallCallingConv(RTLIB::Libcall Call,CallingConv::ID CC)1673 void setLibcallCallingConv(RTLIB::Libcall Call, CallingConv::ID CC) { 1674 LibcallCallingConvs[Call] = CC; 1675 } 1676 1677 /// Get the CallingConv that should be used for the specified libcall. getLibcallCallingConv(RTLIB::Libcall Call)1678 CallingConv::ID getLibcallCallingConv(RTLIB::Libcall Call) const { 1679 return LibcallCallingConvs[Call]; 1680 } 1681 1682 private: 1683 const TargetMachine &TM; 1684 1685 /// True if this is a little endian target. 1686 bool IsLittleEndian; 1687 1688 /// Tells the code generator not to expand operations into sequences that use 1689 /// the select operations if possible. 1690 bool SelectIsExpensive; 1691 1692 /// Tells the code generator that the target has multiple (allocatable) 1693 /// condition registers that can be used to store the results of comparisons 1694 /// for use by selects and conditional branches. With multiple condition 1695 /// registers, the code generator will not aggressively sink comparisons into 1696 /// the blocks of their users. 1697 bool HasMultipleConditionRegisters; 1698 1699 /// Tells the code generator that the target has BitExtract instructions. 1700 /// The code generator will aggressively sink "shift"s into the blocks of 1701 /// their users if the users will generate "and" instructions which can be 1702 /// combined with "shift" to BitExtract instructions. 1703 bool HasExtractBitsInsn; 1704 1705 /// Tells the code generator not to expand integer divides by constants into a 1706 /// sequence of muls, adds, and shifts. This is a hack until a real cost 1707 /// model is in place. If we ever optimize for size, this will be set to true 1708 /// unconditionally. 1709 bool IntDivIsCheap; 1710 1711 // Don't expand fsqrt with an approximation based on the inverse sqrt. 1712 bool FsqrtIsCheap; 1713 1714 /// Tells the code generator to bypass slow divide or remainder 1715 /// instructions. For example, BypassSlowDivWidths[32,8] tells the code 1716 /// generator to bypass 32-bit integer div/rem with an 8-bit unsigned integer 1717 /// div/rem when the operands are positive and less than 256. 1718 DenseMap <unsigned int, unsigned int> BypassSlowDivWidths; 1719 1720 /// Tells the code generator that it shouldn't generate sra/srl/add/sra for a 1721 /// signed divide by power of two; let the target handle it. 1722 bool Pow2SDivIsCheap; 1723 1724 /// Tells the code generator that it shouldn't generate extra flow control 1725 /// instructions and should attempt to combine flow control instructions via 1726 /// predication. 1727 bool JumpIsExpensive; 1728 1729 /// Whether the target supports or cares about preserving floating point 1730 /// exception behavior. 1731 bool HasFloatingPointExceptions; 1732 1733 /// This target prefers to use _setjmp to implement llvm.setjmp. 1734 /// 1735 /// Defaults to false. 1736 bool UseUnderscoreSetJmp; 1737 1738 /// This target prefers to use _longjmp to implement llvm.longjmp. 1739 /// 1740 /// Defaults to false. 1741 bool UseUnderscoreLongJmp; 1742 1743 /// Number of blocks threshold to use jump tables. 1744 int MinimumJumpTableEntries; 1745 1746 /// Information about the contents of the high-bits in boolean values held in 1747 /// a type wider than i1. See getBooleanContents. 1748 BooleanContent BooleanContents; 1749 1750 /// Information about the contents of the high-bits in boolean values held in 1751 /// a type wider than i1. See getBooleanContents. 1752 BooleanContent BooleanFloatContents; 1753 1754 /// Information about the contents of the high-bits in boolean vector values 1755 /// when the element type is wider than i1. See getBooleanContents. 1756 BooleanContent BooleanVectorContents; 1757 1758 /// The target scheduling preference: shortest possible total cycles or lowest 1759 /// register usage. 1760 Sched::Preference SchedPreferenceInfo; 1761 1762 /// The size, in bytes, of the target's jmp_buf buffers 1763 unsigned JumpBufSize; 1764 1765 /// The alignment, in bytes, of the target's jmp_buf buffers 1766 unsigned JumpBufAlignment; 1767 1768 /// The minimum alignment that any argument on the stack needs to have. 1769 unsigned MinStackArgumentAlignment; 1770 1771 /// The minimum function alignment (used when optimizing for size, and to 1772 /// prevent explicitly provided alignment from leading to incorrect code). 1773 unsigned MinFunctionAlignment; 1774 1775 /// The preferred function alignment (used when alignment unspecified and 1776 /// optimizing for speed). 1777 unsigned PrefFunctionAlignment; 1778 1779 /// The preferred loop alignment. 1780 unsigned PrefLoopAlignment; 1781 1782 /// Whether the DAG builder should automatically insert fences and reduce 1783 /// ordering for atomics. (This will be set for for most architectures with 1784 /// weak memory ordering.) 1785 bool InsertFencesForAtomic; 1786 1787 /// If set to a physical register, this specifies the register that 1788 /// llvm.savestack/llvm.restorestack should save and restore. 1789 unsigned StackPointerRegisterToSaveRestore; 1790 1791 /// If set to a physical register, this specifies the register that receives 1792 /// the exception address on entry to a landing pad. 1793 unsigned ExceptionPointerRegister; 1794 1795 /// If set to a physical register, this specifies the register that receives 1796 /// the exception typeid on entry to a landing pad. 1797 unsigned ExceptionSelectorRegister; 1798 1799 /// This indicates the default register class to use for each ValueType the 1800 /// target supports natively. 1801 const TargetRegisterClass *RegClassForVT[MVT::LAST_VALUETYPE]; 1802 unsigned char NumRegistersForVT[MVT::LAST_VALUETYPE]; 1803 MVT RegisterTypeForVT[MVT::LAST_VALUETYPE]; 1804 1805 /// This indicates the "representative" register class to use for each 1806 /// ValueType the target supports natively. This information is used by the 1807 /// scheduler to track register pressure. By default, the representative 1808 /// register class is the largest legal super-reg register class of the 1809 /// register class of the specified type. e.g. On x86, i8, i16, and i32's 1810 /// representative class would be GR32. 1811 const TargetRegisterClass *RepRegClassForVT[MVT::LAST_VALUETYPE]; 1812 1813 /// This indicates the "cost" of the "representative" register class for each 1814 /// ValueType. The cost is used by the scheduler to approximate register 1815 /// pressure. 1816 uint8_t RepRegClassCostForVT[MVT::LAST_VALUETYPE]; 1817 1818 /// For any value types we are promoting or expanding, this contains the value 1819 /// type that we are changing to. For Expanded types, this contains one step 1820 /// of the expand (e.g. i64 -> i32), even if there are multiple steps required 1821 /// (e.g. i64 -> i16). For types natively supported by the system, this holds 1822 /// the same type (e.g. i32 -> i32). 1823 MVT TransformToType[MVT::LAST_VALUETYPE]; 1824 1825 /// For each operation and each value type, keep a LegalizeAction that 1826 /// indicates how instruction selection should deal with the operation. Most 1827 /// operations are Legal (aka, supported natively by the target), but 1828 /// operations that are not should be described. Note that operations on 1829 /// non-legal value types are not described here. 1830 uint8_t OpActions[MVT::LAST_VALUETYPE][ISD::BUILTIN_OP_END]; 1831 1832 /// For each load extension type and each value type, keep a LegalizeAction 1833 /// that indicates how instruction selection should deal with a load of a 1834 /// specific value type and extension type. 1835 uint8_t LoadExtActions[MVT::LAST_VALUETYPE][MVT::LAST_VALUETYPE] 1836 [ISD::LAST_LOADEXT_TYPE]; 1837 1838 /// For each value type pair keep a LegalizeAction that indicates whether a 1839 /// truncating store of a specific value type and truncating type is legal. 1840 uint8_t TruncStoreActions[MVT::LAST_VALUETYPE][MVT::LAST_VALUETYPE]; 1841 1842 /// For each indexed mode and each value type, keep a pair of LegalizeAction 1843 /// that indicates how instruction selection should deal with the load / 1844 /// store. 1845 /// 1846 /// The first dimension is the value_type for the reference. The second 1847 /// dimension represents the various modes for load store. 1848 uint8_t IndexedModeActions[MVT::LAST_VALUETYPE][ISD::LAST_INDEXED_MODE]; 1849 1850 /// For each condition code (ISD::CondCode) keep a LegalizeAction that 1851 /// indicates how instruction selection should deal with the condition code. 1852 /// 1853 /// Because each CC action takes up 2 bits, we need to have the array size be 1854 /// large enough to fit all of the value types. This can be done by rounding 1855 /// up the MVT::LAST_VALUETYPE value to the next multiple of 16. 1856 uint32_t CondCodeActions[ISD::SETCC_INVALID][(MVT::LAST_VALUETYPE + 15) / 16]; 1857 1858 ValueTypeActionImpl ValueTypeActions; 1859 1860 private: 1861 LegalizeKind getTypeConversion(LLVMContext &Context, EVT VT) const; 1862 1863 private: 1864 std::vector<std::pair<MVT, const TargetRegisterClass*> > AvailableRegClasses; 1865 1866 /// Targets can specify ISD nodes that they would like PerformDAGCombine 1867 /// callbacks for by calling setTargetDAGCombine(), which sets a bit in this 1868 /// array. 1869 unsigned char 1870 TargetDAGCombineArray[(ISD::BUILTIN_OP_END+CHAR_BIT-1)/CHAR_BIT]; 1871 1872 /// For operations that must be promoted to a specific type, this holds the 1873 /// destination type. This map should be sparse, so don't hold it as an 1874 /// array. 1875 /// 1876 /// Targets add entries to this map with AddPromotedToType(..), clients access 1877 /// this with getTypeToPromoteTo(..). 1878 std::map<std::pair<unsigned, MVT::SimpleValueType>, MVT::SimpleValueType> 1879 PromoteToType; 1880 1881 /// Stores the name each libcall. 1882 const char *LibcallRoutineNames[RTLIB::UNKNOWN_LIBCALL]; 1883 1884 /// The ISD::CondCode that should be used to test the result of each of the 1885 /// comparison libcall against zero. 1886 ISD::CondCode CmpLibcallCCs[RTLIB::UNKNOWN_LIBCALL]; 1887 1888 /// Stores the CallingConv that should be used for each libcall. 1889 CallingConv::ID LibcallCallingConvs[RTLIB::UNKNOWN_LIBCALL]; 1890 1891 protected: 1892 /// Return true if the extension represented by \p I is free. 1893 /// \pre \p I is a sign, zero, or fp extension and 1894 /// is[Z|FP]ExtFree of the related types is not true. isExtFreeImpl(const Instruction * I)1895 virtual bool isExtFreeImpl(const Instruction *I) const { return false; } 1896 1897 /// \brief Specify maximum number of store instructions per memset call. 1898 /// 1899 /// When lowering \@llvm.memset this field specifies the maximum number of 1900 /// store operations that may be substituted for the call to memset. Targets 1901 /// must set this value based on the cost threshold for that target. Targets 1902 /// should assume that the memset will be done using as many of the largest 1903 /// store operations first, followed by smaller ones, if necessary, per 1904 /// alignment restrictions. For example, storing 9 bytes on a 32-bit machine 1905 /// with 16-bit alignment would result in four 2-byte stores and one 1-byte 1906 /// store. This only applies to setting a constant array of a constant size. 1907 unsigned MaxStoresPerMemset; 1908 1909 /// Maximum number of stores operations that may be substituted for the call 1910 /// to memset, used for functions with OptSize attribute. 1911 unsigned MaxStoresPerMemsetOptSize; 1912 1913 /// \brief Specify maximum bytes of store instructions per memcpy call. 1914 /// 1915 /// When lowering \@llvm.memcpy this field specifies the maximum number of 1916 /// store operations that may be substituted for a call to memcpy. Targets 1917 /// must set this value based on the cost threshold for that target. Targets 1918 /// should assume that the memcpy will be done using as many of the largest 1919 /// store operations first, followed by smaller ones, if necessary, per 1920 /// alignment restrictions. For example, storing 7 bytes on a 32-bit machine 1921 /// with 32-bit alignment would result in one 4-byte store, a one 2-byte store 1922 /// and one 1-byte store. This only applies to copying a constant array of 1923 /// constant size. 1924 unsigned MaxStoresPerMemcpy; 1925 1926 /// Maximum number of store operations that may be substituted for a call to 1927 /// memcpy, used for functions with OptSize attribute. 1928 unsigned MaxStoresPerMemcpyOptSize; 1929 1930 /// \brief Specify maximum bytes of store instructions per memmove call. 1931 /// 1932 /// When lowering \@llvm.memmove this field specifies the maximum number of 1933 /// store instructions that may be substituted for a call to memmove. Targets 1934 /// must set this value based on the cost threshold for that target. Targets 1935 /// should assume that the memmove will be done using as many of the largest 1936 /// store operations first, followed by smaller ones, if necessary, per 1937 /// alignment restrictions. For example, moving 9 bytes on a 32-bit machine 1938 /// with 8-bit alignment would result in nine 1-byte stores. This only 1939 /// applies to copying a constant array of constant size. 1940 unsigned MaxStoresPerMemmove; 1941 1942 /// Maximum number of store instructions that may be substituted for a call to 1943 /// memmove, used for functions with OpSize attribute. 1944 unsigned MaxStoresPerMemmoveOptSize; 1945 1946 /// Tells the code generator that select is more expensive than a branch if 1947 /// the branch is usually predicted right. 1948 bool PredictableSelectIsExpensive; 1949 1950 /// MaskAndBranchFoldingIsLegal - Indicates if the target supports folding 1951 /// a mask of a single bit, a compare, and a branch into a single instruction. 1952 bool MaskAndBranchFoldingIsLegal; 1953 1954 /// \see enableExtLdPromotion. 1955 bool EnableExtLdPromotion; 1956 1957 protected: 1958 /// Return true if the value types that can be represented by the specified 1959 /// register class are all legal. 1960 bool isLegalRC(const TargetRegisterClass *RC) const; 1961 1962 /// Replace/modify any TargetFrameIndex operands with a targte-dependent 1963 /// sequence of memory operands that is recognized by PrologEpilogInserter. 1964 MachineBasicBlock *emitPatchPoint(MachineInstr *MI, MachineBasicBlock *MBB) const; 1965 }; 1966 1967 /// This class defines information used to lower LLVM code to legal SelectionDAG 1968 /// operators that the target instruction selector can accept natively. 1969 /// 1970 /// This class also defines callbacks that targets must implement to lower 1971 /// target-specific constructs to SelectionDAG operators. 1972 class TargetLowering : public TargetLoweringBase { 1973 TargetLowering(const TargetLowering&) = delete; 1974 void operator=(const TargetLowering&) = delete; 1975 1976 public: 1977 /// NOTE: The TargetMachine owns TLOF. 1978 explicit TargetLowering(const TargetMachine &TM); 1979 1980 /// Returns true by value, base pointer and offset pointer and addressing mode 1981 /// by reference if the node's address can be legally represented as 1982 /// pre-indexed load / store address. getPreIndexedAddressParts(SDNode *,SDValue &,SDValue &,ISD::MemIndexedMode &,SelectionDAG &)1983 virtual bool getPreIndexedAddressParts(SDNode * /*N*/, SDValue &/*Base*/, 1984 SDValue &/*Offset*/, 1985 ISD::MemIndexedMode &/*AM*/, 1986 SelectionDAG &/*DAG*/) const { 1987 return false; 1988 } 1989 1990 /// Returns true by value, base pointer and offset pointer and addressing mode 1991 /// by reference if this node can be combined with a load / store to form a 1992 /// post-indexed load / store. getPostIndexedAddressParts(SDNode *,SDNode *,SDValue &,SDValue &,ISD::MemIndexedMode &,SelectionDAG &)1993 virtual bool getPostIndexedAddressParts(SDNode * /*N*/, SDNode * /*Op*/, 1994 SDValue &/*Base*/, 1995 SDValue &/*Offset*/, 1996 ISD::MemIndexedMode &/*AM*/, 1997 SelectionDAG &/*DAG*/) const { 1998 return false; 1999 } 2000 2001 /// Return the entry encoding for a jump table in the current function. The 2002 /// returned value is a member of the MachineJumpTableInfo::JTEntryKind enum. 2003 virtual unsigned getJumpTableEncoding() const; 2004 2005 virtual const MCExpr * LowerCustomJumpTableEntry(const MachineJumpTableInfo *,const MachineBasicBlock *,unsigned,MCContext &)2006 LowerCustomJumpTableEntry(const MachineJumpTableInfo * /*MJTI*/, 2007 const MachineBasicBlock * /*MBB*/, unsigned /*uid*/, 2008 MCContext &/*Ctx*/) const { 2009 llvm_unreachable("Need to implement this hook if target has custom JTIs"); 2010 } 2011 2012 /// Returns relocation base for the given PIC jumptable. 2013 virtual SDValue getPICJumpTableRelocBase(SDValue Table, 2014 SelectionDAG &DAG) const; 2015 2016 /// This returns the relocation base for the given PIC jumptable, the same as 2017 /// getPICJumpTableRelocBase, but as an MCExpr. 2018 virtual const MCExpr * 2019 getPICJumpTableRelocBaseExpr(const MachineFunction *MF, 2020 unsigned JTI, MCContext &Ctx) const; 2021 2022 /// Return true if folding a constant offset with the given GlobalAddress is 2023 /// legal. It is frequently not legal in PIC relocation models. 2024 virtual bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const; 2025 2026 bool isInTailCallPosition(SelectionDAG &DAG, SDNode *Node, 2027 SDValue &Chain) const; 2028 2029 void softenSetCCOperands(SelectionDAG &DAG, EVT VT, 2030 SDValue &NewLHS, SDValue &NewRHS, 2031 ISD::CondCode &CCCode, SDLoc DL) const; 2032 2033 /// Returns a pair of (return value, chain). 2034 /// It is an error to pass RTLIB::UNKNOWN_LIBCALL as \p LC. 2035 std::pair<SDValue, SDValue> makeLibCall(SelectionDAG &DAG, RTLIB::Libcall LC, 2036 EVT RetVT, const SDValue *Ops, 2037 unsigned NumOps, bool isSigned, 2038 SDLoc dl, bool doesNotReturn = false, 2039 bool isReturnValueUsed = true) const; 2040 2041 //===--------------------------------------------------------------------===// 2042 // TargetLowering Optimization Methods 2043 // 2044 2045 /// A convenience struct that encapsulates a DAG, and two SDValues for 2046 /// returning information from TargetLowering to its clients that want to 2047 /// combine. 2048 struct TargetLoweringOpt { 2049 SelectionDAG &DAG; 2050 bool LegalTys; 2051 bool LegalOps; 2052 SDValue Old; 2053 SDValue New; 2054 TargetLoweringOptTargetLoweringOpt2055 explicit TargetLoweringOpt(SelectionDAG &InDAG, 2056 bool LT, bool LO) : 2057 DAG(InDAG), LegalTys(LT), LegalOps(LO) {} 2058 LegalTypesTargetLoweringOpt2059 bool LegalTypes() const { return LegalTys; } LegalOperationsTargetLoweringOpt2060 bool LegalOperations() const { return LegalOps; } 2061 CombineToTargetLoweringOpt2062 bool CombineTo(SDValue O, SDValue N) { 2063 Old = O; 2064 New = N; 2065 return true; 2066 } 2067 2068 /// Check to see if the specified operand of the specified instruction is a 2069 /// constant integer. If so, check to see if there are any bits set in the 2070 /// constant that are not demanded. If so, shrink the constant and return 2071 /// true. 2072 bool ShrinkDemandedConstant(SDValue Op, const APInt &Demanded); 2073 2074 /// Convert x+y to (VT)((SmallVT)x+(SmallVT)y) if the casts are free. This 2075 /// uses isZExtFree and ZERO_EXTEND for the widening cast, but it could be 2076 /// generalized for targets with other types of implicit widening casts. 2077 bool ShrinkDemandedOp(SDValue Op, unsigned BitWidth, const APInt &Demanded, 2078 SDLoc dl); 2079 }; 2080 2081 /// Look at Op. At this point, we know that only the DemandedMask bits of the 2082 /// result of Op are ever used downstream. If we can use this information to 2083 /// simplify Op, create a new simplified DAG node and return true, returning 2084 /// the original and new nodes in Old and New. Otherwise, analyze the 2085 /// expression and return a mask of KnownOne and KnownZero bits for the 2086 /// expression (used to simplify the caller). The KnownZero/One bits may only 2087 /// be accurate for those bits in the DemandedMask. 2088 bool SimplifyDemandedBits(SDValue Op, const APInt &DemandedMask, 2089 APInt &KnownZero, APInt &KnownOne, 2090 TargetLoweringOpt &TLO, unsigned Depth = 0) const; 2091 2092 /// Determine which of the bits specified in Mask are known to be either zero 2093 /// or one and return them in the KnownZero/KnownOne bitsets. 2094 virtual void computeKnownBitsForTargetNode(const SDValue Op, 2095 APInt &KnownZero, 2096 APInt &KnownOne, 2097 const SelectionDAG &DAG, 2098 unsigned Depth = 0) const; 2099 2100 /// This method can be implemented by targets that want to expose additional 2101 /// information about sign bits to the DAG Combiner. 2102 virtual unsigned ComputeNumSignBitsForTargetNode(SDValue Op, 2103 const SelectionDAG &DAG, 2104 unsigned Depth = 0) const; 2105 2106 struct DAGCombinerInfo { 2107 void *DC; // The DAG Combiner object. 2108 CombineLevel Level; 2109 bool CalledByLegalizer; 2110 public: 2111 SelectionDAG &DAG; 2112 DAGCombinerInfoDAGCombinerInfo2113 DAGCombinerInfo(SelectionDAG &dag, CombineLevel level, bool cl, void *dc) 2114 : DC(dc), Level(level), CalledByLegalizer(cl), DAG(dag) {} 2115 isBeforeLegalizeDAGCombinerInfo2116 bool isBeforeLegalize() const { return Level == BeforeLegalizeTypes; } isBeforeLegalizeOpsDAGCombinerInfo2117 bool isBeforeLegalizeOps() const { return Level < AfterLegalizeVectorOps; } isAfterLegalizeVectorOpsDAGCombinerInfo2118 bool isAfterLegalizeVectorOps() const { 2119 return Level == AfterLegalizeDAG; 2120 } getDAGCombineLevelDAGCombinerInfo2121 CombineLevel getDAGCombineLevel() { return Level; } isCalledByLegalizerDAGCombinerInfo2122 bool isCalledByLegalizer() const { return CalledByLegalizer; } 2123 2124 void AddToWorklist(SDNode *N); 2125 void RemoveFromWorklist(SDNode *N); 2126 SDValue CombineTo(SDNode *N, ArrayRef<SDValue> To, bool AddTo = true); 2127 SDValue CombineTo(SDNode *N, SDValue Res, bool AddTo = true); 2128 SDValue CombineTo(SDNode *N, SDValue Res0, SDValue Res1, bool AddTo = true); 2129 2130 void CommitTargetLoweringOpt(const TargetLoweringOpt &TLO); 2131 }; 2132 2133 /// Return if the N is a constant or constant vector equal to the true value 2134 /// from getBooleanContents(). 2135 bool isConstTrueVal(const SDNode *N) const; 2136 2137 /// Return if the N is a constant or constant vector equal to the false value 2138 /// from getBooleanContents(). 2139 bool isConstFalseVal(const SDNode *N) const; 2140 2141 /// Try to simplify a setcc built with the specified operands and cc. If it is 2142 /// unable to simplify it, return a null SDValue. 2143 SDValue SimplifySetCC(EVT VT, SDValue N0, SDValue N1, 2144 ISD::CondCode Cond, bool foldBooleans, 2145 DAGCombinerInfo &DCI, SDLoc dl) const; 2146 2147 /// Returns true (and the GlobalValue and the offset) if the node is a 2148 /// GlobalAddress + offset. 2149 virtual bool 2150 isGAPlusOffset(SDNode *N, const GlobalValue* &GA, int64_t &Offset) const; 2151 2152 /// This method will be invoked for all target nodes and for any 2153 /// target-independent nodes that the target has registered with invoke it 2154 /// for. 2155 /// 2156 /// The semantics are as follows: 2157 /// Return Value: 2158 /// SDValue.Val == 0 - No change was made 2159 /// SDValue.Val == N - N was replaced, is dead, and is already handled. 2160 /// otherwise - N should be replaced by the returned Operand. 2161 /// 2162 /// In addition, methods provided by DAGCombinerInfo may be used to perform 2163 /// more complex transformations. 2164 /// 2165 virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const; 2166 2167 /// Return true if it is profitable to move a following shift through this 2168 // node, adjusting any immediate operands as necessary to preserve semantics. 2169 // This transformation may not be desirable if it disrupts a particularly 2170 // auspicious target-specific tree (e.g. bitfield extraction in AArch64). 2171 // By default, it returns true. isDesirableToCommuteWithShift(const SDNode * N)2172 virtual bool isDesirableToCommuteWithShift(const SDNode *N /*Op*/) const { 2173 return true; 2174 } 2175 2176 /// Return true if the target has native support for the specified value type 2177 /// and it is 'desirable' to use the type for the given node type. e.g. On x86 2178 /// i16 is legal, but undesirable since i16 instruction encodings are longer 2179 /// and some i16 instructions are slow. isTypeDesirableForOp(unsigned,EVT VT)2180 virtual bool isTypeDesirableForOp(unsigned /*Opc*/, EVT VT) const { 2181 // By default, assume all legal types are desirable. 2182 return isTypeLegal(VT); 2183 } 2184 2185 /// Return true if it is profitable for dag combiner to transform a floating 2186 /// point op of specified opcode to a equivalent op of an integer 2187 /// type. e.g. f32 load -> i32 load can be profitable on ARM. isDesirableToTransformToIntegerOp(unsigned,EVT)2188 virtual bool isDesirableToTransformToIntegerOp(unsigned /*Opc*/, 2189 EVT /*VT*/) const { 2190 return false; 2191 } 2192 2193 /// This method query the target whether it is beneficial for dag combiner to 2194 /// promote the specified node. If true, it should return the desired 2195 /// promotion type by reference. IsDesirableToPromoteOp(SDValue,EVT &)2196 virtual bool IsDesirableToPromoteOp(SDValue /*Op*/, EVT &/*PVT*/) const { 2197 return false; 2198 } 2199 2200 //===--------------------------------------------------------------------===// 2201 // Lowering methods - These methods must be implemented by targets so that 2202 // the SelectionDAGBuilder code knows how to lower these. 2203 // 2204 2205 /// This hook must be implemented to lower the incoming (formal) arguments, 2206 /// described by the Ins array, into the specified DAG. The implementation 2207 /// should fill in the InVals array with legal-type argument values, and 2208 /// return the resulting token chain value. 2209 /// 2210 virtual SDValue LowerFormalArguments(SDValue,CallingConv::ID,bool,const SmallVectorImpl<ISD::InputArg> &,SDLoc,SelectionDAG &,SmallVectorImpl<SDValue> &)2211 LowerFormalArguments(SDValue /*Chain*/, CallingConv::ID /*CallConv*/, 2212 bool /*isVarArg*/, 2213 const SmallVectorImpl<ISD::InputArg> &/*Ins*/, 2214 SDLoc /*dl*/, SelectionDAG &/*DAG*/, 2215 SmallVectorImpl<SDValue> &/*InVals*/) const { 2216 llvm_unreachable("Not Implemented"); 2217 } 2218 2219 struct ArgListEntry { 2220 SDValue Node; 2221 Type* Ty; 2222 bool isSExt : 1; 2223 bool isZExt : 1; 2224 bool isInReg : 1; 2225 bool isSRet : 1; 2226 bool isNest : 1; 2227 bool isByVal : 1; 2228 bool isInAlloca : 1; 2229 bool isReturned : 1; 2230 uint16_t Alignment; 2231 ArgListEntryArgListEntry2232 ArgListEntry() : isSExt(false), isZExt(false), isInReg(false), 2233 isSRet(false), isNest(false), isByVal(false), isInAlloca(false), 2234 isReturned(false), Alignment(0) { } 2235 2236 void setAttributes(ImmutableCallSite *CS, unsigned AttrIdx); 2237 }; 2238 typedef std::vector<ArgListEntry> ArgListTy; 2239 2240 /// This structure contains all information that is necessary for lowering 2241 /// calls. It is passed to TLI::LowerCallTo when the SelectionDAG builder 2242 /// needs to lower a call, and targets will see this struct in their LowerCall 2243 /// implementation. 2244 struct CallLoweringInfo { 2245 SDValue Chain; 2246 Type *RetTy; 2247 bool RetSExt : 1; 2248 bool RetZExt : 1; 2249 bool IsVarArg : 1; 2250 bool IsInReg : 1; 2251 bool DoesNotReturn : 1; 2252 bool IsReturnValueUsed : 1; 2253 2254 // IsTailCall should be modified by implementations of 2255 // TargetLowering::LowerCall that perform tail call conversions. 2256 bool IsTailCall; 2257 2258 unsigned NumFixedArgs; 2259 CallingConv::ID CallConv; 2260 SDValue Callee; 2261 ArgListTy Args; 2262 SelectionDAG &DAG; 2263 SDLoc DL; 2264 ImmutableCallSite *CS; 2265 bool IsPatchPoint; 2266 SmallVector<ISD::OutputArg, 32> Outs; 2267 SmallVector<SDValue, 32> OutVals; 2268 SmallVector<ISD::InputArg, 32> Ins; 2269 CallLoweringInfoCallLoweringInfo2270 CallLoweringInfo(SelectionDAG &DAG) 2271 : RetTy(nullptr), RetSExt(false), RetZExt(false), IsVarArg(false), 2272 IsInReg(false), DoesNotReturn(false), IsReturnValueUsed(true), 2273 IsTailCall(false), NumFixedArgs(-1), CallConv(CallingConv::C), 2274 DAG(DAG), CS(nullptr), IsPatchPoint(false) {} 2275 setDebugLocCallLoweringInfo2276 CallLoweringInfo &setDebugLoc(SDLoc dl) { 2277 DL = dl; 2278 return *this; 2279 } 2280 setChainCallLoweringInfo2281 CallLoweringInfo &setChain(SDValue InChain) { 2282 Chain = InChain; 2283 return *this; 2284 } 2285 2286 CallLoweringInfo &setCallee(CallingConv::ID CC, Type *ResultType, 2287 SDValue Target, ArgListTy &&ArgsList, 2288 unsigned FixedArgs = -1) { 2289 RetTy = ResultType; 2290 Callee = Target; 2291 CallConv = CC; 2292 NumFixedArgs = 2293 (FixedArgs == static_cast<unsigned>(-1) ? Args.size() : FixedArgs); 2294 Args = std::move(ArgsList); 2295 return *this; 2296 } 2297 setCalleeCallLoweringInfo2298 CallLoweringInfo &setCallee(Type *ResultType, FunctionType *FTy, 2299 SDValue Target, ArgListTy &&ArgsList, 2300 ImmutableCallSite &Call) { 2301 RetTy = ResultType; 2302 2303 IsInReg = Call.paramHasAttr(0, Attribute::InReg); 2304 DoesNotReturn = Call.doesNotReturn(); 2305 IsVarArg = FTy->isVarArg(); 2306 IsReturnValueUsed = !Call.getInstruction()->use_empty(); 2307 RetSExt = Call.paramHasAttr(0, Attribute::SExt); 2308 RetZExt = Call.paramHasAttr(0, Attribute::ZExt); 2309 2310 Callee = Target; 2311 2312 CallConv = Call.getCallingConv(); 2313 NumFixedArgs = FTy->getNumParams(); 2314 Args = std::move(ArgsList); 2315 2316 CS = &Call; 2317 2318 return *this; 2319 } 2320 2321 CallLoweringInfo &setInRegister(bool Value = true) { 2322 IsInReg = Value; 2323 return *this; 2324 } 2325 2326 CallLoweringInfo &setNoReturn(bool Value = true) { 2327 DoesNotReturn = Value; 2328 return *this; 2329 } 2330 2331 CallLoweringInfo &setVarArg(bool Value = true) { 2332 IsVarArg = Value; 2333 return *this; 2334 } 2335 2336 CallLoweringInfo &setTailCall(bool Value = true) { 2337 IsTailCall = Value; 2338 return *this; 2339 } 2340 2341 CallLoweringInfo &setDiscardResult(bool Value = true) { 2342 IsReturnValueUsed = !Value; 2343 return *this; 2344 } 2345 2346 CallLoweringInfo &setSExtResult(bool Value = true) { 2347 RetSExt = Value; 2348 return *this; 2349 } 2350 2351 CallLoweringInfo &setZExtResult(bool Value = true) { 2352 RetZExt = Value; 2353 return *this; 2354 } 2355 2356 CallLoweringInfo &setIsPatchPoint(bool Value = true) { 2357 IsPatchPoint = Value; 2358 return *this; 2359 } 2360 getArgsCallLoweringInfo2361 ArgListTy &getArgs() { 2362 return Args; 2363 } 2364 }; 2365 2366 /// This function lowers an abstract call to a function into an actual call. 2367 /// This returns a pair of operands. The first element is the return value 2368 /// for the function (if RetTy is not VoidTy). The second element is the 2369 /// outgoing token chain. It calls LowerCall to do the actual lowering. 2370 std::pair<SDValue, SDValue> LowerCallTo(CallLoweringInfo &CLI) const; 2371 2372 /// This hook must be implemented to lower calls into the the specified 2373 /// DAG. The outgoing arguments to the call are described by the Outs array, 2374 /// and the values to be returned by the call are described by the Ins 2375 /// array. The implementation should fill in the InVals array with legal-type 2376 /// return values from the call, and return the resulting token chain value. 2377 virtual SDValue LowerCall(CallLoweringInfo &,SmallVectorImpl<SDValue> &)2378 LowerCall(CallLoweringInfo &/*CLI*/, 2379 SmallVectorImpl<SDValue> &/*InVals*/) const { 2380 llvm_unreachable("Not Implemented"); 2381 } 2382 2383 /// Target-specific cleanup for formal ByVal parameters. HandleByVal(CCState *,unsigned &,unsigned)2384 virtual void HandleByVal(CCState *, unsigned &, unsigned) const {} 2385 2386 /// This hook should be implemented to check whether the return values 2387 /// described by the Outs array can fit into the return registers. If false 2388 /// is returned, an sret-demotion is performed. CanLowerReturn(CallingConv::ID,MachineFunction &,bool,const SmallVectorImpl<ISD::OutputArg> &,LLVMContext &)2389 virtual bool CanLowerReturn(CallingConv::ID /*CallConv*/, 2390 MachineFunction &/*MF*/, bool /*isVarArg*/, 2391 const SmallVectorImpl<ISD::OutputArg> &/*Outs*/, 2392 LLVMContext &/*Context*/) const 2393 { 2394 // Return true by default to get preexisting behavior. 2395 return true; 2396 } 2397 2398 /// This hook must be implemented to lower outgoing return values, described 2399 /// by the Outs array, into the specified DAG. The implementation should 2400 /// return the resulting token chain value. 2401 virtual SDValue LowerReturn(SDValue,CallingConv::ID,bool,const SmallVectorImpl<ISD::OutputArg> &,const SmallVectorImpl<SDValue> &,SDLoc,SelectionDAG &)2402 LowerReturn(SDValue /*Chain*/, CallingConv::ID /*CallConv*/, 2403 bool /*isVarArg*/, 2404 const SmallVectorImpl<ISD::OutputArg> &/*Outs*/, 2405 const SmallVectorImpl<SDValue> &/*OutVals*/, 2406 SDLoc /*dl*/, SelectionDAG &/*DAG*/) const { 2407 llvm_unreachable("Not Implemented"); 2408 } 2409 2410 /// Return true if result of the specified node is used by a return node 2411 /// only. It also compute and return the input chain for the tail call. 2412 /// 2413 /// This is used to determine whether it is possible to codegen a libcall as 2414 /// tail call at legalization time. isUsedByReturnOnly(SDNode *,SDValue &)2415 virtual bool isUsedByReturnOnly(SDNode *, SDValue &/*Chain*/) const { 2416 return false; 2417 } 2418 2419 /// Return true if the target may be able emit the call instruction as a tail 2420 /// call. This is used by optimization passes to determine if it's profitable 2421 /// to duplicate return instructions to enable tailcall optimization. mayBeEmittedAsTailCall(CallInst *)2422 virtual bool mayBeEmittedAsTailCall(CallInst *) const { 2423 return false; 2424 } 2425 2426 /// Return the builtin name for the __builtin___clear_cache intrinsic 2427 /// Default is to invoke the clear cache library call getClearCacheBuiltinName()2428 virtual const char * getClearCacheBuiltinName() const { 2429 return "__clear_cache"; 2430 } 2431 2432 /// Return the register ID of the name passed in. Used by named register 2433 /// global variables extension. There is no target-independent behaviour 2434 /// so the default action is to bail. getRegisterByName(const char * RegName,EVT VT)2435 virtual unsigned getRegisterByName(const char* RegName, EVT VT) const { 2436 report_fatal_error("Named registers not implemented for this target"); 2437 } 2438 2439 /// Return the type that should be used to zero or sign extend a 2440 /// zeroext/signext integer argument or return value. FIXME: Most C calling 2441 /// convention requires the return type to be promoted, but this is not true 2442 /// all the time, e.g. i1 on x86-64. It is also not necessary for non-C 2443 /// calling conventions. The frontend should handle this and include all of 2444 /// the necessary information. getTypeForExtArgOrReturn(LLVMContext & Context,EVT VT,ISD::NodeType)2445 virtual EVT getTypeForExtArgOrReturn(LLVMContext &Context, EVT VT, 2446 ISD::NodeType /*ExtendKind*/) const { 2447 EVT MinVT = getRegisterType(Context, MVT::i32); 2448 return VT.bitsLT(MinVT) ? MinVT : VT; 2449 } 2450 2451 /// For some targets, an LLVM struct type must be broken down into multiple 2452 /// simple types, but the calling convention specifies that the entire struct 2453 /// must be passed in a block of consecutive registers. 2454 virtual bool functionArgumentNeedsConsecutiveRegisters(Type * Ty,CallingConv::ID CallConv,bool isVarArg)2455 functionArgumentNeedsConsecutiveRegisters(Type *Ty, CallingConv::ID CallConv, 2456 bool isVarArg) const { 2457 return false; 2458 } 2459 2460 /// Returns a 0 terminated array of registers that can be safely used as 2461 /// scratch registers. getScratchRegisters(CallingConv::ID CC)2462 virtual const MCPhysReg *getScratchRegisters(CallingConv::ID CC) const { 2463 return nullptr; 2464 } 2465 2466 /// This callback is used to prepare for a volatile or atomic load. 2467 /// It takes a chain node as input and returns the chain for the load itself. 2468 /// 2469 /// Having a callback like this is necessary for targets like SystemZ, 2470 /// which allows a CPU to reuse the result of a previous load indefinitely, 2471 /// even if a cache-coherent store is performed by another CPU. The default 2472 /// implementation does nothing. prepareVolatileOrAtomicLoad(SDValue Chain,SDLoc DL,SelectionDAG & DAG)2473 virtual SDValue prepareVolatileOrAtomicLoad(SDValue Chain, SDLoc DL, 2474 SelectionDAG &DAG) const { 2475 return Chain; 2476 } 2477 2478 /// This callback is invoked by the type legalizer to legalize nodes with an 2479 /// illegal operand type but legal result types. It replaces the 2480 /// LowerOperation callback in the type Legalizer. The reason we can not do 2481 /// away with LowerOperation entirely is that LegalizeDAG isn't yet ready to 2482 /// use this callback. 2483 /// 2484 /// TODO: Consider merging with ReplaceNodeResults. 2485 /// 2486 /// The target places new result values for the node in Results (their number 2487 /// and types must exactly match those of the original return values of 2488 /// the node), or leaves Results empty, which indicates that the node is not 2489 /// to be custom lowered after all. 2490 /// The default implementation calls LowerOperation. 2491 virtual void LowerOperationWrapper(SDNode *N, 2492 SmallVectorImpl<SDValue> &Results, 2493 SelectionDAG &DAG) const; 2494 2495 /// This callback is invoked for operations that are unsupported by the 2496 /// target, which are registered to use 'custom' lowering, and whose defined 2497 /// values are all legal. If the target has no operations that require custom 2498 /// lowering, it need not implement this. The default implementation of this 2499 /// aborts. 2500 virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const; 2501 2502 /// This callback is invoked when a node result type is illegal for the 2503 /// target, and the operation was registered to use 'custom' lowering for that 2504 /// result type. The target places new result values for the node in Results 2505 /// (their number and types must exactly match those of the original return 2506 /// values of the node), or leaves Results empty, which indicates that the 2507 /// node is not to be custom lowered after all. 2508 /// 2509 /// If the target has no operations that require custom lowering, it need not 2510 /// implement this. The default implementation aborts. ReplaceNodeResults(SDNode *,SmallVectorImpl<SDValue> &,SelectionDAG &)2511 virtual void ReplaceNodeResults(SDNode * /*N*/, 2512 SmallVectorImpl<SDValue> &/*Results*/, 2513 SelectionDAG &/*DAG*/) const { 2514 llvm_unreachable("ReplaceNodeResults not implemented for this target!"); 2515 } 2516 2517 /// This method returns the name of a target specific DAG node. 2518 virtual const char *getTargetNodeName(unsigned Opcode) const; 2519 2520 /// This method returns a target specific FastISel object, or null if the 2521 /// target does not support "fast" ISel. createFastISel(FunctionLoweringInfo &,const TargetLibraryInfo *)2522 virtual FastISel *createFastISel(FunctionLoweringInfo &, 2523 const TargetLibraryInfo *) const { 2524 return nullptr; 2525 } 2526 2527 2528 bool verifyReturnAddressArgumentIsConstant(SDValue Op, 2529 SelectionDAG &DAG) const; 2530 2531 //===--------------------------------------------------------------------===// 2532 // Inline Asm Support hooks 2533 // 2534 2535 /// This hook allows the target to expand an inline asm call to be explicit 2536 /// llvm code if it wants to. This is useful for turning simple inline asms 2537 /// into LLVM intrinsics, which gives the compiler more information about the 2538 /// behavior of the code. ExpandInlineAsm(CallInst *)2539 virtual bool ExpandInlineAsm(CallInst *) const { 2540 return false; 2541 } 2542 2543 enum ConstraintType { 2544 C_Register, // Constraint represents specific register(s). 2545 C_RegisterClass, // Constraint represents any of register(s) in class. 2546 C_Memory, // Memory constraint. 2547 C_Other, // Something else. 2548 C_Unknown // Unsupported constraint. 2549 }; 2550 2551 enum ConstraintWeight { 2552 // Generic weights. 2553 CW_Invalid = -1, // No match. 2554 CW_Okay = 0, // Acceptable. 2555 CW_Good = 1, // Good weight. 2556 CW_Better = 2, // Better weight. 2557 CW_Best = 3, // Best weight. 2558 2559 // Well-known weights. 2560 CW_SpecificReg = CW_Okay, // Specific register operands. 2561 CW_Register = CW_Good, // Register operands. 2562 CW_Memory = CW_Better, // Memory operands. 2563 CW_Constant = CW_Best, // Constant operand. 2564 CW_Default = CW_Okay // Default or don't know type. 2565 }; 2566 2567 /// This contains information for each constraint that we are lowering. 2568 struct AsmOperandInfo : public InlineAsm::ConstraintInfo { 2569 /// This contains the actual string for the code, like "m". TargetLowering 2570 /// picks the 'best' code from ConstraintInfo::Codes that most closely 2571 /// matches the operand. 2572 std::string ConstraintCode; 2573 2574 /// Information about the constraint code, e.g. Register, RegisterClass, 2575 /// Memory, Other, Unknown. 2576 TargetLowering::ConstraintType ConstraintType; 2577 2578 /// If this is the result output operand or a clobber, this is null, 2579 /// otherwise it is the incoming operand to the CallInst. This gets 2580 /// modified as the asm is processed. 2581 Value *CallOperandVal; 2582 2583 /// The ValueType for the operand value. 2584 MVT ConstraintVT; 2585 2586 /// Return true of this is an input operand that is a matching constraint 2587 /// like "4". 2588 bool isMatchingInputConstraint() const; 2589 2590 /// If this is an input matching constraint, this method returns the output 2591 /// operand it matches. 2592 unsigned getMatchedOperand() const; 2593 2594 /// Copy constructor for copying from a ConstraintInfo. AsmOperandInfoAsmOperandInfo2595 AsmOperandInfo(InlineAsm::ConstraintInfo Info) 2596 : InlineAsm::ConstraintInfo(std::move(Info)), 2597 ConstraintType(TargetLowering::C_Unknown), CallOperandVal(nullptr), 2598 ConstraintVT(MVT::Other) {} 2599 }; 2600 2601 typedef std::vector<AsmOperandInfo> AsmOperandInfoVector; 2602 2603 /// Split up the constraint string from the inline assembly value into the 2604 /// specific constraints and their prefixes, and also tie in the associated 2605 /// operand values. If this returns an empty vector, and if the constraint 2606 /// string itself isn't empty, there was an error parsing. 2607 virtual AsmOperandInfoVector ParseConstraints(const TargetRegisterInfo *TRI, 2608 ImmutableCallSite CS) const; 2609 2610 /// Examine constraint type and operand type and determine a weight value. 2611 /// The operand object must already have been set up with the operand type. 2612 virtual ConstraintWeight getMultipleConstraintMatchWeight( 2613 AsmOperandInfo &info, int maIndex) const; 2614 2615 /// Examine constraint string and operand type and determine a weight value. 2616 /// The operand object must already have been set up with the operand type. 2617 virtual ConstraintWeight getSingleConstraintMatchWeight( 2618 AsmOperandInfo &info, const char *constraint) const; 2619 2620 /// Determines the constraint code and constraint type to use for the specific 2621 /// AsmOperandInfo, setting OpInfo.ConstraintCode and OpInfo.ConstraintType. 2622 /// If the actual operand being passed in is available, it can be passed in as 2623 /// Op, otherwise an empty SDValue can be passed. 2624 virtual void ComputeConstraintToUse(AsmOperandInfo &OpInfo, 2625 SDValue Op, 2626 SelectionDAG *DAG = nullptr) const; 2627 2628 /// Given a constraint, return the type of constraint it is for this target. 2629 virtual ConstraintType getConstraintType(const std::string &Constraint) const; 2630 2631 /// Given a physical register constraint (e.g. {edx}), return the register 2632 /// number and the register class for the register. 2633 /// 2634 /// Given a register class constraint, like 'r', if this corresponds directly 2635 /// to an LLVM register class, return a register of 0 and the register class 2636 /// pointer. 2637 /// 2638 /// This should only be used for C_Register constraints. On error, this 2639 /// returns a register number of 0 and a null register class pointer. 2640 virtual std::pair<unsigned, const TargetRegisterClass *> 2641 getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI, 2642 const std::string &Constraint, MVT VT) const; 2643 2644 virtual unsigned getInlineAsmMemConstraint(const std::string & ConstraintCode)2645 getInlineAsmMemConstraint(const std::string &ConstraintCode) const { 2646 if (ConstraintCode == "i") 2647 return InlineAsm::Constraint_i; 2648 else if (ConstraintCode == "m") 2649 return InlineAsm::Constraint_m; 2650 return InlineAsm::Constraint_Unknown; 2651 } 2652 2653 /// Try to replace an X constraint, which matches anything, with another that 2654 /// has more specific requirements based on the type of the corresponding 2655 /// operand. This returns null if there is no replacement to make. 2656 virtual const char *LowerXConstraint(EVT ConstraintVT) const; 2657 2658 /// Lower the specified operand into the Ops vector. If it is invalid, don't 2659 /// add anything to Ops. 2660 virtual void LowerAsmOperandForConstraint(SDValue Op, std::string &Constraint, 2661 std::vector<SDValue> &Ops, 2662 SelectionDAG &DAG) const; 2663 2664 //===--------------------------------------------------------------------===// 2665 // Div utility functions 2666 // 2667 SDValue BuildExactSDIV(SDValue Op1, SDValue Op2, SDLoc dl, 2668 SelectionDAG &DAG) const; 2669 SDValue BuildSDIV(SDNode *N, const APInt &Divisor, SelectionDAG &DAG, 2670 bool IsAfterLegalization, 2671 std::vector<SDNode *> *Created) const; 2672 SDValue BuildUDIV(SDNode *N, const APInt &Divisor, SelectionDAG &DAG, 2673 bool IsAfterLegalization, 2674 std::vector<SDNode *> *Created) const; BuildSDIVPow2(SDNode * N,const APInt & Divisor,SelectionDAG & DAG,std::vector<SDNode * > * Created)2675 virtual SDValue BuildSDIVPow2(SDNode *N, const APInt &Divisor, 2676 SelectionDAG &DAG, 2677 std::vector<SDNode *> *Created) const { 2678 return SDValue(); 2679 } 2680 2681 /// Indicate whether this target prefers to combine the given number of FDIVs 2682 /// with the same divisor. combineRepeatedFPDivisors(unsigned NumUsers)2683 virtual bool combineRepeatedFPDivisors(unsigned NumUsers) const { 2684 return false; 2685 } 2686 2687 /// Hooks for building estimates in place of slower divisions and square 2688 /// roots. 2689 2690 /// Return a reciprocal square root estimate value for the input operand. 2691 /// The RefinementSteps output is the number of Newton-Raphson refinement 2692 /// iterations required to generate a sufficient (though not necessarily 2693 /// IEEE-754 compliant) estimate for the value type. 2694 /// The boolean UseOneConstNR output is used to select a Newton-Raphson 2695 /// algorithm implementation that uses one constant or two constants. 2696 /// A target may choose to implement its own refinement within this function. 2697 /// If that's true, then return '0' as the number of RefinementSteps to avoid 2698 /// any further refinement of the estimate. 2699 /// An empty SDValue return means no estimate sequence can be created. getRsqrtEstimate(SDValue Operand,DAGCombinerInfo & DCI,unsigned & RefinementSteps,bool & UseOneConstNR)2700 virtual SDValue getRsqrtEstimate(SDValue Operand, 2701 DAGCombinerInfo &DCI, 2702 unsigned &RefinementSteps, 2703 bool &UseOneConstNR) const { 2704 return SDValue(); 2705 } 2706 2707 /// Return a reciprocal estimate value for the input operand. 2708 /// The RefinementSteps output is the number of Newton-Raphson refinement 2709 /// iterations required to generate a sufficient (though not necessarily 2710 /// IEEE-754 compliant) estimate for the value type. 2711 /// A target may choose to implement its own refinement within this function. 2712 /// If that's true, then return '0' as the number of RefinementSteps to avoid 2713 /// any further refinement of the estimate. 2714 /// An empty SDValue return means no estimate sequence can be created. getRecipEstimate(SDValue Operand,DAGCombinerInfo & DCI,unsigned & RefinementSteps)2715 virtual SDValue getRecipEstimate(SDValue Operand, 2716 DAGCombinerInfo &DCI, 2717 unsigned &RefinementSteps) const { 2718 return SDValue(); 2719 } 2720 2721 //===--------------------------------------------------------------------===// 2722 // Legalization utility functions 2723 // 2724 2725 /// Expand a MUL into two nodes. One that computes the high bits of 2726 /// the result and one that computes the low bits. 2727 /// \param HiLoVT The value type to use for the Lo and Hi nodes. 2728 /// \param LL Low bits of the LHS of the MUL. You can use this parameter 2729 /// if you want to control how low bits are extracted from the LHS. 2730 /// \param LH High bits of the LHS of the MUL. See LL for meaning. 2731 /// \param RL Low bits of the RHS of the MUL. See LL for meaning 2732 /// \param RH High bits of the RHS of the MUL. See LL for meaning. 2733 /// \returns true if the node has been expanded. false if it has not 2734 bool expandMUL(SDNode *N, SDValue &Lo, SDValue &Hi, EVT HiLoVT, 2735 SelectionDAG &DAG, SDValue LL = SDValue(), 2736 SDValue LH = SDValue(), SDValue RL = SDValue(), 2737 SDValue RH = SDValue()) const; 2738 2739 /// Expand float(f32) to SINT(i64) conversion 2740 /// \param N Node to expand 2741 /// \param Result output after conversion 2742 /// \returns True, if the expansion was successful, false otherwise 2743 bool expandFP_TO_SINT(SDNode *N, SDValue &Result, SelectionDAG &DAG) const; 2744 2745 //===--------------------------------------------------------------------===// 2746 // Instruction Emitting Hooks 2747 // 2748 2749 /// This method should be implemented by targets that mark instructions with 2750 /// the 'usesCustomInserter' flag. These instructions are special in various 2751 /// ways, which require special support to insert. The specified MachineInstr 2752 /// is created but not inserted into any basic blocks, and this method is 2753 /// called to expand it into a sequence of instructions, potentially also 2754 /// creating new basic blocks and control flow. 2755 /// As long as the returned basic block is different (i.e., we created a new 2756 /// one), the custom inserter is free to modify the rest of \p MBB. 2757 virtual MachineBasicBlock * 2758 EmitInstrWithCustomInserter(MachineInstr *MI, MachineBasicBlock *MBB) const; 2759 2760 /// This method should be implemented by targets that mark instructions with 2761 /// the 'hasPostISelHook' flag. These instructions must be adjusted after 2762 /// instruction selection by target hooks. e.g. To fill in optional defs for 2763 /// ARM 's' setting instructions. 2764 virtual void 2765 AdjustInstrPostInstrSelection(MachineInstr *MI, SDNode *Node) const; 2766 2767 /// If this function returns true, SelectionDAGBuilder emits a 2768 /// LOAD_STACK_GUARD node when it is lowering Intrinsic::stackprotector. useLoadStackGuardNode()2769 virtual bool useLoadStackGuardNode() const { 2770 return false; 2771 } 2772 }; 2773 2774 /// Given an LLVM IR type and return type attributes, compute the return value 2775 /// EVTs and flags, and optionally also the offsets, if the return value is 2776 /// being lowered to memory. 2777 void GetReturnInfo(Type* ReturnType, AttributeSet attr, 2778 SmallVectorImpl<ISD::OutputArg> &Outs, 2779 const TargetLowering &TLI); 2780 2781 } // end llvm namespace 2782 2783 #endif 2784