Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- llvm/CodeGen/TargetLowering.h - Target Lowering Info -----*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
///
9
/// \file
10
/// This file describes how to lower LLVM code to machine code.  This has two
11
/// main components:
12
///
13
///  1. Which ValueTypes are natively supported by the target.
14
///  2. Which operations are supported for supported ValueTypes.
15
///  3. Cost thresholds for alternative implementations of certain operations.
16
///
17
/// In addition it has a few other components, like information about FP
18
/// immediates.
19
///
20
//===----------------------------------------------------------------------===//
21
 
22
#ifndef LLVM_CODEGEN_TARGETLOWERING_H
23
#define LLVM_CODEGEN_TARGETLOWERING_H
24
 
25
#include "llvm/ADT/APInt.h"
26
#include "llvm/ADT/ArrayRef.h"
27
#include "llvm/ADT/DenseMap.h"
28
#include "llvm/ADT/SmallVector.h"
29
#include "llvm/ADT/StringRef.h"
30
#include "llvm/CodeGen/ComplexDeinterleavingPass.h"
31
#include "llvm/CodeGen/DAGCombine.h"
32
#include "llvm/CodeGen/ISDOpcodes.h"
33
#include "llvm/CodeGen/LowLevelType.h"
34
#include "llvm/CodeGen/RuntimeLibcalls.h"
35
#include "llvm/CodeGen/SelectionDAG.h"
36
#include "llvm/CodeGen/SelectionDAGNodes.h"
37
#include "llvm/CodeGen/TargetCallingConv.h"
38
#include "llvm/CodeGen/ValueTypes.h"
39
#include "llvm/IR/Attributes.h"
40
#include "llvm/IR/CallingConv.h"
41
#include "llvm/IR/DataLayout.h"
42
#include "llvm/IR/DerivedTypes.h"
43
#include "llvm/IR/Function.h"
44
#include "llvm/IR/InlineAsm.h"
45
#include "llvm/IR/Instruction.h"
46
#include "llvm/IR/Instructions.h"
47
#include "llvm/IR/Type.h"
48
#include "llvm/Support/Alignment.h"
49
#include "llvm/Support/AtomicOrdering.h"
50
#include "llvm/Support/Casting.h"
51
#include "llvm/Support/ErrorHandling.h"
52
#include "llvm/Support/MachineValueType.h"
53
#include <algorithm>
54
#include <cassert>
55
#include <climits>
56
#include <cstdint>
57
#include <iterator>
58
#include <map>
59
#include <string>
60
#include <utility>
61
#include <vector>
62
 
63
namespace llvm {
64
 
65
class AssumptionCache;
66
class CCState;
67
class CCValAssign;
68
class Constant;
69
class FastISel;
70
class FunctionLoweringInfo;
71
class GlobalValue;
72
class Loop;
73
class GISelKnownBits;
74
class IntrinsicInst;
75
class IRBuilderBase;
76
struct KnownBits;
77
class LegacyDivergenceAnalysis;
78
class LLVMContext;
79
class MachineBasicBlock;
80
class MachineFunction;
81
class MachineInstr;
82
class MachineJumpTableInfo;
83
class MachineLoop;
84
class MachineRegisterInfo;
85
class MCContext;
86
class MCExpr;
87
class Module;
88
class ProfileSummaryInfo;
89
class TargetLibraryInfo;
90
class TargetMachine;
91
class TargetRegisterClass;
92
class TargetRegisterInfo;
93
class TargetTransformInfo;
94
class Value;
95
 
96
namespace Sched {
97
 
98
enum Preference {
99
  None,        // No preference
100
  Source,      // Follow source order.
101
  RegPressure, // Scheduling for lowest register pressure.
102
  Hybrid,      // Scheduling for both latency and register pressure.
103
  ILP,         // Scheduling for ILP in low register pressure mode.
104
  VLIW,        // Scheduling for VLIW targets.
105
  Fast,        // Fast suboptimal list scheduling
106
  Linearize    // Linearize DAG, no scheduling
107
};
108
 
109
} // end namespace Sched
110
 
111
// MemOp models a memory operation, either memset or memcpy/memmove.
112
struct MemOp {
113
private:
114
  // Shared
115
  uint64_t Size;
116
  bool DstAlignCanChange; // true if destination alignment can satisfy any
117
                          // constraint.
118
  Align DstAlign;         // Specified alignment of the memory operation.
119
 
120
  bool AllowOverlap;
121
  // memset only
122
  bool IsMemset;   // If setthis memory operation is a memset.
123
  bool ZeroMemset; // If set clears out memory with zeros.
124
  // memcpy only
125
  bool MemcpyStrSrc; // Indicates whether the memcpy source is an in-register
126
                     // constant so it does not need to be loaded.
127
  Align SrcAlign;    // Inferred alignment of the source or default value if the
128
                     // memory operation does not need to load the value.
129
public:
130
  static MemOp Copy(uint64_t Size, bool DstAlignCanChange, Align DstAlign,
131
                    Align SrcAlign, bool IsVolatile,
132
                    bool MemcpyStrSrc = false) {
133
    MemOp Op;
134
    Op.Size = Size;
135
    Op.DstAlignCanChange = DstAlignCanChange;
136
    Op.DstAlign = DstAlign;
137
    Op.AllowOverlap = !IsVolatile;
138
    Op.IsMemset = false;
139
    Op.ZeroMemset = false;
140
    Op.MemcpyStrSrc = MemcpyStrSrc;
141
    Op.SrcAlign = SrcAlign;
142
    return Op;
143
  }
144
 
145
  static MemOp Set(uint64_t Size, bool DstAlignCanChange, Align DstAlign,
146
                   bool IsZeroMemset, bool IsVolatile) {
147
    MemOp Op;
148
    Op.Size = Size;
149
    Op.DstAlignCanChange = DstAlignCanChange;
150
    Op.DstAlign = DstAlign;
151
    Op.AllowOverlap = !IsVolatile;
152
    Op.IsMemset = true;
153
    Op.ZeroMemset = IsZeroMemset;
154
    Op.MemcpyStrSrc = false;
155
    return Op;
156
  }
157
 
158
  uint64_t size() const { return Size; }
159
  Align getDstAlign() const {
160
    assert(!DstAlignCanChange);
161
    return DstAlign;
162
  }
163
  bool isFixedDstAlign() const { return !DstAlignCanChange; }
164
  bool allowOverlap() const { return AllowOverlap; }
165
  bool isMemset() const { return IsMemset; }
166
  bool isMemcpy() const { return !IsMemset; }
167
  bool isMemcpyWithFixedDstAlign() const {
168
    return isMemcpy() && !DstAlignCanChange;
169
  }
170
  bool isZeroMemset() const { return isMemset() && ZeroMemset; }
171
  bool isMemcpyStrSrc() const {
172
    assert(isMemcpy() && "Must be a memcpy");
173
    return MemcpyStrSrc;
174
  }
175
  Align getSrcAlign() const {
176
    assert(isMemcpy() && "Must be a memcpy");
177
    return SrcAlign;
178
  }
179
  bool isSrcAligned(Align AlignCheck) const {
180
    return isMemset() || llvm::isAligned(AlignCheck, SrcAlign.value());
181
  }
182
  bool isDstAligned(Align AlignCheck) const {
183
    return DstAlignCanChange || llvm::isAligned(AlignCheck, DstAlign.value());
184
  }
185
  bool isAligned(Align AlignCheck) const {
186
    return isSrcAligned(AlignCheck) && isDstAligned(AlignCheck);
187
  }
188
};
189
 
190
/// This base class for TargetLowering contains the SelectionDAG-independent
191
/// parts that can be used from the rest of CodeGen.
192
class TargetLoweringBase {
193
public:
194
  /// This enum indicates whether operations are valid for a target, and if not,
195
  /// what action should be used to make them valid.
196
  enum LegalizeAction : uint8_t {
197
    Legal,      // The target natively supports this operation.
198
    Promote,    // This operation should be executed in a larger type.
199
    Expand,     // Try to expand this to other ops, otherwise use a libcall.
200
    LibCall,    // Don't try to expand this to other ops, always use a libcall.
201
    Custom      // Use the LowerOperation hook to implement custom lowering.
202
  };
203
 
204
  /// This enum indicates whether a types are legal for a target, and if not,
205
  /// what action should be used to make them valid.
206
  enum LegalizeTypeAction : uint8_t {
207
    TypeLegal,           // The target natively supports this type.
208
    TypePromoteInteger,  // Replace this integer with a larger one.
209
    TypeExpandInteger,   // Split this integer into two of half the size.
210
    TypeSoftenFloat,     // Convert this float to a same size integer type.
211
    TypeExpandFloat,     // Split this float into two of half the size.
212
    TypeScalarizeVector, // Replace this one-element vector with its element.
213
    TypeSplitVector,     // Split this vector into two of half the size.
214
    TypeWidenVector,     // This vector should be widened into a larger vector.
215
    TypePromoteFloat,    // Replace this float with a larger one.
216
    TypeSoftPromoteHalf, // Soften half to i16 and use float to do arithmetic.
217
    TypeScalarizeScalableVector, // This action is explicitly left unimplemented.
218
                                 // While it is theoretically possible to
219
                                 // legalize operations on scalable types with a
220
                                 // loop that handles the vscale * #lanes of the
221
                                 // vector, this is non-trivial at SelectionDAG
222
                                 // level and these types are better to be
223
                                 // widened or promoted.
224
  };
225
 
226
  /// LegalizeKind holds the legalization kind that needs to happen to EVT
227
  /// in order to type-legalize it.
228
  using LegalizeKind = std::pair<LegalizeTypeAction, EVT>;
229
 
230
  /// Enum that describes how the target represents true/false values.
231
  enum BooleanContent {
232
    UndefinedBooleanContent,    // Only bit 0 counts, the rest can hold garbage.
233
    ZeroOrOneBooleanContent,        // All bits zero except for bit 0.
234
    ZeroOrNegativeOneBooleanContent // All bits equal to bit 0.
235
  };
236
 
237
  /// Enum that describes what type of support for selects the target has.
238
  enum SelectSupportKind {
239
    ScalarValSelect,      // The target supports scalar selects (ex: cmov).
240
    ScalarCondVectorVal,  // The target supports selects with a scalar condition
241
                          // and vector values (ex: cmov).
242
    VectorMaskSelect      // The target supports vector selects with a vector
243
                          // mask (ex: x86 blends).
244
  };
245
 
246
  /// Enum that specifies what an atomic load/AtomicRMWInst is expanded
247
  /// to, if at all. Exists because different targets have different levels of
248
  /// support for these atomic instructions, and also have different options
249
  /// w.r.t. what they should expand to.
250
  enum class AtomicExpansionKind {
251
    None,    // Don't expand the instruction.
252
    CastToInteger,    // Cast the atomic instruction to another type, e.g. from
253
                      // floating-point to integer type.
254
    LLSC,    // Expand the instruction into loadlinked/storeconditional; used
255
             // by ARM/AArch64.
256
    LLOnly,  // Expand the (load) instruction into just a load-linked, which has
257
             // greater atomic guarantees than a normal load.
258
    CmpXChg, // Expand the instruction into cmpxchg; used by at least X86.
259
    MaskedIntrinsic,  // Use a target-specific intrinsic for the LL/SC loop.
260
    BitTestIntrinsic, // Use a target-specific intrinsic for special bit
261
                      // operations; used by X86.
262
    CmpArithIntrinsic,// Use a target-specific intrinsic for special compare
263
                      // operations; used by X86.
264
    Expand,           // Generic expansion in terms of other atomic operations.
265
 
266
    // Rewrite to a non-atomic form for use in a known non-preemptible
267
    // environment.
268
    NotAtomic
269
  };
270
 
271
  /// Enum that specifies when a multiplication should be expanded.
272
  enum class MulExpansionKind {
273
    Always,            // Always expand the instruction.
274
    OnlyLegalOrCustom, // Only expand when the resulting instructions are legal
275
                       // or custom.
276
  };
277
 
278
  /// Enum that specifies when a float negation is beneficial.
279
  enum class NegatibleCost {
280
    Cheaper = 0,    // Negated expression is cheaper.
281
    Neutral = 1,    // Negated expression has the same cost.
282
    Expensive = 2   // Negated expression is more expensive.
283
  };
284
 
285
  class ArgListEntry {
286
  public:
287
    Value *Val = nullptr;
288
    SDValue Node = SDValue();
289
    Type *Ty = nullptr;
290
    bool IsSExt : 1;
291
    bool IsZExt : 1;
292
    bool IsInReg : 1;
293
    bool IsSRet : 1;
294
    bool IsNest : 1;
295
    bool IsByVal : 1;
296
    bool IsByRef : 1;
297
    bool IsInAlloca : 1;
298
    bool IsPreallocated : 1;
299
    bool IsReturned : 1;
300
    bool IsSwiftSelf : 1;
301
    bool IsSwiftAsync : 1;
302
    bool IsSwiftError : 1;
303
    bool IsCFGuardTarget : 1;
304
    MaybeAlign Alignment = std::nullopt;
305
    Type *IndirectType = nullptr;
306
 
307
    ArgListEntry()
308
        : IsSExt(false), IsZExt(false), IsInReg(false), IsSRet(false),
309
          IsNest(false), IsByVal(false), IsByRef(false), IsInAlloca(false),
310
          IsPreallocated(false), IsReturned(false), IsSwiftSelf(false),
311
          IsSwiftAsync(false), IsSwiftError(false), IsCFGuardTarget(false) {}
312
 
313
    void setAttributes(const CallBase *Call, unsigned ArgIdx);
314
  };
315
  using ArgListTy = std::vector<ArgListEntry>;
316
 
317
  virtual void markLibCallAttributes(MachineFunction *MF, unsigned CC,
318
                                     ArgListTy &Args) const {};
319
 
320
  static ISD::NodeType getExtendForContent(BooleanContent Content) {
321
    switch (Content) {
322
    case UndefinedBooleanContent:
323
      // Extend by adding rubbish bits.
324
      return ISD::ANY_EXTEND;
325
    case ZeroOrOneBooleanContent:
326
      // Extend by adding zero bits.
327
      return ISD::ZERO_EXTEND;
328
    case ZeroOrNegativeOneBooleanContent:
329
      // Extend by copying the sign bit.
330
      return ISD::SIGN_EXTEND;
331
    }
332
    llvm_unreachable("Invalid content kind");
333
  }
334
 
335
  explicit TargetLoweringBase(const TargetMachine &TM);
336
  TargetLoweringBase(const TargetLoweringBase &) = delete;
337
  TargetLoweringBase &operator=(const TargetLoweringBase &) = delete;
338
  virtual ~TargetLoweringBase() = default;
339
 
340
  /// Return true if the target support strict float operation
341
  bool isStrictFPEnabled() const {
342
    return IsStrictFPEnabled;
343
  }
344
 
345
protected:
346
  /// Initialize all of the actions to default values.
347
  void initActions();
348
 
349
public:
350
  const TargetMachine &getTargetMachine() const { return TM; }
351
 
352
  virtual bool useSoftFloat() const { return false; }
353
 
354
  /// Return the pointer type for the given address space, defaults to
355
  /// the pointer type from the data layout.
356
  /// FIXME: The default needs to be removed once all the code is updated.
357
  virtual MVT getPointerTy(const DataLayout &DL, uint32_t AS = 0) const {
358
    return MVT::getIntegerVT(DL.getPointerSizeInBits(AS));
359
  }
360
 
361
  /// Return the in-memory pointer type for the given address space, defaults to
362
  /// the pointer type from the data layout.  FIXME: The default needs to be
363
  /// removed once all the code is updated.
364
  virtual MVT getPointerMemTy(const DataLayout &DL, uint32_t AS = 0) const {
365
    return MVT::getIntegerVT(DL.getPointerSizeInBits(AS));
366
  }
367
 
368
  /// Return the type for frame index, which is determined by
369
  /// the alloca address space specified through the data layout.
370
  MVT getFrameIndexTy(const DataLayout &DL) const {
371
    return getPointerTy(DL, DL.getAllocaAddrSpace());
372
  }
373
 
374
  /// Return the type for code pointers, which is determined by the program
375
  /// address space specified through the data layout.
376
  MVT getProgramPointerTy(const DataLayout &DL) const {
377
    return getPointerTy(DL, DL.getProgramAddressSpace());
378
  }
379
 
380
  /// Return the type for operands of fence.
381
  /// TODO: Let fence operands be of i32 type and remove this.
382
  virtual MVT getFenceOperandTy(const DataLayout &DL) const {
383
    return getPointerTy(DL);
384
  }
385
 
386
  /// Return the type to use for a scalar shift opcode, given the shifted amount
387
  /// type. Targets should return a legal type if the input type is legal.
388
  /// Targets can return a type that is too small if the input type is illegal.
389
  virtual MVT getScalarShiftAmountTy(const DataLayout &, EVT) const;
390
 
391
  /// Returns the type for the shift amount of a shift opcode. For vectors,
392
  /// returns the input type. For scalars, behavior depends on \p LegalTypes. If
393
  /// \p LegalTypes is true, calls getScalarShiftAmountTy, otherwise uses
394
  /// pointer type. If getScalarShiftAmountTy or pointer type cannot represent
395
  /// all possible shift amounts, returns MVT::i32. In general, \p LegalTypes
396
  /// should be set to true for calls during type legalization and after type
397
  /// legalization has been completed.
398
  EVT getShiftAmountTy(EVT LHSTy, const DataLayout &DL,
399
                       bool LegalTypes = true) const;
400
 
401
  /// Return the preferred type to use for a shift opcode, given the shifted
402
  /// amount type is \p ShiftValueTy.
403
  LLVM_READONLY
404
  virtual LLT getPreferredShiftAmountTy(LLT ShiftValueTy) const {
405
    return ShiftValueTy;
406
  }
407
 
408
  /// Returns the type to be used for the index operand of:
409
  /// ISD::INSERT_VECTOR_ELT, ISD::EXTRACT_VECTOR_ELT,
410
  /// ISD::INSERT_SUBVECTOR, and ISD::EXTRACT_SUBVECTOR
411
  virtual MVT getVectorIdxTy(const DataLayout &DL) const {
412
    return getPointerTy(DL);
413
  }
414
 
415
  /// Returns the type to be used for the EVL/AVL operand of VP nodes:
416
  /// ISD::VP_ADD, ISD::VP_SUB, etc. It must be a legal scalar integer type,
417
  /// and must be at least as large as i32. The EVL is implicitly zero-extended
418
  /// to any larger type.
419
  virtual MVT getVPExplicitVectorLengthTy() const { return MVT::i32; }
420
 
421
  /// This callback is used to inspect load/store instructions and add
422
  /// target-specific MachineMemOperand flags to them.  The default
423
  /// implementation does nothing.
424
  virtual MachineMemOperand::Flags getTargetMMOFlags(const Instruction &I) const {
425
    return MachineMemOperand::MONone;
426
  }
427
 
428
  MachineMemOperand::Flags
429
  getLoadMemOperandFlags(const LoadInst &LI, const DataLayout &DL,
430
                         AssumptionCache *AC = nullptr,
431
                         const TargetLibraryInfo *LibInfo = nullptr) const;
432
  MachineMemOperand::Flags getStoreMemOperandFlags(const StoreInst &SI,
433
                                                   const DataLayout &DL) const;
434
  MachineMemOperand::Flags getAtomicMemOperandFlags(const Instruction &AI,
435
                                                    const DataLayout &DL) const;
436
 
437
  virtual bool isSelectSupported(SelectSupportKind /*kind*/) const {
438
    return true;
439
  }
440
 
441
  /// Return true if the @llvm.get.active.lane.mask intrinsic should be expanded
442
  /// using generic code in SelectionDAGBuilder.
443
  virtual bool shouldExpandGetActiveLaneMask(EVT VT, EVT OpVT) const {
444
    return true;
445
  }
446
 
447
  /// Return true if it is profitable to convert a select of FP constants into
448
  /// a constant pool load whose address depends on the select condition. The
449
  /// parameter may be used to differentiate a select with FP compare from
450
  /// integer compare.
451
  virtual bool reduceSelectOfFPConstantLoads(EVT CmpOpVT) const {
452
    return true;
453
  }
454
 
455
  /// Return true if multiple condition registers are available.
456
  bool hasMultipleConditionRegisters() const {
457
    return HasMultipleConditionRegisters;
458
  }
459
 
460
  /// Return true if the target has BitExtract instructions.
461
  bool hasExtractBitsInsn() const { return HasExtractBitsInsn; }
462
 
463
  /// Return the preferred vector type legalization action.
464
  virtual TargetLoweringBase::LegalizeTypeAction
465
  getPreferredVectorAction(MVT VT) const {
466
    // The default action for one element vectors is to scalarize
467
    if (VT.getVectorElementCount().isScalar())
468
      return TypeScalarizeVector;
469
    // The default action for an odd-width vector is to widen.
470
    if (!VT.isPow2VectorType())
471
      return TypeWidenVector;
472
    // The default action for other vectors is to promote
473
    return TypePromoteInteger;
474
  }
475
 
476
  // Return true if the half type should be passed around as i16, but promoted
477
  // to float around arithmetic. The default behavior is to pass around as
478
  // float and convert around loads/stores/bitcasts and other places where
479
  // the size matters.
480
  virtual bool softPromoteHalfType() const { return false; }
481
 
482
  // There are two general methods for expanding a BUILD_VECTOR node:
483
  //  1. Use SCALAR_TO_VECTOR on the defined scalar values and then shuffle
484
  //     them together.
485
  //  2. Build the vector on the stack and then load it.
486
  // If this function returns true, then method (1) will be used, subject to
487
  // the constraint that all of the necessary shuffles are legal (as determined
488
  // by isShuffleMaskLegal). If this function returns false, then method (2) is
489
  // always used. The vector type, and the number of defined values, are
490
  // provided.
491
  virtual bool
492
  shouldExpandBuildVectorWithShuffles(EVT /* VT */,
493
                                      unsigned DefinedValues) const {
494
    return DefinedValues < 3;
495
  }
496
 
497
  /// Return true if integer divide is usually cheaper than a sequence of
498
  /// several shifts, adds, and multiplies for this target.
499
  /// The definition of "cheaper" may depend on whether we're optimizing
500
  /// for speed or for size.
501
  virtual bool isIntDivCheap(EVT VT, AttributeList Attr) const { return false; }
502
 
503
  /// Return true if the target can handle a standalone remainder operation.
504
  virtual bool hasStandaloneRem(EVT VT) const {
505
    return true;
506
  }
507
 
508
  /// Return true if SQRT(X) shouldn't be replaced with X*RSQRT(X).
509
  virtual bool isFsqrtCheap(SDValue X, SelectionDAG &DAG) const {
510
    // Default behavior is to replace SQRT(X) with X*RSQRT(X).
511
    return false;
512
  }
513
 
514
  /// Reciprocal estimate status values used by the functions below.
515
  enum ReciprocalEstimate : int {
516
    Unspecified = -1,
517
    Disabled = 0,
518
    Enabled = 1
519
  };
520
 
521
  /// Return a ReciprocalEstimate enum value for a square root of the given type
522
  /// based on the function's attributes. If the operation is not overridden by
523
  /// the function's attributes, "Unspecified" is returned and target defaults
524
  /// are expected to be used for instruction selection.
525
  int getRecipEstimateSqrtEnabled(EVT VT, MachineFunction &MF) const;
526
 
527
  /// Return a ReciprocalEstimate enum value for a division of the given type
528
  /// based on the function's attributes. If the operation is not overridden by
529
  /// the function's attributes, "Unspecified" is returned and target defaults
530
  /// are expected to be used for instruction selection.
531
  int getRecipEstimateDivEnabled(EVT VT, MachineFunction &MF) const;
532
 
533
  /// Return the refinement step count for a square root of the given type based
534
  /// on the function's attributes. If the operation is not overridden by
535
  /// the function's attributes, "Unspecified" is returned and target defaults
536
  /// are expected to be used for instruction selection.
537
  int getSqrtRefinementSteps(EVT VT, MachineFunction &MF) const;
538
 
539
  /// Return the refinement step count for a division of the given type based
540
  /// on the function's attributes. If the operation is not overridden by
541
  /// the function's attributes, "Unspecified" is returned and target defaults
542
  /// are expected to be used for instruction selection.
543
  int getDivRefinementSteps(EVT VT, MachineFunction &MF) const;
544
 
545
  /// Returns true if target has indicated at least one type should be bypassed.
546
  bool isSlowDivBypassed() const { return !BypassSlowDivWidths.empty(); }
547
 
548
  /// Returns map of slow types for division or remainder with corresponding
549
  /// fast types
550
  const DenseMap<unsigned int, unsigned int> &getBypassSlowDivWidths() const {
551
    return BypassSlowDivWidths;
552
  }
553
 
554
  /// Return true only if vscale must be a power of two.
555
  virtual bool isVScaleKnownToBeAPowerOfTwo() const { return false; }
556
 
557
  /// Return true if Flow Control is an expensive operation that should be
558
  /// avoided.
559
  bool isJumpExpensive() const { return JumpIsExpensive; }
560
 
561
  /// Return true if selects are only cheaper than branches if the branch is
562
  /// unlikely to be predicted right.
563
  bool isPredictableSelectExpensive() const {
564
    return PredictableSelectIsExpensive;
565
  }
566
 
567
  virtual bool fallBackToDAGISel(const Instruction &Inst) const {
568
    return false;
569
  }
570
 
571
  /// Return true if the following transform is beneficial:
572
  /// fold (conv (load x)) -> (load (conv*)x)
573
  /// On architectures that don't natively support some vector loads
574
  /// efficiently, casting the load to a smaller vector of larger types and
575
  /// loading is more efficient, however, this can be undone by optimizations in
576
  /// dag combiner.
577
  virtual bool isLoadBitCastBeneficial(EVT LoadVT, EVT BitcastVT,
578
                                       const SelectionDAG &DAG,
579
                                       const MachineMemOperand &MMO) const;
580
 
581
  /// Return true if the following transform is beneficial:
582
  /// (store (y (conv x)), y*)) -> (store x, (x*))
583
  virtual bool isStoreBitCastBeneficial(EVT StoreVT, EVT BitcastVT,
584
                                        const SelectionDAG &DAG,
585
                                        const MachineMemOperand &MMO) const {
586
    // Default to the same logic as loads.
587
    return isLoadBitCastBeneficial(StoreVT, BitcastVT, DAG, MMO);
588
  }
589
 
590
  /// Return true if it is expected to be cheaper to do a store of a non-zero
591
  /// vector constant with the given size and type for the address space than to
592
  /// store the individual scalar element constants.
593
  virtual bool storeOfVectorConstantIsCheap(EVT MemVT,
594
                                            unsigned NumElem,
595
                                            unsigned AddrSpace) const {
596
    return false;
597
  }
598
 
599
  /// Allow store merging for the specified type after legalization in addition
600
  /// to before legalization. This may transform stores that do not exist
601
  /// earlier (for example, stores created from intrinsics).
602
  virtual bool mergeStoresAfterLegalization(EVT MemVT) const {
603
    return true;
604
  }
605
 
606
  /// Returns if it's reasonable to merge stores to MemVT size.
607
  virtual bool canMergeStoresTo(unsigned AS, EVT MemVT,
608
                                const MachineFunction &MF) const {
609
    return true;
610
  }
611
 
612
  /// Return true if it is cheap to speculate a call to intrinsic cttz.
613
  virtual bool isCheapToSpeculateCttz(Type *Ty) const {
614
    return false;
615
  }
616
 
617
  /// Return true if it is cheap to speculate a call to intrinsic ctlz.
618
  virtual bool isCheapToSpeculateCtlz(Type *Ty) const {
619
    return false;
620
  }
621
 
622
  /// Return true if ctlz instruction is fast.
623
  virtual bool isCtlzFast() const {
624
    return false;
625
  }
626
 
627
  /// Return the maximum number of "x & (x - 1)" operations that can be done
628
  /// instead of deferring to a custom CTPOP.
629
  virtual unsigned getCustomCtpopCost(EVT VT, ISD::CondCode Cond) const {
630
    return 1;
631
  }
632
 
633
  /// Return true if instruction generated for equality comparison is folded
634
  /// with instruction generated for signed comparison.
635
  virtual bool isEqualityCmpFoldedWithSignedCmp() const { return true; }
636
 
637
  /// Return true if the heuristic to prefer icmp eq zero should be used in code
638
  /// gen prepare.
639
  virtual bool preferZeroCompareBranch() const { return false; }
640
 
641
  /// Return true if it is safe to transform an integer-domain bitwise operation
642
  /// into the equivalent floating-point operation. This should be set to true
643
  /// if the target has IEEE-754-compliant fabs/fneg operations for the input
644
  /// type.
645
  virtual bool hasBitPreservingFPLogic(EVT VT) const {
646
    return false;
647
  }
648
 
649
  /// Return true if it is cheaper to split the store of a merged int val
650
  /// from a pair of smaller values into multiple stores.
651
  virtual bool isMultiStoresCheaperThanBitsMerge(EVT LTy, EVT HTy) const {
652
    return false;
653
  }
654
 
655
  /// Return if the target supports combining a
656
  /// chain like:
657
  /// \code
658
  ///   %andResult = and %val1, #mask
659
  ///   %icmpResult = icmp %andResult, 0
660
  /// \endcode
661
  /// into a single machine instruction of a form like:
662
  /// \code
663
  ///   cc = test %register, #mask
664
  /// \endcode
665
  virtual bool isMaskAndCmp0FoldingBeneficial(const Instruction &AndI) const {
666
    return false;
667
  }
668
 
669
  /// Use bitwise logic to make pairs of compares more efficient. For example:
670
  /// and (seteq A, B), (seteq C, D) --> seteq (or (xor A, B), (xor C, D)), 0
671
  /// This should be true when it takes more than one instruction to lower
672
  /// setcc (cmp+set on x86 scalar), when bitwise ops are faster than logic on
673
  /// condition bits (crand on PowerPC), and/or when reducing cmp+br is a win.
674
  virtual bool convertSetCCLogicToBitwiseLogic(EVT VT) const {
675
    return false;
676
  }
677
 
678
  /// Return the preferred operand type if the target has a quick way to compare
679
  /// integer values of the given size. Assume that any legal integer type can
680
  /// be compared efficiently. Targets may override this to allow illegal wide
681
  /// types to return a vector type if there is support to compare that type.
682
  virtual MVT hasFastEqualityCompare(unsigned NumBits) const {
683
    MVT VT = MVT::getIntegerVT(NumBits);
684
    return isTypeLegal(VT) ? VT : MVT::INVALID_SIMPLE_VALUE_TYPE;
685
  }
686
 
687
  /// Return true if the target should transform:
688
  /// (X & Y) == Y ---> (~X & Y) == 0
689
  /// (X & Y) != Y ---> (~X & Y) != 0
690
  ///
691
  /// This may be profitable if the target has a bitwise and-not operation that
692
  /// sets comparison flags. A target may want to limit the transformation based
693
  /// on the type of Y or if Y is a constant.
694
  ///
695
  /// Note that the transform will not occur if Y is known to be a power-of-2
696
  /// because a mask and compare of a single bit can be handled by inverting the
697
  /// predicate, for example:
698
  /// (X & 8) == 8 ---> (X & 8) != 0
699
  virtual bool hasAndNotCompare(SDValue Y) const {
700
    return false;
701
  }
702
 
703
  /// Return true if the target has a bitwise and-not operation:
704
  /// X = ~A & B
705
  /// This can be used to simplify select or other instructions.
706
  virtual bool hasAndNot(SDValue X) const {
707
    // If the target has the more complex version of this operation, assume that
708
    // it has this operation too.
709
    return hasAndNotCompare(X);
710
  }
711
 
712
  /// Return true if the target has a bit-test instruction:
713
  ///   (X & (1 << Y)) ==/!= 0
714
  /// This knowledge can be used to prevent breaking the pattern,
715
  /// or creating it if it could be recognized.
716
  virtual bool hasBitTest(SDValue X, SDValue Y) const { return false; }
717
 
718
  /// There are two ways to clear extreme bits (either low or high):
719
  /// Mask:    x &  (-1 << y)  (the instcombine canonical form)
720
  /// Shifts:  x >> y << y
721
  /// Return true if the variant with 2 variable shifts is preferred.
722
  /// Return false if there is no preference.
723
  virtual bool shouldFoldMaskToVariableShiftPair(SDValue X) const {
724
    // By default, let's assume that no one prefers shifts.
725
    return false;
726
  }
727
 
728
  /// Return true if it is profitable to fold a pair of shifts into a mask.
729
  /// This is usually true on most targets. But some targets, like Thumb1,
730
  /// have immediate shift instructions, but no immediate "and" instruction;
731
  /// this makes the fold unprofitable.
732
  virtual bool shouldFoldConstantShiftPairToMask(const SDNode *N,
733
                                                 CombineLevel Level) const {
734
    return true;
735
  }
736
 
737
  /// Should we tranform the IR-optimal check for whether given truncation
738
  /// down into KeptBits would be truncating or not:
739
  ///   (add %x, (1 << (KeptBits-1))) srccond (1 << KeptBits)
740
  /// Into it's more traditional form:
741
  ///   ((%x << C) a>> C) dstcond %x
742
  /// Return true if we should transform.
743
  /// Return false if there is no preference.
744
  virtual bool shouldTransformSignedTruncationCheck(EVT XVT,
745
                                                    unsigned KeptBits) const {
746
    // By default, let's assume that no one prefers shifts.
747
    return false;
748
  }
749
 
750
  /// Given the pattern
751
  ///   (X & (C l>>/<< Y)) ==/!= 0
752
  /// return true if it should be transformed into:
753
  ///   ((X <</l>> Y) & C) ==/!= 0
754
  /// WARNING: if 'X' is a constant, the fold may deadlock!
755
  /// FIXME: we could avoid passing XC, but we can't use isConstOrConstSplat()
756
  ///        here because it can end up being not linked in.
757
  virtual bool shouldProduceAndByConstByHoistingConstFromShiftsLHSOfAnd(
758
      SDValue X, ConstantSDNode *XC, ConstantSDNode *CC, SDValue Y,
759
      unsigned OldShiftOpcode, unsigned NewShiftOpcode,
760
      SelectionDAG &DAG) const {
761
    if (hasBitTest(X, Y)) {
762
      // One interesting pattern that we'd want to form is 'bit test':
763
      //   ((1 << Y) & C) ==/!= 0
764
      // But we also need to be careful not to try to reverse that fold.
765
 
766
      // Is this '1 << Y' ?
767
      if (OldShiftOpcode == ISD::SHL && CC->isOne())
768
        return false; // Keep the 'bit test' pattern.
769
 
770
      // Will it be '1 << Y' after the transform ?
771
      if (XC && NewShiftOpcode == ISD::SHL && XC->isOne())
772
        return true; // Do form the 'bit test' pattern.
773
    }
774
 
775
    // If 'X' is a constant, and we transform, then we will immediately
776
    // try to undo the fold, thus causing endless combine loop.
777
    // So by default, let's assume everyone prefers the fold
778
    // iff 'X' is not a constant.
779
    return !XC;
780
  }
781
 
782
  /// These two forms are equivalent:
783
  ///   sub %y, (xor %x, -1)
784
  ///   add (add %x, 1), %y
785
  /// The variant with two add's is IR-canonical.
786
  /// Some targets may prefer one to the other.
787
  virtual bool preferIncOfAddToSubOfNot(EVT VT) const {
788
    // By default, let's assume that everyone prefers the form with two add's.
789
    return true;
790
  }
791
 
792
  // Return true if the target wants to transform Op(Splat(X)) -> Splat(Op(X))
793
  virtual bool preferScalarizeSplat(unsigned Opc) const { return true; }
794
 
795
  /// Return true if the target wants to use the optimization that
796
  /// turns ext(promotableInst1(...(promotableInstN(load)))) into
797
  /// promotedInst1(...(promotedInstN(ext(load)))).
798
  bool enableExtLdPromotion() const { return EnableExtLdPromotion; }
799
 
800
  /// Return true if the target can combine store(extractelement VectorTy,
801
  /// Idx).
802
  /// \p Cost[out] gives the cost of that transformation when this is true.
803
  virtual bool canCombineStoreAndExtract(Type *VectorTy, Value *Idx,
804
                                         unsigned &Cost) const {
805
    return false;
806
  }
807
 
808
  /// Return true if inserting a scalar into a variable element of an undef
809
  /// vector is more efficiently handled by splatting the scalar instead.
810
  virtual bool shouldSplatInsEltVarIndex(EVT) const {
811
    return false;
812
  }
813
 
814
  /// Return true if target always benefits from combining into FMA for a
815
  /// given value type. This must typically return false on targets where FMA
816
  /// takes more cycles to execute than FADD.
817
  virtual bool enableAggressiveFMAFusion(EVT VT) const { return false; }
818
 
819
  /// Return true if target always benefits from combining into FMA for a
820
  /// given value type. This must typically return false on targets where FMA
821
  /// takes more cycles to execute than FADD.
822
  virtual bool enableAggressiveFMAFusion(LLT Ty) const { return false; }
823
 
824
  /// Return the ValueType of the result of SETCC operations.
825
  virtual EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context,
826
                                 EVT VT) const;
827
 
828
  /// Return the ValueType for comparison libcalls. Comparison libcalls include
829
  /// floating point comparison calls, and Ordered/Unordered check calls on
830
  /// floating point numbers.
831
  virtual
832
  MVT::SimpleValueType getCmpLibcallReturnType() const;
833
 
834
  /// For targets without i1 registers, this gives the nature of the high-bits
835
  /// of boolean values held in types wider than i1.
836
  ///
837
  /// "Boolean values" are special true/false values produced by nodes like
838
  /// SETCC and consumed (as the condition) by nodes like SELECT and BRCOND.
839
  /// Not to be confused with general values promoted from i1.  Some cpus
840
  /// distinguish between vectors of boolean and scalars; the isVec parameter
841
  /// selects between the two kinds.  For example on X86 a scalar boolean should
842
  /// be zero extended from i1, while the elements of a vector of booleans
843
  /// should be sign extended from i1.
844
  ///
845
  /// Some cpus also treat floating point types the same way as they treat
846
  /// vectors instead of the way they treat scalars.
847
  BooleanContent getBooleanContents(bool isVec, bool isFloat) const {
848
    if (isVec)
849
      return BooleanVectorContents;
850
    return isFloat ? BooleanFloatContents : BooleanContents;
851
  }
852
 
853
  BooleanContent getBooleanContents(EVT Type) const {
854
    return getBooleanContents(Type.isVector(), Type.isFloatingPoint());
855
  }
856
 
857
  /// Promote the given target boolean to a target boolean of the given type.
858
  /// A target boolean is an integer value, not necessarily of type i1, the bits
859
  /// of which conform to getBooleanContents.
860
  ///
861
  /// ValVT is the type of values that produced the boolean.
862
  SDValue promoteTargetBoolean(SelectionDAG &DAG, SDValue Bool,
863
                               EVT ValVT) const {
864
    SDLoc dl(Bool);
865
    EVT BoolVT =
866
        getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), ValVT);
867
    ISD::NodeType ExtendCode = getExtendForContent(getBooleanContents(ValVT));
868
    return DAG.getNode(ExtendCode, dl, BoolVT, Bool);
869
  }
870
 
871
  /// Return target scheduling preference.
872
  Sched::Preference getSchedulingPreference() const {
873
    return SchedPreferenceInfo;
874
  }
875
 
876
  /// Some scheduler, e.g. hybrid, can switch to different scheduling heuristics
877
  /// for different nodes. This function returns the preference (or none) for
878
  /// the given node.
879
  virtual Sched::Preference getSchedulingPreference(SDNode *) const {
880
    return Sched::None;
881
  }
882
 
883
  /// Return the register class that should be used for the specified value
884
  /// type.
885
  virtual const TargetRegisterClass *getRegClassFor(MVT VT, bool isDivergent = false) const {
886
    (void)isDivergent;
887
    const TargetRegisterClass *RC = RegClassForVT[VT.SimpleTy];
888
    assert(RC && "This value type is not natively supported!");
889
    return RC;
890
  }
891
 
892
  /// Allows target to decide about the register class of the
893
  /// specific value that is live outside the defining block.
894
  /// Returns true if the value needs uniform register class.
895
  virtual bool requiresUniformRegister(MachineFunction &MF,
896
                                       const Value *) const {
897
    return false;
898
  }
899
 
900
  /// Return the 'representative' register class for the specified value
901
  /// type.
902
  ///
903
  /// The 'representative' register class is the largest legal super-reg
904
  /// register class for the register class of the value type.  For example, on
905
  /// i386 the rep register class for i8, i16, and i32 are GR32; while the rep
906
  /// register class is GR64 on x86_64.
907
  virtual const TargetRegisterClass *getRepRegClassFor(MVT VT) const {
908
    const TargetRegisterClass *RC = RepRegClassForVT[VT.SimpleTy];
909
    return RC;
910
  }
911
 
912
  /// Return the cost of the 'representative' register class for the specified
913
  /// value type.
914
  virtual uint8_t getRepRegClassCostFor(MVT VT) const {
915
    return RepRegClassCostForVT[VT.SimpleTy];
916
  }
917
 
918
  /// Return the preferred strategy to legalize tihs SHIFT instruction, with
919
  /// \p ExpansionFactor being the recursion depth - how many expansion needed.
920
  enum class ShiftLegalizationStrategy {
921
    ExpandToParts,
922
    ExpandThroughStack,
923
    LowerToLibcall
924
  };
925
  virtual ShiftLegalizationStrategy
926
  preferredShiftLegalizationStrategy(SelectionDAG &DAG, SDNode *N,
927
                                     unsigned ExpansionFactor) const {
928
    if (ExpansionFactor == 1)
929
      return ShiftLegalizationStrategy::ExpandToParts;
930
    return ShiftLegalizationStrategy::ExpandThroughStack;
931
  }
932
 
933
  /// Return true if the target has native support for the specified value type.
934
  /// This means that it has a register that directly holds it without
935
  /// promotions or expansions.
936
  bool isTypeLegal(EVT VT) const {
937
    assert(!VT.isSimple() ||
938
           (unsigned)VT.getSimpleVT().SimpleTy < std::size(RegClassForVT));
939
    return VT.isSimple() && RegClassForVT[VT.getSimpleVT().SimpleTy] != nullptr;
940
  }
941
 
942
  class ValueTypeActionImpl {
943
    /// ValueTypeActions - For each value type, keep a LegalizeTypeAction enum
944
    /// that indicates how instruction selection should deal with the type.
945
    LegalizeTypeAction ValueTypeActions[MVT::VALUETYPE_SIZE];
946
 
947
  public:
948
    ValueTypeActionImpl() {
949
      std::fill(std::begin(ValueTypeActions), std::end(ValueTypeActions),
950
                TypeLegal);
951
    }
952
 
953
    LegalizeTypeAction getTypeAction(MVT VT) const {
954
      return ValueTypeActions[VT.SimpleTy];
955
    }
956
 
957
    void setTypeAction(MVT VT, LegalizeTypeAction Action) {
958
      ValueTypeActions[VT.SimpleTy] = Action;
959
    }
960
  };
961
 
962
  const ValueTypeActionImpl &getValueTypeActions() const {
963
    return ValueTypeActions;
964
  }
965
 
966
  /// Return pair that represents the legalization kind (first) that needs to
967
  /// happen to EVT (second) in order to type-legalize it.
968
  ///
969
  /// First: how we should legalize values of this type, either it is already
970
  /// legal (return 'Legal') or we need to promote it to a larger type (return
971
  /// 'Promote'), or we need to expand it into multiple registers of smaller
972
  /// integer type (return 'Expand').  'Custom' is not an option.
973
  ///
974
  /// Second: for types supported by the target, this is an identity function.
975
  /// For types that must be promoted to larger types, this returns the larger
976
  /// type to promote to.  For integer types that are larger than the largest
977
  /// integer register, this contains one step in the expansion to get to the
978
  /// smaller register. For illegal floating point types, this returns the
979
  /// integer type to transform to.
980
  LegalizeKind getTypeConversion(LLVMContext &Context, EVT VT) const;
981
 
982
  /// Return how we should legalize values of this type, either it is already
983
  /// legal (return 'Legal') or we need to promote it to a larger type (return
984
  /// 'Promote'), or we need to expand it into multiple registers of smaller
985
  /// integer type (return 'Expand').  'Custom' is not an option.
986
  LegalizeTypeAction getTypeAction(LLVMContext &Context, EVT VT) const {
987
    return getTypeConversion(Context, VT).first;
988
  }
989
  LegalizeTypeAction getTypeAction(MVT VT) const {
990
    return ValueTypeActions.getTypeAction(VT);
991
  }
992
 
993
  /// For types supported by the target, this is an identity function.  For
994
  /// types that must be promoted to larger types, this returns the larger type
995
  /// to promote to.  For integer types that are larger than the largest integer
996
  /// register, this contains one step in the expansion to get to the smaller
997
  /// register. For illegal floating point types, this returns the integer type
998
  /// to transform to.
999
  virtual EVT getTypeToTransformTo(LLVMContext &Context, EVT VT) const {
1000
    return getTypeConversion(Context, VT).second;
1001
  }
1002
 
1003
  /// For types supported by the target, this is an identity function.  For
1004
  /// types that must be expanded (i.e. integer types that are larger than the
1005
  /// largest integer register or illegal floating point types), this returns
1006
  /// the largest legal type it will be expanded to.
1007
  EVT getTypeToExpandTo(LLVMContext &Context, EVT VT) const {
1008
    assert(!VT.isVector());
1009
    while (true) {
1010
      switch (getTypeAction(Context, VT)) {
1011
      case TypeLegal:
1012
        return VT;
1013
      case TypeExpandInteger:
1014
        VT = getTypeToTransformTo(Context, VT);
1015
        break;
1016
      default:
1017
        llvm_unreachable("Type is not legal nor is it to be expanded!");
1018
      }
1019
    }
1020
  }
1021
 
1022
  /// Vector types are broken down into some number of legal first class types.
1023
  /// For example, EVT::v8f32 maps to 2 EVT::v4f32 with Altivec or SSE1, or 8
1024
  /// promoted EVT::f64 values with the X86 FP stack.  Similarly, EVT::v2i64
1025
  /// turns into 4 EVT::i32 values with both PPC and X86.
1026
  ///
1027
  /// This method returns the number of registers needed, and the VT for each
1028
  /// register.  It also returns the VT and quantity of the intermediate values
1029
  /// before they are promoted/expanded.
1030
  unsigned getVectorTypeBreakdown(LLVMContext &Context, EVT VT,
1031
                                  EVT &IntermediateVT,
1032
                                  unsigned &NumIntermediates,
1033
                                  MVT &RegisterVT) const;
1034
 
1035
  /// Certain targets such as MIPS require that some types such as vectors are
1036
  /// always broken down into scalars in some contexts. This occurs even if the
1037
  /// vector type is legal.
1038
  virtual unsigned getVectorTypeBreakdownForCallingConv(
1039
      LLVMContext &Context, CallingConv::ID CC, EVT VT, EVT &IntermediateVT,
1040
      unsigned &NumIntermediates, MVT &RegisterVT) const {
1041
    return getVectorTypeBreakdown(Context, VT, IntermediateVT, NumIntermediates,
1042
                                  RegisterVT);
1043
  }
1044
 
1045
  struct IntrinsicInfo {
1046
    unsigned     opc = 0;          // target opcode
1047
    EVT          memVT;            // memory VT
1048
 
1049
    // value representing memory location
1050
    PointerUnion<const Value *, const PseudoSourceValue *> ptrVal;
1051
 
1052
    // Fallback address space for use if ptrVal is nullptr. std::nullopt means
1053
    // unknown address space.
1054
    std::optional<unsigned> fallbackAddressSpace;
1055
 
1056
    int          offset = 0;       // offset off of ptrVal
1057
    uint64_t     size = 0;         // the size of the memory location
1058
                                   // (taken from memVT if zero)
1059
    MaybeAlign align = Align(1);   // alignment
1060
 
1061
    MachineMemOperand::Flags flags = MachineMemOperand::MONone;
1062
    IntrinsicInfo() = default;
1063
  };
1064
 
1065
  /// Given an intrinsic, checks if on the target the intrinsic will need to map
1066
  /// to a MemIntrinsicNode (touches memory). If this is the case, it returns
1067
  /// true and store the intrinsic information into the IntrinsicInfo that was
1068
  /// passed to the function.
1069
  virtual bool getTgtMemIntrinsic(IntrinsicInfo &, const CallInst &,
1070
                                  MachineFunction &,
1071
                                  unsigned /*Intrinsic*/) const {
1072
    return false;
1073
  }
1074
 
1075
  /// Returns true if the target can instruction select the specified FP
1076
  /// immediate natively. If false, the legalizer will materialize the FP
1077
  /// immediate as a load from a constant pool.
1078
  virtual bool isFPImmLegal(const APFloat & /*Imm*/, EVT /*VT*/,
1079
                            bool ForCodeSize = false) const {
1080
    return false;
1081
  }
1082
 
1083
  /// Targets can use this to indicate that they only support *some*
1084
  /// VECTOR_SHUFFLE operations, those with specific masks.  By default, if a
1085
  /// target supports the VECTOR_SHUFFLE node, all mask values are assumed to be
1086
  /// legal.
1087
  virtual bool isShuffleMaskLegal(ArrayRef<int> /*Mask*/, EVT /*VT*/) const {
1088
    return true;
1089
  }
1090
 
1091
  /// Returns true if the operation can trap for the value type.
1092
  ///
1093
  /// VT must be a legal type. By default, we optimistically assume most
1094
  /// operations don't trap except for integer divide and remainder.
1095
  virtual bool canOpTrap(unsigned Op, EVT VT) const;
1096
 
1097
  /// Similar to isShuffleMaskLegal. Targets can use this to indicate if there
1098
  /// is a suitable VECTOR_SHUFFLE that can be used to replace a VAND with a
1099
  /// constant pool entry.
1100
  virtual bool isVectorClearMaskLegal(ArrayRef<int> /*Mask*/,
1101
                                      EVT /*VT*/) const {
1102
    return false;
1103
  }
1104
 
1105
  /// How to legalize this custom operation?
1106
  virtual LegalizeAction getCustomOperationAction(SDNode &Op) const {
1107
    return Legal;
1108
  }
1109
 
1110
  /// Return how this operation should be treated: either it is legal, needs to
1111
  /// be promoted to a larger size, needs to be expanded to some other code
1112
  /// sequence, or the target has a custom expander for it.
1113
  LegalizeAction getOperationAction(unsigned Op, EVT VT) const {
1114
    if (VT.isExtended()) return Expand;
1115
    // If a target-specific SDNode requires legalization, require the target
1116
    // to provide custom legalization for it.
1117
    if (Op >= std::size(OpActions[0]))
1118
      return Custom;
1119
    return OpActions[(unsigned)VT.getSimpleVT().SimpleTy][Op];
1120
  }
1121
 
1122
  /// Custom method defined by each target to indicate if an operation which
1123
  /// may require a scale is supported natively by the target.
1124
  /// If not, the operation is illegal.
1125
  virtual bool isSupportedFixedPointOperation(unsigned Op, EVT VT,
1126
                                              unsigned Scale) const {
1127
    return false;
1128
  }
1129
 
1130
  /// Some fixed point operations may be natively supported by the target but
1131
  /// only for specific scales. This method allows for checking
1132
  /// if the width is supported by the target for a given operation that may
1133
  /// depend on scale.
1134
  LegalizeAction getFixedPointOperationAction(unsigned Op, EVT VT,
1135
                                              unsigned Scale) const {
1136
    auto Action = getOperationAction(Op, VT);
1137
    if (Action != Legal)
1138
      return Action;
1139
 
1140
    // This operation is supported in this type but may only work on specific
1141
    // scales.
1142
    bool Supported;
1143
    switch (Op) {
1144
    default:
1145
      llvm_unreachable("Unexpected fixed point operation.");
1146
    case ISD::SMULFIX:
1147
    case ISD::SMULFIXSAT:
1148
    case ISD::UMULFIX:
1149
    case ISD::UMULFIXSAT:
1150
    case ISD::SDIVFIX:
1151
    case ISD::SDIVFIXSAT:
1152
    case ISD::UDIVFIX:
1153
    case ISD::UDIVFIXSAT:
1154
      Supported = isSupportedFixedPointOperation(Op, VT, Scale);
1155
      break;
1156
    }
1157
 
1158
    return Supported ? Action : Expand;
1159
  }
1160
 
1161
  // If Op is a strict floating-point operation, return the result
1162
  // of getOperationAction for the equivalent non-strict operation.
1163
  LegalizeAction getStrictFPOperationAction(unsigned Op, EVT VT) const {
1164
    unsigned EqOpc;
1165
    switch (Op) {
1166
      default: llvm_unreachable("Unexpected FP pseudo-opcode");
1167
#define DAG_INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC, DAGN)               \
1168
      case ISD::STRICT_##DAGN: EqOpc = ISD::DAGN; break;
1169
#define CMP_INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC, DAGN)               \
1170
      case ISD::STRICT_##DAGN: EqOpc = ISD::SETCC; break;
1171
#include "llvm/IR/ConstrainedOps.def"
1172
    }
1173
 
1174
    return getOperationAction(EqOpc, VT);
1175
  }
1176
 
1177
  /// Return true if the specified operation is legal on this target or can be
1178
  /// made legal with custom lowering. This is used to help guide high-level
1179
  /// lowering decisions. LegalOnly is an optional convenience for code paths
1180
  /// traversed pre and post legalisation.
1181
  bool isOperationLegalOrCustom(unsigned Op, EVT VT,
1182
                                bool LegalOnly = false) const {
1183
    if (LegalOnly)
1184
      return isOperationLegal(Op, VT);
1185
 
1186
    return (VT == MVT::Other || isTypeLegal(VT)) &&
1187
      (getOperationAction(Op, VT) == Legal ||
1188
       getOperationAction(Op, VT) == Custom);
1189
  }
1190
 
1191
  /// Return true if the specified operation is legal on this target or can be
1192
  /// made legal using promotion. This is used to help guide high-level lowering
1193
  /// decisions. LegalOnly is an optional convenience for code paths traversed
1194
  /// pre and post legalisation.
1195
  bool isOperationLegalOrPromote(unsigned Op, EVT VT,
1196
                                 bool LegalOnly = false) const {
1197
    if (LegalOnly)
1198
      return isOperationLegal(Op, VT);
1199
 
1200
    return (VT == MVT::Other || isTypeLegal(VT)) &&
1201
      (getOperationAction(Op, VT) == Legal ||
1202
       getOperationAction(Op, VT) == Promote);
1203
  }
1204
 
1205
  /// Return true if the specified operation is legal on this target or can be
1206
  /// made legal with custom lowering or using promotion. This is used to help
1207
  /// guide high-level lowering decisions. LegalOnly is an optional convenience
1208
  /// for code paths traversed pre and post legalisation.
1209
  bool isOperationLegalOrCustomOrPromote(unsigned Op, EVT VT,
1210
                                         bool LegalOnly = false) const {
1211
    if (LegalOnly)
1212
      return isOperationLegal(Op, VT);
1213
 
1214
    return (VT == MVT::Other || isTypeLegal(VT)) &&
1215
      (getOperationAction(Op, VT) == Legal ||
1216
       getOperationAction(Op, VT) == Custom ||
1217
       getOperationAction(Op, VT) == Promote);
1218
  }
1219
 
1220
  /// Return true if the operation uses custom lowering, regardless of whether
1221
  /// the type is legal or not.
1222
  bool isOperationCustom(unsigned Op, EVT VT) const {
1223
    return getOperationAction(Op, VT) == Custom;
1224
  }
1225
 
1226
  /// Return true if lowering to a jump table is allowed.
1227
  virtual bool areJTsAllowed(const Function *Fn) const {
1228
    if (Fn->getFnAttribute("no-jump-tables").getValueAsBool())
1229
      return false;
1230
 
1231
    return isOperationLegalOrCustom(ISD::BR_JT, MVT::Other) ||
1232
           isOperationLegalOrCustom(ISD::BRIND, MVT::Other);
1233
  }
1234
 
1235
  /// Check whether the range [Low,High] fits in a machine word.
1236
  bool rangeFitsInWord(const APInt &Low, const APInt &High,
1237
                       const DataLayout &DL) const {
1238
    // FIXME: Using the pointer type doesn't seem ideal.
1239
    uint64_t BW = DL.getIndexSizeInBits(0u);
1240
    uint64_t Range = (High - Low).getLimitedValue(UINT64_MAX - 1) + 1;
1241
    return Range <= BW;
1242
  }
1243
 
1244
  /// Return true if lowering to a jump table is suitable for a set of case
1245
  /// clusters which may contain \p NumCases cases, \p Range range of values.
1246
  virtual bool isSuitableForJumpTable(const SwitchInst *SI, uint64_t NumCases,
1247
                                      uint64_t Range, ProfileSummaryInfo *PSI,
1248
                                      BlockFrequencyInfo *BFI) const;
1249
 
1250
  /// Returns preferred type for switch condition.
1251
  virtual MVT getPreferredSwitchConditionType(LLVMContext &Context,
1252
                                              EVT ConditionVT) const;
1253
 
1254
  /// Return true if lowering to a bit test is suitable for a set of case
1255
  /// clusters which contains \p NumDests unique destinations, \p Low and
1256
  /// \p High as its lowest and highest case values, and expects \p NumCmps
1257
  /// case value comparisons. Check if the number of destinations, comparison
1258
  /// metric, and range are all suitable.
1259
  bool isSuitableForBitTests(unsigned NumDests, unsigned NumCmps,
1260
                             const APInt &Low, const APInt &High,
1261
                             const DataLayout &DL) const {
1262
    // FIXME: I don't think NumCmps is the correct metric: a single case and a
1263
    // range of cases both require only one branch to lower. Just looking at the
1264
    // number of clusters and destinations should be enough to decide whether to
1265
    // build bit tests.
1266
 
1267
    // To lower a range with bit tests, the range must fit the bitwidth of a
1268
    // machine word.
1269
    if (!rangeFitsInWord(Low, High, DL))
1270
      return false;
1271
 
1272
    // Decide whether it's profitable to lower this range with bit tests. Each
1273
    // destination requires a bit test and branch, and there is an overall range
1274
    // check branch. For a small number of clusters, separate comparisons might
1275
    // be cheaper, and for many destinations, splitting the range might be
1276
    // better.
1277
    return (NumDests == 1 && NumCmps >= 3) || (NumDests == 2 && NumCmps >= 5) ||
1278
           (NumDests == 3 && NumCmps >= 6);
1279
  }
1280
 
1281
  /// Return true if the specified operation is illegal on this target or
1282
  /// unlikely to be made legal with custom lowering. This is used to help guide
1283
  /// high-level lowering decisions.
1284
  bool isOperationExpand(unsigned Op, EVT VT) const {
1285
    return (!isTypeLegal(VT) || getOperationAction(Op, VT) == Expand);
1286
  }
1287
 
1288
  /// Return true if the specified operation is legal on this target.
1289
  bool isOperationLegal(unsigned Op, EVT VT) const {
1290
    return (VT == MVT::Other || isTypeLegal(VT)) &&
1291
           getOperationAction(Op, VT) == Legal;
1292
  }
1293
 
1294
  /// Return how this load with extension should be treated: either it is legal,
1295
  /// needs to be promoted to a larger size, needs to be expanded to some other
1296
  /// code sequence, or the target has a custom expander for it.
1297
  LegalizeAction getLoadExtAction(unsigned ExtType, EVT ValVT,
1298
                                  EVT MemVT) const {
1299
    if (ValVT.isExtended() || MemVT.isExtended()) return Expand;
1300
    unsigned ValI = (unsigned) ValVT.getSimpleVT().SimpleTy;
1301
    unsigned MemI = (unsigned) MemVT.getSimpleVT().SimpleTy;
1302
    assert(ExtType < ISD::LAST_LOADEXT_TYPE && ValI < MVT::VALUETYPE_SIZE &&
1303
           MemI < MVT::VALUETYPE_SIZE && "Table isn't big enough!");
1304
    unsigned Shift = 4 * ExtType;
1305
    return (LegalizeAction)((LoadExtActions[ValI][MemI] >> Shift) & 0xf);
1306
  }
1307
 
1308
  /// Return true if the specified load with extension is legal on this target.
1309
  bool isLoadExtLegal(unsigned ExtType, EVT ValVT, EVT MemVT) const {
1310
    return getLoadExtAction(ExtType, ValVT, MemVT) == Legal;
1311
  }
1312
 
1313
  /// Return true if the specified load with extension is legal or custom
1314
  /// on this target.
1315
  bool isLoadExtLegalOrCustom(unsigned ExtType, EVT ValVT, EVT MemVT) const {
1316
    return getLoadExtAction(ExtType, ValVT, MemVT) == Legal ||
1317
           getLoadExtAction(ExtType, ValVT, MemVT) == Custom;
1318
  }
1319
 
1320
  /// Return how this store with truncation should be treated: either it is
1321
  /// legal, needs to be promoted to a larger size, needs to be expanded to some
1322
  /// other code sequence, or the target has a custom expander for it.
1323
  LegalizeAction getTruncStoreAction(EVT ValVT, EVT MemVT) const {
1324
    if (ValVT.isExtended() || MemVT.isExtended()) return Expand;
1325
    unsigned ValI = (unsigned) ValVT.getSimpleVT().SimpleTy;
1326
    unsigned MemI = (unsigned) MemVT.getSimpleVT().SimpleTy;
1327
    assert(ValI < MVT::VALUETYPE_SIZE && MemI < MVT::VALUETYPE_SIZE &&
1328
           "Table isn't big enough!");
1329
    return TruncStoreActions[ValI][MemI];
1330
  }
1331
 
1332
  /// Return true if the specified store with truncation is legal on this
1333
  /// target.
1334
  bool isTruncStoreLegal(EVT ValVT, EVT MemVT) const {
1335
    return isTypeLegal(ValVT) && getTruncStoreAction(ValVT, MemVT) == Legal;
1336
  }
1337
 
1338
  /// Return true if the specified store with truncation has solution on this
1339
  /// target.
1340
  bool isTruncStoreLegalOrCustom(EVT ValVT, EVT MemVT) const {
1341
    return isTypeLegal(ValVT) &&
1342
      (getTruncStoreAction(ValVT, MemVT) == Legal ||
1343
       getTruncStoreAction(ValVT, MemVT) == Custom);
1344
  }
1345
 
1346
  virtual bool canCombineTruncStore(EVT ValVT, EVT MemVT,
1347
                                    bool LegalOnly) const {
1348
    if (LegalOnly)
1349
      return isTruncStoreLegal(ValVT, MemVT);
1350
 
1351
    return isTruncStoreLegalOrCustom(ValVT, MemVT);
1352
  }
1353
 
1354
  /// Return how the indexed load should be treated: either it is legal, needs
1355
  /// to be promoted to a larger size, needs to be expanded to some other code
1356
  /// sequence, or the target has a custom expander for it.
1357
  LegalizeAction getIndexedLoadAction(unsigned IdxMode, MVT VT) const {
1358
    return getIndexedModeAction(IdxMode, VT, IMAB_Load);
1359
  }
1360
 
1361
  /// Return true if the specified indexed load is legal on this target.
1362
  bool isIndexedLoadLegal(unsigned IdxMode, EVT VT) const {
1363
    return VT.isSimple() &&
1364
      (getIndexedLoadAction(IdxMode, VT.getSimpleVT()) == Legal ||
1365
       getIndexedLoadAction(IdxMode, VT.getSimpleVT()) == Custom);
1366
  }
1367
 
1368
  /// Return how the indexed store should be treated: either it is legal, needs
1369
  /// to be promoted to a larger size, needs to be expanded to some other code
1370
  /// sequence, or the target has a custom expander for it.
1371
  LegalizeAction getIndexedStoreAction(unsigned IdxMode, MVT VT) const {
1372
    return getIndexedModeAction(IdxMode, VT, IMAB_Store);
1373
  }
1374
 
1375
  /// Return true if the specified indexed load is legal on this target.
1376
  bool isIndexedStoreLegal(unsigned IdxMode, EVT VT) const {
1377
    return VT.isSimple() &&
1378
      (getIndexedStoreAction(IdxMode, VT.getSimpleVT()) == Legal ||
1379
       getIndexedStoreAction(IdxMode, VT.getSimpleVT()) == Custom);
1380
  }
1381
 
1382
  /// Return how the indexed load should be treated: either it is legal, needs
1383
  /// to be promoted to a larger size, needs to be expanded to some other code
1384
  /// sequence, or the target has a custom expander for it.
1385
  LegalizeAction getIndexedMaskedLoadAction(unsigned IdxMode, MVT VT) const {
1386
    return getIndexedModeAction(IdxMode, VT, IMAB_MaskedLoad);
1387
  }
1388
 
1389
  /// Return true if the specified indexed load is legal on this target.
1390
  bool isIndexedMaskedLoadLegal(unsigned IdxMode, EVT VT) const {
1391
    return VT.isSimple() &&
1392
           (getIndexedMaskedLoadAction(IdxMode, VT.getSimpleVT()) == Legal ||
1393
            getIndexedMaskedLoadAction(IdxMode, VT.getSimpleVT()) == Custom);
1394
  }
1395
 
1396
  /// Return how the indexed store should be treated: either it is legal, needs
1397
  /// to be promoted to a larger size, needs to be expanded to some other code
1398
  /// sequence, or the target has a custom expander for it.
1399
  LegalizeAction getIndexedMaskedStoreAction(unsigned IdxMode, MVT VT) const {
1400
    return getIndexedModeAction(IdxMode, VT, IMAB_MaskedStore);
1401
  }
1402
 
1403
  /// Return true if the specified indexed load is legal on this target.
1404
  bool isIndexedMaskedStoreLegal(unsigned IdxMode, EVT VT) const {
1405
    return VT.isSimple() &&
1406
           (getIndexedMaskedStoreAction(IdxMode, VT.getSimpleVT()) == Legal ||
1407
            getIndexedMaskedStoreAction(IdxMode, VT.getSimpleVT()) == Custom);
1408
  }
1409
 
1410
  /// Returns true if the index type for a masked gather/scatter requires
1411
  /// extending
1412
  virtual bool shouldExtendGSIndex(EVT VT, EVT &EltTy) const { return false; }
1413
 
1414
  // Returns true if VT is a legal index type for masked gathers/scatters
1415
  // on this target
1416
  virtual bool shouldRemoveExtendFromGSIndex(EVT IndexVT, EVT DataVT) const {
1417
    return false;
1418
  }
1419
 
1420
  // Return true if the target supports a scatter/gather instruction with
1421
  // indices which are scaled by the particular value.  Note that all targets
1422
  // must by definition support scale of 1.
1423
  virtual bool isLegalScaleForGatherScatter(uint64_t Scale,
1424
                                            uint64_t ElemSize) const {
1425
    // MGATHER/MSCATTER are only required to support scaling by one or by the
1426
    // element size.
1427
    if (Scale != ElemSize && Scale != 1)
1428
      return false;
1429
    return true;
1430
  }
1431
 
1432
  /// Return how the condition code should be treated: either it is legal, needs
1433
  /// to be expanded to some other code sequence, or the target has a custom
1434
  /// expander for it.
1435
  LegalizeAction
1436
  getCondCodeAction(ISD::CondCode CC, MVT VT) const {
1437
    assert((unsigned)CC < std::size(CondCodeActions) &&
1438
           ((unsigned)VT.SimpleTy >> 3) < std::size(CondCodeActions[0]) &&
1439
           "Table isn't big enough!");
1440
    // See setCondCodeAction for how this is encoded.
1441
    uint32_t Shift = 4 * (VT.SimpleTy & 0x7);
1442
    uint32_t Value = CondCodeActions[CC][VT.SimpleTy >> 3];
1443
    LegalizeAction Action = (LegalizeAction) ((Value >> Shift) & 0xF);
1444
    assert(Action != Promote && "Can't promote condition code!");
1445
    return Action;
1446
  }
1447
 
1448
  /// Return true if the specified condition code is legal on this target.
1449
  bool isCondCodeLegal(ISD::CondCode CC, MVT VT) const {
1450
    return getCondCodeAction(CC, VT) == Legal;
1451
  }
1452
 
1453
  /// Return true if the specified condition code is legal or custom on this
1454
  /// target.
1455
  bool isCondCodeLegalOrCustom(ISD::CondCode CC, MVT VT) const {
1456
    return getCondCodeAction(CC, VT) == Legal ||
1457
           getCondCodeAction(CC, VT) == Custom;
1458
  }
1459
 
1460
  /// If the action for this operation is to promote, this method returns the
1461
  /// ValueType to promote to.
1462
  MVT getTypeToPromoteTo(unsigned Op, MVT VT) const {
1463
    assert(getOperationAction(Op, VT) == Promote &&
1464
           "This operation isn't promoted!");
1465
 
1466
    // See if this has an explicit type specified.
1467
    std::map<std::pair<unsigned, MVT::SimpleValueType>,
1468
             MVT::SimpleValueType>::const_iterator PTTI =
1469
      PromoteToType.find(std::make_pair(Op, VT.SimpleTy));
1470
    if (PTTI != PromoteToType.end()) return PTTI->second;
1471
 
1472
    assert((VT.isInteger() || VT.isFloatingPoint()) &&
1473
           "Cannot autopromote this type, add it with AddPromotedToType.");
1474
 
1475
    MVT NVT = VT;
1476
    do {
1477
      NVT = (MVT::SimpleValueType)(NVT.SimpleTy+1);
1478
      assert(NVT.isInteger() == VT.isInteger() && NVT != MVT::isVoid &&
1479
             "Didn't find type to promote to!");
1480
    } while (!isTypeLegal(NVT) ||
1481
              getOperationAction(Op, NVT) == Promote);
1482
    return NVT;
1483
  }
1484
 
1485
  virtual EVT getAsmOperandValueType(const DataLayout &DL, Type *Ty,
1486
                                     bool AllowUnknown = false) const {
1487
    return getValueType(DL, Ty, AllowUnknown);
1488
  }
1489
 
1490
  /// Return the EVT corresponding to this LLVM type.  This is fixed by the LLVM
1491
  /// operations except for the pointer size.  If AllowUnknown is true, this
1492
  /// will return MVT::Other for types with no EVT counterpart (e.g. structs),
1493
  /// otherwise it will assert.
1494
  EVT getValueType(const DataLayout &DL, Type *Ty,
1495
                   bool AllowUnknown = false) const {
1496
    // Lower scalar pointers to native pointer types.
1497
    if (auto *PTy = dyn_cast<PointerType>(Ty))
1498
      return getPointerTy(DL, PTy->getAddressSpace());
1499
 
1500
    if (auto *VTy = dyn_cast<VectorType>(Ty)) {
1501
      Type *EltTy = VTy->getElementType();
1502
      // Lower vectors of pointers to native pointer types.
1503
      if (auto *PTy = dyn_cast<PointerType>(EltTy)) {
1504
        EVT PointerTy(getPointerTy(DL, PTy->getAddressSpace()));
1505
        EltTy = PointerTy.getTypeForEVT(Ty->getContext());
1506
      }
1507
      return EVT::getVectorVT(Ty->getContext(), EVT::getEVT(EltTy, false),
1508
                              VTy->getElementCount());
1509
    }
1510
 
1511
    return EVT::getEVT(Ty, AllowUnknown);
1512
  }
1513
 
1514
  EVT getMemValueType(const DataLayout &DL, Type *Ty,
1515
                      bool AllowUnknown = false) const {
1516
    // Lower scalar pointers to native pointer types.
1517
    if (PointerType *PTy = dyn_cast<PointerType>(Ty))
1518
      return getPointerMemTy(DL, PTy->getAddressSpace());
1519
    else if (VectorType *VTy = dyn_cast<VectorType>(Ty)) {
1520
      Type *Elm = VTy->getElementType();
1521
      if (PointerType *PT = dyn_cast<PointerType>(Elm)) {
1522
        EVT PointerTy(getPointerMemTy(DL, PT->getAddressSpace()));
1523
        Elm = PointerTy.getTypeForEVT(Ty->getContext());
1524
      }
1525
      return EVT::getVectorVT(Ty->getContext(), EVT::getEVT(Elm, false),
1526
                              VTy->getElementCount());
1527
    }
1528
 
1529
    return getValueType(DL, Ty, AllowUnknown);
1530
  }
1531
 
1532
 
1533
  /// Return the MVT corresponding to this LLVM type. See getValueType.
1534
  MVT getSimpleValueType(const DataLayout &DL, Type *Ty,
1535
                         bool AllowUnknown = false) const {
1536
    return getValueType(DL, Ty, AllowUnknown).getSimpleVT();
1537
  }
1538
 
1539
  /// Return the desired alignment for ByVal or InAlloca aggregate function
1540
  /// arguments in the caller parameter area.  This is the actual alignment, not
1541
  /// its logarithm.
1542
  virtual uint64_t getByValTypeAlignment(Type *Ty, const DataLayout &DL) const;
1543
 
1544
  /// Return the type of registers that this ValueType will eventually require.
1545
  MVT getRegisterType(MVT VT) const {
1546
    assert((unsigned)VT.SimpleTy < std::size(RegisterTypeForVT));
1547
    return RegisterTypeForVT[VT.SimpleTy];
1548
  }
1549
 
1550
  /// Return the type of registers that this ValueType will eventually require.
1551
  MVT getRegisterType(LLVMContext &Context, EVT VT) const {
1552
    if (VT.isSimple()) {
1553
      assert((unsigned)VT.getSimpleVT().SimpleTy <
1554
             std::size(RegisterTypeForVT));
1555
      return RegisterTypeForVT[VT.getSimpleVT().SimpleTy];
1556
    }
1557
    if (VT.isVector()) {
1558
      EVT VT1;
1559
      MVT RegisterVT;
1560
      unsigned NumIntermediates;
1561
      (void)getVectorTypeBreakdown(Context, VT, VT1,
1562
                                   NumIntermediates, RegisterVT);
1563
      return RegisterVT;
1564
    }
1565
    if (VT.isInteger()) {
1566
      return getRegisterType(Context, getTypeToTransformTo(Context, VT));
1567
    }
1568
    llvm_unreachable("Unsupported extended type!");
1569
  }
1570
 
1571
  /// Return the number of registers that this ValueType will eventually
1572
  /// require.
1573
  ///
1574
  /// This is one for any types promoted to live in larger registers, but may be
1575
  /// more than one for types (like i64) that are split into pieces.  For types
1576
  /// like i140, which are first promoted then expanded, it is the number of
1577
  /// registers needed to hold all the bits of the original type.  For an i140
1578
  /// on a 32 bit machine this means 5 registers.
1579
  ///
1580
  /// RegisterVT may be passed as a way to override the default settings, for
1581
  /// instance with i128 inline assembly operands on SystemZ.
1582
  virtual unsigned
1583
  getNumRegisters(LLVMContext &Context, EVT VT,
1584
                  std::optional<MVT> RegisterVT = std::nullopt) const {
1585
    if (VT.isSimple()) {
1586
      assert((unsigned)VT.getSimpleVT().SimpleTy <
1587
             std::size(NumRegistersForVT));
1588
      return NumRegistersForVT[VT.getSimpleVT().SimpleTy];
1589
    }
1590
    if (VT.isVector()) {
1591
      EVT VT1;
1592
      MVT VT2;
1593
      unsigned NumIntermediates;
1594
      return getVectorTypeBreakdown(Context, VT, VT1, NumIntermediates, VT2);
1595
    }
1596
    if (VT.isInteger()) {
1597
      unsigned BitWidth = VT.getSizeInBits();
1598
      unsigned RegWidth = getRegisterType(Context, VT).getSizeInBits();
1599
      return (BitWidth + RegWidth - 1) / RegWidth;
1600
    }
1601
    llvm_unreachable("Unsupported extended type!");
1602
  }
1603
 
1604
  /// Certain combinations of ABIs, Targets and features require that types
1605
  /// are legal for some operations and not for other operations.
1606
  /// For MIPS all vector types must be passed through the integer register set.
1607
  virtual MVT getRegisterTypeForCallingConv(LLVMContext &Context,
1608
                                            CallingConv::ID CC, EVT VT) const {
1609
    return getRegisterType(Context, VT);
1610
  }
1611
 
1612
  /// Certain targets require unusual breakdowns of certain types. For MIPS,
1613
  /// this occurs when a vector type is used, as vector are passed through the
1614
  /// integer register set.
1615
  virtual unsigned getNumRegistersForCallingConv(LLVMContext &Context,
1616
                                                 CallingConv::ID CC,
1617
                                                 EVT VT) const {
1618
    return getNumRegisters(Context, VT);
1619
  }
1620
 
1621
  /// Certain targets have context sensitive alignment requirements, where one
1622
  /// type has the alignment requirement of another type.
1623
  virtual Align getABIAlignmentForCallingConv(Type *ArgTy,
1624
                                              const DataLayout &DL) const {
1625
    return DL.getABITypeAlign(ArgTy);
1626
  }
1627
 
1628
  /// If true, then instruction selection should seek to shrink the FP constant
1629
  /// of the specified type to a smaller type in order to save space and / or
1630
  /// reduce runtime.
1631
  virtual bool ShouldShrinkFPConstant(EVT) const { return true; }
1632
 
1633
  /// Return true if it is profitable to reduce a load to a smaller type.
1634
  /// Example: (i16 (trunc (i32 (load x))) -> i16 load x
1635
  virtual bool shouldReduceLoadWidth(SDNode *Load, ISD::LoadExtType ExtTy,
1636
                                     EVT NewVT) const {
1637
    // By default, assume that it is cheaper to extract a subvector from a wide
1638
    // vector load rather than creating multiple narrow vector loads.
1639
    if (NewVT.isVector() && !Load->hasOneUse())
1640
      return false;
1641
 
1642
    return true;
1643
  }
1644
 
1645
  /// When splitting a value of the specified type into parts, does the Lo
1646
  /// or Hi part come first?  This usually follows the endianness, except
1647
  /// for ppcf128, where the Hi part always comes first.
1648
  bool hasBigEndianPartOrdering(EVT VT, const DataLayout &DL) const {
1649
    return DL.isBigEndian() || VT == MVT::ppcf128;
1650
  }
1651
 
1652
  /// If true, the target has custom DAG combine transformations that it can
1653
  /// perform for the specified node.
1654
  bool hasTargetDAGCombine(ISD::NodeType NT) const {
1655
    assert(unsigned(NT >> 3) < std::size(TargetDAGCombineArray));
1656
    return TargetDAGCombineArray[NT >> 3] & (1 << (NT&7));
1657
  }
1658
 
1659
  unsigned getGatherAllAliasesMaxDepth() const {
1660
    return GatherAllAliasesMaxDepth;
1661
  }
1662
 
1663
  /// Returns the size of the platform's va_list object.
1664
  virtual unsigned getVaListSizeInBits(const DataLayout &DL) const {
1665
    return getPointerTy(DL).getSizeInBits();
1666
  }
1667
 
1668
  /// Get maximum # of store operations permitted for llvm.memset
1669
  ///
1670
  /// This function returns the maximum number of store operations permitted
1671
  /// to replace a call to llvm.memset. The value is set by the target at the
1672
  /// performance threshold for such a replacement. If OptSize is true,
1673
  /// return the limit for functions that have OptSize attribute.
1674
  unsigned getMaxStoresPerMemset(bool OptSize) const {
1675
    return OptSize ? MaxStoresPerMemsetOptSize : MaxStoresPerMemset;
1676
  }
1677
 
1678
  /// Get maximum # of store operations permitted for llvm.memcpy
1679
  ///
1680
  /// This function returns the maximum number of store operations permitted
1681
  /// to replace a call to llvm.memcpy. The value is set by the target at the
1682
  /// performance threshold for such a replacement. If OptSize is true,
1683
  /// return the limit for functions that have OptSize attribute.
1684
  unsigned getMaxStoresPerMemcpy(bool OptSize) const {
1685
    return OptSize ? MaxStoresPerMemcpyOptSize : MaxStoresPerMemcpy;
1686
  }
1687
 
1688
  /// \brief Get maximum # of store operations to be glued together
1689
  ///
1690
  /// This function returns the maximum number of store operations permitted
1691
  /// to glue together during lowering of llvm.memcpy. The value is set by
1692
  //  the target at the performance threshold for such a replacement.
1693
  virtual unsigned getMaxGluedStoresPerMemcpy() const {
1694
    return MaxGluedStoresPerMemcpy;
1695
  }
1696
 
1697
  /// Get maximum # of load operations permitted for memcmp
1698
  ///
1699
  /// This function returns the maximum number of load operations permitted
1700
  /// to replace a call to memcmp. The value is set by the target at the
1701
  /// performance threshold for such a replacement. If OptSize is true,
1702
  /// return the limit for functions that have OptSize attribute.
1703
  unsigned getMaxExpandSizeMemcmp(bool OptSize) const {
1704
    return OptSize ? MaxLoadsPerMemcmpOptSize : MaxLoadsPerMemcmp;
1705
  }
1706
 
1707
  /// Get maximum # of store operations permitted for llvm.memmove
1708
  ///
1709
  /// This function returns the maximum number of store operations permitted
1710
  /// to replace a call to llvm.memmove. The value is set by the target at the
1711
  /// performance threshold for such a replacement. If OptSize is true,
1712
  /// return the limit for functions that have OptSize attribute.
1713
  unsigned getMaxStoresPerMemmove(bool OptSize) const {
1714
    return OptSize ? MaxStoresPerMemmoveOptSize : MaxStoresPerMemmove;
1715
  }
1716
 
1717
  /// Determine if the target supports unaligned memory accesses.
1718
  ///
1719
  /// This function returns true if the target allows unaligned memory accesses
1720
  /// of the specified type in the given address space. If true, it also returns
1721
  /// a relative speed of the unaligned memory access in the last argument by
1722
  /// reference. The higher the speed number the faster the operation comparing
1723
  /// to a number returned by another such call. This is used, for example, in
1724
  /// situations where an array copy/move/set is converted to a sequence of
1725
  /// store operations. Its use helps to ensure that such replacements don't
1726
  /// generate code that causes an alignment error (trap) on the target machine.
1727
  virtual bool allowsMisalignedMemoryAccesses(
1728
      EVT, unsigned AddrSpace = 0, Align Alignment = Align(1),
1729
      MachineMemOperand::Flags Flags = MachineMemOperand::MONone,
1730
      unsigned * /*Fast*/ = nullptr) const {
1731
    return false;
1732
  }
1733
 
1734
  /// LLT handling variant.
1735
  virtual bool allowsMisalignedMemoryAccesses(
1736
      LLT, unsigned AddrSpace = 0, Align Alignment = Align(1),
1737
      MachineMemOperand::Flags Flags = MachineMemOperand::MONone,
1738
      unsigned * /*Fast*/ = nullptr) const {
1739
    return false;
1740
  }
1741
 
1742
  /// This function returns true if the memory access is aligned or if the
1743
  /// target allows this specific unaligned memory access. If the access is
1744
  /// allowed, the optional final parameter returns a relative speed of the
1745
  /// access (as defined by the target).
1746
  bool allowsMemoryAccessForAlignment(
1747
      LLVMContext &Context, const DataLayout &DL, EVT VT,
1748
      unsigned AddrSpace = 0, Align Alignment = Align(1),
1749
      MachineMemOperand::Flags Flags = MachineMemOperand::MONone,
1750
      unsigned *Fast = nullptr) const;
1751
 
1752
  /// Return true if the memory access of this type is aligned or if the target
1753
  /// allows this specific unaligned access for the given MachineMemOperand.
1754
  /// If the access is allowed, the optional final parameter returns a relative
1755
  /// speed of the access (as defined by the target).
1756
  bool allowsMemoryAccessForAlignment(LLVMContext &Context,
1757
                                      const DataLayout &DL, EVT VT,
1758
                                      const MachineMemOperand &MMO,
1759
                                      unsigned *Fast = nullptr) const;
1760
 
1761
  /// Return true if the target supports a memory access of this type for the
1762
  /// given address space and alignment. If the access is allowed, the optional
1763
  /// final parameter returns the relative speed of the access (as defined by
1764
  /// the target).
1765
  virtual bool
1766
  allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, EVT VT,
1767
                     unsigned AddrSpace = 0, Align Alignment = Align(1),
1768
                     MachineMemOperand::Flags Flags = MachineMemOperand::MONone,
1769
                     unsigned *Fast = nullptr) const;
1770
 
1771
  /// Return true if the target supports a memory access of this type for the
1772
  /// given MachineMemOperand. If the access is allowed, the optional
1773
  /// final parameter returns the relative access speed (as defined by the
1774
  /// target).
1775
  bool allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, EVT VT,
1776
                          const MachineMemOperand &MMO,
1777
                          unsigned *Fast = nullptr) const;
1778
 
1779
  /// LLT handling variant.
1780
  bool allowsMemoryAccess(LLVMContext &Context, const DataLayout &DL, LLT Ty,
1781
                          const MachineMemOperand &MMO,
1782
                          unsigned *Fast = nullptr) const;
1783
 
1784
  /// Returns the target specific optimal type for load and store operations as
1785
  /// a result of memset, memcpy, and memmove lowering.
1786
  /// It returns EVT::Other if the type should be determined using generic
1787
  /// target-independent logic.
1788
  virtual EVT
1789
  getOptimalMemOpType(const MemOp &Op,
1790
                      const AttributeList & /*FuncAttributes*/) const {
1791
    return MVT::Other;
1792
  }
1793
 
1794
  /// LLT returning variant.
1795
  virtual LLT
1796
  getOptimalMemOpLLT(const MemOp &Op,
1797
                     const AttributeList & /*FuncAttributes*/) const {
1798
    return LLT();
1799
  }
1800
 
1801
  /// Returns true if it's safe to use load / store of the specified type to
1802
  /// expand memcpy / memset inline.
1803
  ///
1804
  /// This is mostly true for all types except for some special cases. For
1805
  /// example, on X86 targets without SSE2 f64 load / store are done with fldl /
1806
  /// fstpl which also does type conversion. Note the specified type doesn't
1807
  /// have to be legal as the hook is used before type legalization.
1808
  virtual bool isSafeMemOpType(MVT /*VT*/) const { return true; }
1809
 
1810
  /// Return lower limit for number of blocks in a jump table.
1811
  virtual unsigned getMinimumJumpTableEntries() const;
1812
 
1813
  /// Return lower limit of the density in a jump table.
1814
  unsigned getMinimumJumpTableDensity(bool OptForSize) const;
1815
 
1816
  /// Return upper limit for number of entries in a jump table.
1817
  /// Zero if no limit.
1818
  unsigned getMaximumJumpTableSize() const;
1819
 
1820
  virtual bool isJumpTableRelative() const;
1821
 
1822
  /// If a physical register, this specifies the register that
1823
  /// llvm.savestack/llvm.restorestack should save and restore.
1824
  Register getStackPointerRegisterToSaveRestore() const {
1825
    return StackPointerRegisterToSaveRestore;
1826
  }
1827
 
1828
  /// If a physical register, this returns the register that receives the
1829
  /// exception address on entry to an EH pad.
1830
  virtual Register
1831
  getExceptionPointerRegister(const Constant *PersonalityFn) const {
1832
    return Register();
1833
  }
1834
 
1835
  /// If a physical register, this returns the register that receives the
1836
  /// exception typeid on entry to a landing pad.
1837
  virtual Register
1838
  getExceptionSelectorRegister(const Constant *PersonalityFn) const {
1839
    return Register();
1840
  }
1841
 
1842
  virtual bool needsFixedCatchObjects() const {
1843
    report_fatal_error("Funclet EH is not implemented for this target");
1844
  }
1845
 
1846
  /// Return the minimum stack alignment of an argument.
1847
  Align getMinStackArgumentAlignment() const {
1848
    return MinStackArgumentAlignment;
1849
  }
1850
 
1851
  /// Return the minimum function alignment.
1852
  Align getMinFunctionAlignment() const { return MinFunctionAlignment; }
1853
 
1854
  /// Return the preferred function alignment.
1855
  Align getPrefFunctionAlignment() const { return PrefFunctionAlignment; }
1856
 
1857
  /// Return the preferred loop alignment.
1858
  virtual Align getPrefLoopAlignment(MachineLoop *ML = nullptr) const;
1859
 
1860
  /// Return the maximum amount of bytes allowed to be emitted when padding for
1861
  /// alignment
1862
  virtual unsigned
1863
  getMaxPermittedBytesForAlignment(MachineBasicBlock *MBB) const;
1864
 
1865
  /// Should loops be aligned even when the function is marked OptSize (but not
1866
  /// MinSize).
1867
  virtual bool alignLoopsWithOptSize() const { return false; }
1868
 
1869
  /// If the target has a standard location for the stack protector guard,
1870
  /// returns the address of that location. Otherwise, returns nullptr.
1871
  /// DEPRECATED: please override useLoadStackGuardNode and customize
1872
  ///             LOAD_STACK_GUARD, or customize \@llvm.stackguard().
1873
  virtual Value *getIRStackGuard(IRBuilderBase &IRB) const;
1874
 
1875
  /// Inserts necessary declarations for SSP (stack protection) purpose.
1876
  /// Should be used only when getIRStackGuard returns nullptr.
1877
  virtual void insertSSPDeclarations(Module &M) const;
1878
 
1879
  /// Return the variable that's previously inserted by insertSSPDeclarations,
1880
  /// if any, otherwise return nullptr. Should be used only when
1881
  /// getIRStackGuard returns nullptr.
1882
  virtual Value *getSDagStackGuard(const Module &M) const;
1883
 
1884
  /// If this function returns true, stack protection checks should XOR the
1885
  /// frame pointer (or whichever pointer is used to address locals) into the
1886
  /// stack guard value before checking it. getIRStackGuard must return nullptr
1887
  /// if this returns true.
1888
  virtual bool useStackGuardXorFP() const { return false; }
1889
 
1890
  /// If the target has a standard stack protection check function that
1891
  /// performs validation and error handling, returns the function. Otherwise,
1892
  /// returns nullptr. Must be previously inserted by insertSSPDeclarations.
1893
  /// Should be used only when getIRStackGuard returns nullptr.
1894
  virtual Function *getSSPStackGuardCheck(const Module &M) const;
1895
 
1896
  /// \returns true if a constant G_UBFX is legal on the target.
1897
  virtual bool isConstantUnsignedBitfieldExtractLegal(unsigned Opc, LLT Ty1,
1898
                                                      LLT Ty2) const {
1899
    return false;
1900
  }
1901
 
1902
protected:
1903
  Value *getDefaultSafeStackPointerLocation(IRBuilderBase &IRB,
1904
                                            bool UseTLS) const;
1905
 
1906
public:
1907
  /// Returns the target-specific address of the unsafe stack pointer.
1908
  virtual Value *getSafeStackPointerLocation(IRBuilderBase &IRB) const;
1909
 
1910
  /// Returns the name of the symbol used to emit stack probes or the empty
1911
  /// string if not applicable.
1912
  virtual bool hasStackProbeSymbol(const MachineFunction &MF) const { return false; }
1913
 
1914
  virtual bool hasInlineStackProbe(const MachineFunction &MF) const { return false; }
1915
 
1916
  virtual StringRef getStackProbeSymbolName(const MachineFunction &MF) const {
1917
    return "";
1918
  }
1919
 
1920
  /// Returns true if a cast from SrcAS to DestAS is "cheap", such that e.g. we
1921
  /// are happy to sink it into basic blocks. A cast may be free, but not
1922
  /// necessarily a no-op. e.g. a free truncate from a 64-bit to 32-bit pointer.
1923
  virtual bool isFreeAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const;
1924
 
1925
  /// Return true if the pointer arguments to CI should be aligned by aligning
1926
  /// the object whose address is being passed. If so then MinSize is set to the
1927
  /// minimum size the object must be to be aligned and PrefAlign is set to the
1928
  /// preferred alignment.
1929
  virtual bool shouldAlignPointerArgs(CallInst * /*CI*/, unsigned & /*MinSize*/,
1930
                                      Align & /*PrefAlign*/) const {
1931
    return false;
1932
  }
1933
 
1934
  //===--------------------------------------------------------------------===//
1935
  /// \name Helpers for TargetTransformInfo implementations
1936
  /// @{
1937
 
1938
  /// Get the ISD node that corresponds to the Instruction class opcode.
1939
  int InstructionOpcodeToISD(unsigned Opcode) const;
1940
 
1941
  /// @}
1942
 
1943
  //===--------------------------------------------------------------------===//
1944
  /// \name Helpers for atomic expansion.
1945
  /// @{
1946
 
1947
  /// Returns the maximum atomic operation size (in bits) supported by
1948
  /// the backend. Atomic operations greater than this size (as well
1949
  /// as ones that are not naturally aligned), will be expanded by
1950
  /// AtomicExpandPass into an __atomic_* library call.
1951
  unsigned getMaxAtomicSizeInBitsSupported() const {
1952
    return MaxAtomicSizeInBitsSupported;
1953
  }
1954
 
1955
  /// Returns the size in bits of the maximum div/rem the backend supports.
1956
  /// Larger operations will be expanded by ExpandLargeDivRem.
1957
  unsigned getMaxDivRemBitWidthSupported() const {
1958
    return MaxDivRemBitWidthSupported;
1959
  }
1960
 
1961
  /// Returns the size in bits of the maximum larget fp convert the backend
1962
  /// supports. Larger operations will be expanded by ExpandLargeFPConvert.
1963
  unsigned getMaxLargeFPConvertBitWidthSupported() const {
1964
    return MaxLargeFPConvertBitWidthSupported;
1965
  }
1966
 
1967
  /// Returns the size of the smallest cmpxchg or ll/sc instruction
1968
  /// the backend supports.  Any smaller operations are widened in
1969
  /// AtomicExpandPass.
1970
  ///
1971
  /// Note that *unlike* operations above the maximum size, atomic ops
1972
  /// are still natively supported below the minimum; they just
1973
  /// require a more complex expansion.
1974
  unsigned getMinCmpXchgSizeInBits() const { return MinCmpXchgSizeInBits; }
1975
 
1976
  /// Whether the target supports unaligned atomic operations.
1977
  bool supportsUnalignedAtomics() const { return SupportsUnalignedAtomics; }
1978
 
1979
  /// Whether AtomicExpandPass should automatically insert fences and reduce
1980
  /// ordering for this atomic. This should be true for most architectures with
1981
  /// weak memory ordering. Defaults to false.
1982
  virtual bool shouldInsertFencesForAtomic(const Instruction *I) const {
1983
    return false;
1984
  }
1985
 
1986
  /// Whether AtomicExpandPass should automatically insert a trailing fence
1987
  /// without reducing the ordering for this atomic. Defaults to false.
1988
  virtual bool
1989
  shouldInsertTrailingFenceForAtomicStore(const Instruction *I) const {
1990
    return false;
1991
  }
1992
 
1993
  /// Perform a load-linked operation on Addr, returning a "Value *" with the
1994
  /// corresponding pointee type. This may entail some non-trivial operations to
1995
  /// truncate or reconstruct types that will be illegal in the backend. See
1996
  /// ARMISelLowering for an example implementation.
1997
  virtual Value *emitLoadLinked(IRBuilderBase &Builder, Type *ValueTy,
1998
                                Value *Addr, AtomicOrdering Ord) const {
1999
    llvm_unreachable("Load linked unimplemented on this target");
2000
  }
2001
 
2002
  /// Perform a store-conditional operation to Addr. Return the status of the
2003
  /// store. This should be 0 if the store succeeded, non-zero otherwise.
2004
  virtual Value *emitStoreConditional(IRBuilderBase &Builder, Value *Val,
2005
                                      Value *Addr, AtomicOrdering Ord) const {
2006
    llvm_unreachable("Store conditional unimplemented on this target");
2007
  }
2008
 
2009
  /// Perform a masked atomicrmw using a target-specific intrinsic. This
2010
  /// represents the core LL/SC loop which will be lowered at a late stage by
2011
  /// the backend. The target-specific intrinsic returns the loaded value and
2012
  /// is not responsible for masking and shifting the result.
2013
  virtual Value *emitMaskedAtomicRMWIntrinsic(IRBuilderBase &Builder,
2014
                                              AtomicRMWInst *AI,
2015
                                              Value *AlignedAddr, Value *Incr,
2016
                                              Value *Mask, Value *ShiftAmt,
2017
                                              AtomicOrdering Ord) const {
2018
    llvm_unreachable("Masked atomicrmw expansion unimplemented on this target");
2019
  }
2020
 
2021
  /// Perform a atomicrmw expansion using a target-specific way. This is
2022
  /// expected to be called when masked atomicrmw and bit test atomicrmw don't
2023
  /// work, and the target supports another way to lower atomicrmw.
2024
  virtual void emitExpandAtomicRMW(AtomicRMWInst *AI) const {
2025
    llvm_unreachable(
2026
        "Generic atomicrmw expansion unimplemented on this target");
2027
  }
2028
 
2029
  /// Perform a bit test atomicrmw using a target-specific intrinsic. This
2030
  /// represents the combined bit test intrinsic which will be lowered at a late
2031
  /// stage by the backend.
2032
  virtual void emitBitTestAtomicRMWIntrinsic(AtomicRMWInst *AI) const {
2033
    llvm_unreachable(
2034
        "Bit test atomicrmw expansion unimplemented on this target");
2035
  }
2036
 
2037
  /// Perform a atomicrmw which the result is only used by comparison, using a
2038
  /// target-specific intrinsic. This represents the combined atomic and compare
2039
  /// intrinsic which will be lowered at a late stage by the backend.
2040
  virtual void emitCmpArithAtomicRMWIntrinsic(AtomicRMWInst *AI) const {
2041
    llvm_unreachable(
2042
        "Compare arith atomicrmw expansion unimplemented on this target");
2043
  }
2044
 
2045
  /// Perform a masked cmpxchg using a target-specific intrinsic. This
2046
  /// represents the core LL/SC loop which will be lowered at a late stage by
2047
  /// the backend. The target-specific intrinsic returns the loaded value and
2048
  /// is not responsible for masking and shifting the result.
2049
  virtual Value *emitMaskedAtomicCmpXchgIntrinsic(
2050
      IRBuilderBase &Builder, AtomicCmpXchgInst *CI, Value *AlignedAddr,
2051
      Value *CmpVal, Value *NewVal, Value *Mask, AtomicOrdering Ord) const {
2052
    llvm_unreachable("Masked cmpxchg expansion unimplemented on this target");
2053
  }
2054
 
2055
  /// Inserts in the IR a target-specific intrinsic specifying a fence.
2056
  /// It is called by AtomicExpandPass before expanding an
2057
  ///   AtomicRMW/AtomicCmpXchg/AtomicStore/AtomicLoad
2058
  ///   if shouldInsertFencesForAtomic returns true.
2059
  ///
2060
  /// Inst is the original atomic instruction, prior to other expansions that
2061
  /// may be performed.
2062
  ///
2063
  /// This function should either return a nullptr, or a pointer to an IR-level
2064
  ///   Instruction*. Even complex fence sequences can be represented by a
2065
  ///   single Instruction* through an intrinsic to be lowered later.
2066
  /// Backends should override this method to produce target-specific intrinsic
2067
  ///   for their fences.
2068
  /// FIXME: Please note that the default implementation here in terms of
2069
  ///   IR-level fences exists for historical/compatibility reasons and is
2070
  ///   *unsound* ! Fences cannot, in general, be used to restore sequential
2071
  ///   consistency. For example, consider the following example:
2072
  /// atomic<int> x = y = 0;
2073
  /// int r1, r2, r3, r4;
2074
  /// Thread 0:
2075
  ///   x.store(1);
2076
  /// Thread 1:
2077
  ///   y.store(1);
2078
  /// Thread 2:
2079
  ///   r1 = x.load();
2080
  ///   r2 = y.load();
2081
  /// Thread 3:
2082
  ///   r3 = y.load();
2083
  ///   r4 = x.load();
2084
  ///  r1 = r3 = 1 and r2 = r4 = 0 is impossible as long as the accesses are all
2085
  ///  seq_cst. But if they are lowered to monotonic accesses, no amount of
2086
  ///  IR-level fences can prevent it.
2087
  /// @{
2088
  virtual Instruction *emitLeadingFence(IRBuilderBase &Builder,
2089
                                        Instruction *Inst,
2090
                                        AtomicOrdering Ord) const;
2091
 
2092
  virtual Instruction *emitTrailingFence(IRBuilderBase &Builder,
2093
                                         Instruction *Inst,
2094
                                         AtomicOrdering Ord) const;
2095
  /// @}
2096
 
2097
  // Emits code that executes when the comparison result in the ll/sc
2098
  // expansion of a cmpxchg instruction is such that the store-conditional will
2099
  // not execute.  This makes it possible to balance out the load-linked with
2100
  // a dedicated instruction, if desired.
2101
  // E.g., on ARM, if ldrex isn't followed by strex, the exclusive monitor would
2102
  // be unnecessarily held, except if clrex, inserted by this hook, is executed.
2103
  virtual void emitAtomicCmpXchgNoStoreLLBalance(IRBuilderBase &Builder) const {}
2104
 
2105
  /// Returns true if arguments should be sign-extended in lib calls.
2106
  virtual bool shouldSignExtendTypeInLibCall(EVT Type, bool IsSigned) const {
2107
    return IsSigned;
2108
  }
2109
 
2110
  /// Returns true if arguments should be extended in lib calls.
2111
  virtual bool shouldExtendTypeInLibCall(EVT Type) const {
2112
    return true;
2113
  }
2114
 
2115
  /// Returns how the given (atomic) load should be expanded by the
2116
  /// IR-level AtomicExpand pass.
2117
  virtual AtomicExpansionKind shouldExpandAtomicLoadInIR(LoadInst *LI) const {
2118
    return AtomicExpansionKind::None;
2119
  }
2120
 
2121
  /// Returns how the given (atomic) load should be cast by the IR-level
2122
  /// AtomicExpand pass.
2123
  virtual AtomicExpansionKind shouldCastAtomicLoadInIR(LoadInst *LI) const {
2124
    if (LI->getType()->isFloatingPointTy())
2125
      return AtomicExpansionKind::CastToInteger;
2126
    return AtomicExpansionKind::None;
2127
  }
2128
 
2129
  /// Returns how the given (atomic) store should be expanded by the IR-level
2130
  /// AtomicExpand pass into. For instance AtomicExpansionKind::Expand will try
2131
  /// to use an atomicrmw xchg.
2132
  virtual AtomicExpansionKind shouldExpandAtomicStoreInIR(StoreInst *SI) const {
2133
    return AtomicExpansionKind::None;
2134
  }
2135
 
2136
  /// Returns how the given (atomic) store should be cast by the IR-level
2137
  /// AtomicExpand pass into. For instance AtomicExpansionKind::CastToInteger
2138
  /// will try to cast the operands to integer values.
2139
  virtual AtomicExpansionKind shouldCastAtomicStoreInIR(StoreInst *SI) const {
2140
    if (SI->getValueOperand()->getType()->isFloatingPointTy())
2141
      return AtomicExpansionKind::CastToInteger;
2142
    return AtomicExpansionKind::None;
2143
  }
2144
 
2145
  /// Returns how the given atomic cmpxchg should be expanded by the IR-level
2146
  /// AtomicExpand pass.
2147
  virtual AtomicExpansionKind
2148
  shouldExpandAtomicCmpXchgInIR(AtomicCmpXchgInst *AI) const {
2149
    return AtomicExpansionKind::None;
2150
  }
2151
 
2152
  /// Returns how the IR-level AtomicExpand pass should expand the given
2153
  /// AtomicRMW, if at all. Default is to never expand.
2154
  virtual AtomicExpansionKind shouldExpandAtomicRMWInIR(AtomicRMWInst *RMW) const {
2155
    return RMW->isFloatingPointOperation() ?
2156
      AtomicExpansionKind::CmpXChg : AtomicExpansionKind::None;
2157
  }
2158
 
2159
  /// Returns how the given atomic atomicrmw should be cast by the IR-level
2160
  /// AtomicExpand pass.
2161
  virtual AtomicExpansionKind
2162
  shouldCastAtomicRMWIInIR(AtomicRMWInst *RMWI) const {
2163
    if (RMWI->getOperation() == AtomicRMWInst::Xchg &&
2164
        (RMWI->getValOperand()->getType()->isFloatingPointTy() ||
2165
         RMWI->getValOperand()->getType()->isPointerTy()))
2166
      return AtomicExpansionKind::CastToInteger;
2167
 
2168
    return AtomicExpansionKind::None;
2169
  }
2170
 
2171
  /// On some platforms, an AtomicRMW that never actually modifies the value
2172
  /// (such as fetch_add of 0) can be turned into a fence followed by an
2173
  /// atomic load. This may sound useless, but it makes it possible for the
2174
  /// processor to keep the cacheline shared, dramatically improving
2175
  /// performance. And such idempotent RMWs are useful for implementing some
2176
  /// kinds of locks, see for example (justification + benchmarks):
2177
  /// http://www.hpl.hp.com/techreports/2012/HPL-2012-68.pdf
2178
  /// This method tries doing that transformation, returning the atomic load if
2179
  /// it succeeds, and nullptr otherwise.
2180
  /// If shouldExpandAtomicLoadInIR returns true on that load, it will undergo
2181
  /// another round of expansion.
2182
  virtual LoadInst *
2183
  lowerIdempotentRMWIntoFencedLoad(AtomicRMWInst *RMWI) const {
2184
    return nullptr;
2185
  }
2186
 
2187
  /// Returns how the platform's atomic operations are extended (ZERO_EXTEND,
2188
  /// SIGN_EXTEND, or ANY_EXTEND).
2189
  virtual ISD::NodeType getExtendForAtomicOps() const {
2190
    return ISD::ZERO_EXTEND;
2191
  }
2192
 
2193
  /// Returns how the platform's atomic compare and swap expects its comparison
2194
  /// value to be extended (ZERO_EXTEND, SIGN_EXTEND, or ANY_EXTEND). This is
2195
  /// separate from getExtendForAtomicOps, which is concerned with the
2196
  /// sign-extension of the instruction's output, whereas here we are concerned
2197
  /// with the sign-extension of the input. For targets with compare-and-swap
2198
  /// instructions (or sub-word comparisons in their LL/SC loop expansions),
2199
  /// the input can be ANY_EXTEND, but the output will still have a specific
2200
  /// extension.
2201
  virtual ISD::NodeType getExtendForAtomicCmpSwapArg() const {
2202
    return ISD::ANY_EXTEND;
2203
  }
2204
 
2205
  /// @}
2206
 
2207
  /// Returns true if we should normalize
2208
  /// select(N0&N1, X, Y) => select(N0, select(N1, X, Y), Y) and
2209
  /// select(N0|N1, X, Y) => select(N0, select(N1, X, Y, Y)) if it is likely
2210
  /// that it saves us from materializing N0 and N1 in an integer register.
2211
  /// Targets that are able to perform and/or on flags should return false here.
2212
  virtual bool shouldNormalizeToSelectSequence(LLVMContext &Context,
2213
                                               EVT VT) const {
2214
    // If a target has multiple condition registers, then it likely has logical
2215
    // operations on those registers.
2216
    if (hasMultipleConditionRegisters())
2217
      return false;
2218
    // Only do the transform if the value won't be split into multiple
2219
    // registers.
2220
    LegalizeTypeAction Action = getTypeAction(Context, VT);
2221
    return Action != TypeExpandInteger && Action != TypeExpandFloat &&
2222
      Action != TypeSplitVector;
2223
  }
2224
 
2225
  virtual bool isProfitableToCombineMinNumMaxNum(EVT VT) const { return true; }
2226
 
2227
  /// Return true if a select of constants (select Cond, C1, C2) should be
2228
  /// transformed into simple math ops with the condition value. For example:
2229
  /// select Cond, C1, C1-1 --> add (zext Cond), C1-1
2230
  virtual bool convertSelectOfConstantsToMath(EVT VT) const {
2231
    return false;
2232
  }
2233
 
2234
  /// Return true if it is profitable to transform an integer
2235
  /// multiplication-by-constant into simpler operations like shifts and adds.
2236
  /// This may be true if the target does not directly support the
2237
  /// multiplication operation for the specified type or the sequence of simpler
2238
  /// ops is faster than the multiply.
2239
  virtual bool decomposeMulByConstant(LLVMContext &Context,
2240
                                      EVT VT, SDValue C) const {
2241
    return false;
2242
  }
2243
 
2244
  /// Return true if it may be profitable to transform
2245
  /// (mul (add x, c1), c2) -> (add (mul x, c2), c1*c2).
2246
  /// This may not be true if c1 and c2 can be represented as immediates but
2247
  /// c1*c2 cannot, for example.
2248
  /// The target should check if c1, c2 and c1*c2 can be represented as
2249
  /// immediates, or have to be materialized into registers. If it is not sure
2250
  /// about some cases, a default true can be returned to let the DAGCombiner
2251
  /// decide.
2252
  /// AddNode is (add x, c1), and ConstNode is c2.
2253
  virtual bool isMulAddWithConstProfitable(SDValue AddNode,
2254
                                           SDValue ConstNode) const {
2255
    return true;
2256
  }
2257
 
2258
  /// Return true if it is more correct/profitable to use strict FP_TO_INT
2259
  /// conversion operations - canonicalizing the FP source value instead of
2260
  /// converting all cases and then selecting based on value.
2261
  /// This may be true if the target throws exceptions for out of bounds
2262
  /// conversions or has fast FP CMOV.
2263
  virtual bool shouldUseStrictFP_TO_INT(EVT FpVT, EVT IntVT,
2264
                                        bool IsSigned) const {
2265
    return false;
2266
  }
2267
 
2268
  /// Return true if it is beneficial to expand an @llvm.powi.* intrinsic.
2269
  /// If not optimizing for size, expanding @llvm.powi.* intrinsics is always
2270
  /// considered beneficial.
2271
  /// If optimizing for size, expansion is only considered beneficial for upto
2272
  /// 5 multiplies and a divide (if the exponent is negative).
2273
  bool isBeneficialToExpandPowI(int Exponent, bool OptForSize) const {
2274
    if (Exponent < 0)
2275
      Exponent = -Exponent;
2276
    return !OptForSize ||
2277
           (llvm::popcount((unsigned int)Exponent) + Log2_32(Exponent) < 7);
2278
  }
2279
 
2280
  //===--------------------------------------------------------------------===//
2281
  // TargetLowering Configuration Methods - These methods should be invoked by
2282
  // the derived class constructor to configure this object for the target.
2283
  //
2284
protected:
2285
  /// Specify how the target extends the result of integer and floating point
2286
  /// boolean values from i1 to a wider type.  See getBooleanContents.
2287
  void setBooleanContents(BooleanContent Ty) {
2288
    BooleanContents = Ty;
2289
    BooleanFloatContents = Ty;
2290
  }
2291
 
2292
  /// Specify how the target extends the result of integer and floating point
2293
  /// boolean values from i1 to a wider type.  See getBooleanContents.
2294
  void setBooleanContents(BooleanContent IntTy, BooleanContent FloatTy) {
2295
    BooleanContents = IntTy;
2296
    BooleanFloatContents = FloatTy;
2297
  }
2298
 
2299
  /// Specify how the target extends the result of a vector boolean value from a
2300
  /// vector of i1 to a wider type.  See getBooleanContents.
2301
  void setBooleanVectorContents(BooleanContent Ty) {
2302
    BooleanVectorContents = Ty;
2303
  }
2304
 
2305
  /// Specify the target scheduling preference.
2306
  void setSchedulingPreference(Sched::Preference Pref) {
2307
    SchedPreferenceInfo = Pref;
2308
  }
2309
 
2310
  /// Indicate the minimum number of blocks to generate jump tables.
2311
  void setMinimumJumpTableEntries(unsigned Val);
2312
 
2313
  /// Indicate the maximum number of entries in jump tables.
2314
  /// Set to zero to generate unlimited jump tables.
2315
  void setMaximumJumpTableSize(unsigned);
2316
 
2317
  /// If set to a physical register, this specifies the register that
2318
  /// llvm.savestack/llvm.restorestack should save and restore.
2319
  void setStackPointerRegisterToSaveRestore(Register R) {
2320
    StackPointerRegisterToSaveRestore = R;
2321
  }
2322
 
2323
  /// Tells the code generator that the target has multiple (allocatable)
2324
  /// condition registers that can be used to store the results of comparisons
2325
  /// for use by selects and conditional branches. With multiple condition
2326
  /// registers, the code generator will not aggressively sink comparisons into
2327
  /// the blocks of their users.
2328
  void setHasMultipleConditionRegisters(bool hasManyRegs = true) {
2329
    HasMultipleConditionRegisters = hasManyRegs;
2330
  }
2331
 
2332
  /// Tells the code generator that the target has BitExtract instructions.
2333
  /// The code generator will aggressively sink "shift"s into the blocks of
2334
  /// their users if the users will generate "and" instructions which can be
2335
  /// combined with "shift" to BitExtract instructions.
2336
  void setHasExtractBitsInsn(bool hasExtractInsn = true) {
2337
    HasExtractBitsInsn = hasExtractInsn;
2338
  }
2339
 
2340
  /// Tells the code generator not to expand logic operations on comparison
2341
  /// predicates into separate sequences that increase the amount of flow
2342
  /// control.
2343
  void setJumpIsExpensive(bool isExpensive = true);
2344
 
2345
  /// Tells the code generator which bitwidths to bypass.
2346
  void addBypassSlowDiv(unsigned int SlowBitWidth, unsigned int FastBitWidth) {
2347
    BypassSlowDivWidths[SlowBitWidth] = FastBitWidth;
2348
  }
2349
 
2350
  /// Add the specified register class as an available regclass for the
2351
  /// specified value type. This indicates the selector can handle values of
2352
  /// that class natively.
2353
  void addRegisterClass(MVT VT, const TargetRegisterClass *RC) {
2354
    assert((unsigned)VT.SimpleTy < std::size(RegClassForVT));
2355
    RegClassForVT[VT.SimpleTy] = RC;
2356
  }
2357
 
2358
  /// Return the largest legal super-reg register class of the register class
2359
  /// for the specified type and its associated "cost".
2360
  virtual std::pair<const TargetRegisterClass *, uint8_t>
2361
  findRepresentativeClass(const TargetRegisterInfo *TRI, MVT VT) const;
2362
 
2363
  /// Once all of the register classes are added, this allows us to compute
2364
  /// derived properties we expose.
2365
  void computeRegisterProperties(const TargetRegisterInfo *TRI);
2366
 
2367
  /// Indicate that the specified operation does not work with the specified
2368
  /// type and indicate what to do about it. Note that VT may refer to either
2369
  /// the type of a result or that of an operand of Op.
2370
  void setOperationAction(unsigned Op, MVT VT, LegalizeAction Action) {
2371
    assert(Op < std::size(OpActions[0]) && "Table isn't big enough!");
2372
    OpActions[(unsigned)VT.SimpleTy][Op] = Action;
2373
  }
2374
  void setOperationAction(ArrayRef<unsigned> Ops, MVT VT,
2375
                          LegalizeAction Action) {
2376
    for (auto Op : Ops)
2377
      setOperationAction(Op, VT, Action);
2378
  }
2379
  void setOperationAction(ArrayRef<unsigned> Ops, ArrayRef<MVT> VTs,
2380
                          LegalizeAction Action) {
2381
    for (auto VT : VTs)
2382
      setOperationAction(Ops, VT, Action);
2383
  }
2384
 
2385
  /// Indicate that the specified load with extension does not work with the
2386
  /// specified type and indicate what to do about it.
2387
  void setLoadExtAction(unsigned ExtType, MVT ValVT, MVT MemVT,
2388
                        LegalizeAction Action) {
2389
    assert(ExtType < ISD::LAST_LOADEXT_TYPE && ValVT.isValid() &&
2390
           MemVT.isValid() && "Table isn't big enough!");
2391
    assert((unsigned)Action < 0x10 && "too many bits for bitfield array");
2392
    unsigned Shift = 4 * ExtType;
2393
    LoadExtActions[ValVT.SimpleTy][MemVT.SimpleTy] &= ~((uint16_t)0xF << Shift);
2394
    LoadExtActions[ValVT.SimpleTy][MemVT.SimpleTy] |= (uint16_t)Action << Shift;
2395
  }
2396
  void setLoadExtAction(ArrayRef<unsigned> ExtTypes, MVT ValVT, MVT MemVT,
2397
                        LegalizeAction Action) {
2398
    for (auto ExtType : ExtTypes)
2399
      setLoadExtAction(ExtType, ValVT, MemVT, Action);
2400
  }
2401
  void setLoadExtAction(ArrayRef<unsigned> ExtTypes, MVT ValVT,
2402
                        ArrayRef<MVT> MemVTs, LegalizeAction Action) {
2403
    for (auto MemVT : MemVTs)
2404
      setLoadExtAction(ExtTypes, ValVT, MemVT, Action);
2405
  }
2406
 
2407
  /// Indicate that the specified truncating store does not work with the
2408
  /// specified type and indicate what to do about it.
2409
  void setTruncStoreAction(MVT ValVT, MVT MemVT, LegalizeAction Action) {
2410
    assert(ValVT.isValid() && MemVT.isValid() && "Table isn't big enough!");
2411
    TruncStoreActions[(unsigned)ValVT.SimpleTy][MemVT.SimpleTy] = Action;
2412
  }
2413
 
2414
  /// Indicate that the specified indexed load does or does not work with the
2415
  /// specified type and indicate what to do abort it.
2416
  ///
2417
  /// NOTE: All indexed mode loads are initialized to Expand in
2418
  /// TargetLowering.cpp
2419
  void setIndexedLoadAction(ArrayRef<unsigned> IdxModes, MVT VT,
2420
                            LegalizeAction Action) {
2421
    for (auto IdxMode : IdxModes)
2422
      setIndexedModeAction(IdxMode, VT, IMAB_Load, Action);
2423
  }
2424
 
2425
  void setIndexedLoadAction(ArrayRef<unsigned> IdxModes, ArrayRef<MVT> VTs,
2426
                            LegalizeAction Action) {
2427
    for (auto VT : VTs)
2428
      setIndexedLoadAction(IdxModes, VT, Action);
2429
  }
2430
 
2431
  /// Indicate that the specified indexed store does or does not work with the
2432
  /// specified type and indicate what to do about it.
2433
  ///
2434
  /// NOTE: All indexed mode stores are initialized to Expand in
2435
  /// TargetLowering.cpp
2436
  void setIndexedStoreAction(ArrayRef<unsigned> IdxModes, MVT VT,
2437
                             LegalizeAction Action) {
2438
    for (auto IdxMode : IdxModes)
2439
      setIndexedModeAction(IdxMode, VT, IMAB_Store, Action);
2440
  }
2441
 
2442
  void setIndexedStoreAction(ArrayRef<unsigned> IdxModes, ArrayRef<MVT> VTs,
2443
                             LegalizeAction Action) {
2444
    for (auto VT : VTs)
2445
      setIndexedStoreAction(IdxModes, VT, Action);
2446
  }
2447
 
2448
  /// Indicate that the specified indexed masked load does or does not work with
2449
  /// the specified type and indicate what to do about it.
2450
  ///
2451
  /// NOTE: All indexed mode masked loads are initialized to Expand in
2452
  /// TargetLowering.cpp
2453
  void setIndexedMaskedLoadAction(unsigned IdxMode, MVT VT,
2454
                                  LegalizeAction Action) {
2455
    setIndexedModeAction(IdxMode, VT, IMAB_MaskedLoad, Action);
2456
  }
2457
 
2458
  /// Indicate that the specified indexed masked store does or does not work
2459
  /// with the specified type and indicate what to do about it.
2460
  ///
2461
  /// NOTE: All indexed mode masked stores are initialized to Expand in
2462
  /// TargetLowering.cpp
2463
  void setIndexedMaskedStoreAction(unsigned IdxMode, MVT VT,
2464
                                   LegalizeAction Action) {
2465
    setIndexedModeAction(IdxMode, VT, IMAB_MaskedStore, Action);
2466
  }
2467
 
2468
  /// Indicate that the specified condition code is or isn't supported on the
2469
  /// target and indicate what to do about it.
2470
  void setCondCodeAction(ArrayRef<ISD::CondCode> CCs, MVT VT,
2471
                         LegalizeAction Action) {
2472
    for (auto CC : CCs) {
2473
      assert(VT.isValid() && (unsigned)CC < std::size(CondCodeActions) &&
2474
             "Table isn't big enough!");
2475
      assert((unsigned)Action < 0x10 && "too many bits for bitfield array");
2476
      /// The lower 3 bits of the SimpleTy index into Nth 4bit set from the
2477
      /// 32-bit value and the upper 29 bits index into the second dimension of
2478
      /// the array to select what 32-bit value to use.
2479
      uint32_t Shift = 4 * (VT.SimpleTy & 0x7);
2480
      CondCodeActions[CC][VT.SimpleTy >> 3] &= ~((uint32_t)0xF << Shift);
2481
      CondCodeActions[CC][VT.SimpleTy >> 3] |= (uint32_t)Action << Shift;
2482
    }
2483
  }
2484
  void setCondCodeAction(ArrayRef<ISD::CondCode> CCs, ArrayRef<MVT> VTs,
2485
                         LegalizeAction Action) {
2486
    for (auto VT : VTs)
2487
      setCondCodeAction(CCs, VT, Action);
2488
  }
2489
 
2490
  /// If Opc/OrigVT is specified as being promoted, the promotion code defaults
2491
  /// to trying a larger integer/fp until it can find one that works. If that
2492
  /// default is insufficient, this method can be used by the target to override
2493
  /// the default.
2494
  void AddPromotedToType(unsigned Opc, MVT OrigVT, MVT DestVT) {
2495
    PromoteToType[std::make_pair(Opc, OrigVT.SimpleTy)] = DestVT.SimpleTy;
2496
  }
2497
 
2498
  /// Convenience method to set an operation to Promote and specify the type
2499
  /// in a single call.
2500
  void setOperationPromotedToType(unsigned Opc, MVT OrigVT, MVT DestVT) {
2501
    setOperationAction(Opc, OrigVT, Promote);
2502
    AddPromotedToType(Opc, OrigVT, DestVT);
2503
  }
2504
 
2505
  /// Targets should invoke this method for each target independent node that
2506
  /// they want to provide a custom DAG combiner for by implementing the
2507
  /// PerformDAGCombine virtual method.
2508
  void setTargetDAGCombine(ArrayRef<ISD::NodeType> NTs) {
2509
    for (auto NT : NTs) {
2510
      assert(unsigned(NT >> 3) < std::size(TargetDAGCombineArray));
2511
      TargetDAGCombineArray[NT >> 3] |= 1 << (NT & 7);
2512
    }
2513
  }
2514
 
2515
  /// Set the target's minimum function alignment.
2516
  void setMinFunctionAlignment(Align Alignment) {
2517
    MinFunctionAlignment = Alignment;
2518
  }
2519
 
2520
  /// Set the target's preferred function alignment.  This should be set if
2521
  /// there is a performance benefit to higher-than-minimum alignment
2522
  void setPrefFunctionAlignment(Align Alignment) {
2523
    PrefFunctionAlignment = Alignment;
2524
  }
2525
 
2526
  /// Set the target's preferred loop alignment. Default alignment is one, it
2527
  /// means the target does not care about loop alignment. The target may also
2528
  /// override getPrefLoopAlignment to provide per-loop values.
2529
  void setPrefLoopAlignment(Align Alignment) { PrefLoopAlignment = Alignment; }
2530
  void setMaxBytesForAlignment(unsigned MaxBytes) {
2531
    MaxBytesForAlignment = MaxBytes;
2532
  }
2533
 
2534
  /// Set the minimum stack alignment of an argument.
2535
  void setMinStackArgumentAlignment(Align Alignment) {
2536
    MinStackArgumentAlignment = Alignment;
2537
  }
2538
 
2539
  /// Set the maximum atomic operation size supported by the
2540
  /// backend. Atomic operations greater than this size (as well as
2541
  /// ones that are not naturally aligned), will be expanded by
2542
  /// AtomicExpandPass into an __atomic_* library call.
2543
  void setMaxAtomicSizeInBitsSupported(unsigned SizeInBits) {
2544
    MaxAtomicSizeInBitsSupported = SizeInBits;
2545
  }
2546
 
2547
  /// Set the size in bits of the maximum div/rem the backend supports.
2548
  /// Larger operations will be expanded by ExpandLargeDivRem.
2549
  void setMaxDivRemBitWidthSupported(unsigned SizeInBits) {
2550
    MaxDivRemBitWidthSupported = SizeInBits;
2551
  }
2552
 
2553
  /// Set the size in bits of the maximum fp convert the backend supports.
2554
  /// Larger operations will be expanded by ExpandLargeFPConvert.
2555
  void setMaxLargeFPConvertBitWidthSupported(unsigned SizeInBits) {
2556
    MaxLargeFPConvertBitWidthSupported = SizeInBits;
2557
  }
2558
 
2559
  /// Sets the minimum cmpxchg or ll/sc size supported by the backend.
2560
  void setMinCmpXchgSizeInBits(unsigned SizeInBits) {
2561
    MinCmpXchgSizeInBits = SizeInBits;
2562
  }
2563
 
2564
  /// Sets whether unaligned atomic operations are supported.
2565
  void setSupportsUnalignedAtomics(bool UnalignedSupported) {
2566
    SupportsUnalignedAtomics = UnalignedSupported;
2567
  }
2568
 
2569
public:
2570
  //===--------------------------------------------------------------------===//
2571
  // Addressing mode description hooks (used by LSR etc).
2572
  //
2573
 
2574
  /// CodeGenPrepare sinks address calculations into the same BB as Load/Store
2575
  /// instructions reading the address. This allows as much computation as
2576
  /// possible to be done in the address mode for that operand. This hook lets
2577
  /// targets also pass back when this should be done on intrinsics which
2578
  /// load/store.
2579
  virtual bool getAddrModeArguments(IntrinsicInst * /*I*/,
2580
                                    SmallVectorImpl<Value*> &/*Ops*/,
2581
                                    Type *&/*AccessTy*/) const {
2582
    return false;
2583
  }
2584
 
2585
  /// This represents an addressing mode of:
2586
  ///    BaseGV + BaseOffs + BaseReg + Scale*ScaleReg
2587
  /// If BaseGV is null,  there is no BaseGV.
2588
  /// If BaseOffs is zero, there is no base offset.
2589
  /// If HasBaseReg is false, there is no base register.
2590
  /// If Scale is zero, there is no ScaleReg.  Scale of 1 indicates a reg with
2591
  /// no scale.
2592
  struct AddrMode {
2593
    GlobalValue *BaseGV = nullptr;
2594
    int64_t      BaseOffs = 0;
2595
    bool         HasBaseReg = false;
2596
    int64_t      Scale = 0;
2597
    AddrMode() = default;
2598
  };
2599
 
2600
  /// Return true if the addressing mode represented by AM is legal for this
2601
  /// target, for a load/store of the specified type.
2602
  ///
2603
  /// The type may be VoidTy, in which case only return true if the addressing
2604
  /// mode is legal for a load/store of any legal type.  TODO: Handle
2605
  /// pre/postinc as well.
2606
  ///
2607
  /// If the address space cannot be determined, it will be -1.
2608
  ///
2609
  /// TODO: Remove default argument
2610
  virtual bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM,
2611
                                     Type *Ty, unsigned AddrSpace,
2612
                                     Instruction *I = nullptr) const;
2613
 
2614
  /// Return true if the specified immediate is legal icmp immediate, that is
2615
  /// the target has icmp instructions which can compare a register against the
2616
  /// immediate without having to materialize the immediate into a register.
2617
  virtual bool isLegalICmpImmediate(int64_t) const {
2618
    return true;
2619
  }
2620
 
2621
  /// Return true if the specified immediate is legal add immediate, that is the
2622
  /// target has add instructions which can add a register with the immediate
2623
  /// without having to materialize the immediate into a register.
2624
  virtual bool isLegalAddImmediate(int64_t) const {
2625
    return true;
2626
  }
2627
 
2628
  /// Return true if the specified immediate is legal for the value input of a
2629
  /// store instruction.
2630
  virtual bool isLegalStoreImmediate(int64_t Value) const {
2631
    // Default implementation assumes that at least 0 works since it is likely
2632
    // that a zero register exists or a zero immediate is allowed.
2633
    return Value == 0;
2634
  }
2635
 
2636
  /// Return true if it's significantly cheaper to shift a vector by a uniform
2637
  /// scalar than by an amount which will vary across each lane. On x86 before
2638
  /// AVX2 for example, there is a "psllw" instruction for the former case, but
2639
  /// no simple instruction for a general "a << b" operation on vectors.
2640
  /// This should also apply to lowering for vector funnel shifts (rotates).
2641
  virtual bool isVectorShiftByScalarCheap(Type *Ty) const {
2642
    return false;
2643
  }
2644
 
2645
  /// Given a shuffle vector SVI representing a vector splat, return a new
2646
  /// scalar type of size equal to SVI's scalar type if the new type is more
2647
  /// profitable. Returns nullptr otherwise. For example under MVE float splats
2648
  /// are converted to integer to prevent the need to move from SPR to GPR
2649
  /// registers.
2650
  virtual Type* shouldConvertSplatType(ShuffleVectorInst* SVI) const {
2651
    return nullptr;
2652
  }
2653
 
2654
  /// Given a set in interconnected phis of type 'From' that are loaded/stored
2655
  /// or bitcast to type 'To', return true if the set should be converted to
2656
  /// 'To'.
2657
  virtual bool shouldConvertPhiType(Type *From, Type *To) const {
2658
    return (From->isIntegerTy() || From->isFloatingPointTy()) &&
2659
           (To->isIntegerTy() || To->isFloatingPointTy());
2660
  }
2661
 
2662
  /// Returns true if the opcode is a commutative binary operation.
2663
  virtual bool isCommutativeBinOp(unsigned Opcode) const {
2664
    // FIXME: This should get its info from the td file.
2665
    switch (Opcode) {
2666
    case ISD::ADD:
2667
    case ISD::SMIN:
2668
    case ISD::SMAX:
2669
    case ISD::UMIN:
2670
    case ISD::UMAX:
2671
    case ISD::MUL:
2672
    case ISD::MULHU:
2673
    case ISD::MULHS:
2674
    case ISD::SMUL_LOHI:
2675
    case ISD::UMUL_LOHI:
2676
    case ISD::FADD:
2677
    case ISD::FMUL:
2678
    case ISD::AND:
2679
    case ISD::OR:
2680
    case ISD::XOR:
2681
    case ISD::SADDO:
2682
    case ISD::UADDO:
2683
    case ISD::ADDC:
2684
    case ISD::ADDE:
2685
    case ISD::SADDSAT:
2686
    case ISD::UADDSAT:
2687
    case ISD::FMINNUM:
2688
    case ISD::FMAXNUM:
2689
    case ISD::FMINNUM_IEEE:
2690
    case ISD::FMAXNUM_IEEE:
2691
    case ISD::FMINIMUM:
2692
    case ISD::FMAXIMUM:
2693
    case ISD::AVGFLOORS:
2694
    case ISD::AVGFLOORU:
2695
    case ISD::AVGCEILS:
2696
    case ISD::AVGCEILU:
2697
      return true;
2698
    default: return false;
2699
    }
2700
  }
2701
 
2702
  /// Return true if the node is a math/logic binary operator.
2703
  virtual bool isBinOp(unsigned Opcode) const {
2704
    // A commutative binop must be a binop.
2705
    if (isCommutativeBinOp(Opcode))
2706
      return true;
2707
    // These are non-commutative binops.
2708
    switch (Opcode) {
2709
    case ISD::SUB:
2710
    case ISD::SHL:
2711
    case ISD::SRL:
2712
    case ISD::SRA:
2713
    case ISD::ROTL:
2714
    case ISD::ROTR:
2715
    case ISD::SDIV:
2716
    case ISD::UDIV:
2717
    case ISD::SREM:
2718
    case ISD::UREM:
2719
    case ISD::SSUBSAT:
2720
    case ISD::USUBSAT:
2721
    case ISD::FSUB:
2722
    case ISD::FDIV:
2723
    case ISD::FREM:
2724
      return true;
2725
    default:
2726
      return false;
2727
    }
2728
  }
2729
 
2730
  /// Return true if it's free to truncate a value of type FromTy to type
2731
  /// ToTy. e.g. On x86 it's free to truncate a i32 value in register EAX to i16
2732
  /// by referencing its sub-register AX.
2733
  /// Targets must return false when FromTy <= ToTy.
2734
  virtual bool isTruncateFree(Type *FromTy, Type *ToTy) const {
2735
    return false;
2736
  }
2737
 
2738
  /// Return true if a truncation from FromTy to ToTy is permitted when deciding
2739
  /// whether a call is in tail position. Typically this means that both results
2740
  /// would be assigned to the same register or stack slot, but it could mean
2741
  /// the target performs adequate checks of its own before proceeding with the
2742
  /// tail call.  Targets must return false when FromTy <= ToTy.
2743
  virtual bool allowTruncateForTailCall(Type *FromTy, Type *ToTy) const {
2744
    return false;
2745
  }
2746
 
2747
  virtual bool isTruncateFree(EVT FromVT, EVT ToVT) const { return false; }
2748
  virtual bool isTruncateFree(LLT FromTy, LLT ToTy, const DataLayout &DL,
2749
                              LLVMContext &Ctx) const {
2750
    return isTruncateFree(getApproximateEVTForLLT(FromTy, DL, Ctx),
2751
                          getApproximateEVTForLLT(ToTy, DL, Ctx));
2752
  }
2753
 
2754
  virtual bool isProfitableToHoist(Instruction *I) const { return true; }
2755
 
2756
  /// Return true if the extension represented by \p I is free.
2757
  /// Unlikely the is[Z|FP]ExtFree family which is based on types,
2758
  /// this method can use the context provided by \p I to decide
2759
  /// whether or not \p I is free.
2760
  /// This method extends the behavior of the is[Z|FP]ExtFree family.
2761
  /// In other words, if is[Z|FP]Free returns true, then this method
2762
  /// returns true as well. The converse is not true.
2763
  /// The target can perform the adequate checks by overriding isExtFreeImpl.
2764
  /// \pre \p I must be a sign, zero, or fp extension.
2765
  bool isExtFree(const Instruction *I) const {
2766
    switch (I->getOpcode()) {
2767
    case Instruction::FPExt:
2768
      if (isFPExtFree(EVT::getEVT(I->getType()),
2769
                      EVT::getEVT(I->getOperand(0)->getType())))
2770
        return true;
2771
      break;
2772
    case Instruction::ZExt:
2773
      if (isZExtFree(I->getOperand(0)->getType(), I->getType()))
2774
        return true;
2775
      break;
2776
    case Instruction::SExt:
2777
      break;
2778
    default:
2779
      llvm_unreachable("Instruction is not an extension");
2780
    }
2781
    return isExtFreeImpl(I);
2782
  }
2783
 
2784
  /// Return true if \p Load and \p Ext can form an ExtLoad.
2785
  /// For example, in AArch64
2786
  ///   %L = load i8, i8* %ptr
2787
  ///   %E = zext i8 %L to i32
2788
  /// can be lowered into one load instruction
2789
  ///   ldrb w0, [x0]
2790
  bool isExtLoad(const LoadInst *Load, const Instruction *Ext,
2791
                 const DataLayout &DL) const {
2792
    EVT VT = getValueType(DL, Ext->getType());
2793
    EVT LoadVT = getValueType(DL, Load->getType());
2794
 
2795
    // If the load has other users and the truncate is not free, the ext
2796
    // probably isn't free.
2797
    if (!Load->hasOneUse() && (isTypeLegal(LoadVT) || !isTypeLegal(VT)) &&
2798
        !isTruncateFree(Ext->getType(), Load->getType()))
2799
      return false;
2800
 
2801
    // Check whether the target supports casts folded into loads.
2802
    unsigned LType;
2803
    if (isa<ZExtInst>(Ext))
2804
      LType = ISD::ZEXTLOAD;
2805
    else {
2806
      assert(isa<SExtInst>(Ext) && "Unexpected ext type!");
2807
      LType = ISD::SEXTLOAD;
2808
    }
2809
 
2810
    return isLoadExtLegal(LType, VT, LoadVT);
2811
  }
2812
 
2813
  /// Return true if any actual instruction that defines a value of type FromTy
2814
  /// implicitly zero-extends the value to ToTy in the result register.
2815
  ///
2816
  /// The function should return true when it is likely that the truncate can
2817
  /// be freely folded with an instruction defining a value of FromTy. If
2818
  /// the defining instruction is unknown (because you're looking at a
2819
  /// function argument, PHI, etc.) then the target may require an
2820
  /// explicit truncate, which is not necessarily free, but this function
2821
  /// does not deal with those cases.
2822
  /// Targets must return false when FromTy >= ToTy.
2823
  virtual bool isZExtFree(Type *FromTy, Type *ToTy) const {
2824
    return false;
2825
  }
2826
 
2827
  virtual bool isZExtFree(EVT FromTy, EVT ToTy) const { return false; }
2828
  virtual bool isZExtFree(LLT FromTy, LLT ToTy, const DataLayout &DL,
2829
                          LLVMContext &Ctx) const {
2830
    return isZExtFree(getApproximateEVTForLLT(FromTy, DL, Ctx),
2831
                      getApproximateEVTForLLT(ToTy, DL, Ctx));
2832
  }
2833
 
2834
  /// Return true if sign-extension from FromTy to ToTy is cheaper than
2835
  /// zero-extension.
2836
  virtual bool isSExtCheaperThanZExt(EVT FromTy, EVT ToTy) const {
2837
    return false;
2838
  }
2839
 
2840
  /// Return true if this constant should be sign extended when promoting to
2841
  /// a larger type.
2842
  virtual bool signExtendConstant(const ConstantInt *C) const { return false; }
2843
 
2844
  /// Return true if sinking I's operands to the same basic block as I is
2845
  /// profitable, e.g. because the operands can be folded into a target
2846
  /// instruction during instruction selection. After calling the function
2847
  /// \p Ops contains the Uses to sink ordered by dominance (dominating users
2848
  /// come first).
2849
  virtual bool shouldSinkOperands(Instruction *I,
2850
                                  SmallVectorImpl<Use *> &Ops) const {
2851
    return false;
2852
  }
2853
 
2854
  /// Try to optimize extending or truncating conversion instructions (like
2855
  /// zext, trunc, fptoui, uitofp) for the target.
2856
  virtual bool optimizeExtendOrTruncateConversion(Instruction *I,
2857
                                                  Loop *L) const {
2858
    return false;
2859
  }
2860
 
2861
  /// Return true if the target supplies and combines to a paired load
2862
  /// two loaded values of type LoadedType next to each other in memory.
2863
  /// RequiredAlignment gives the minimal alignment constraints that must be met
2864
  /// to be able to select this paired load.
2865
  ///
2866
  /// This information is *not* used to generate actual paired loads, but it is
2867
  /// used to generate a sequence of loads that is easier to combine into a
2868
  /// paired load.
2869
  /// For instance, something like this:
2870
  /// a = load i64* addr
2871
  /// b = trunc i64 a to i32
2872
  /// c = lshr i64 a, 32
2873
  /// d = trunc i64 c to i32
2874
  /// will be optimized into:
2875
  /// b = load i32* addr1
2876
  /// d = load i32* addr2
2877
  /// Where addr1 = addr2 +/- sizeof(i32).
2878
  ///
2879
  /// In other words, unless the target performs a post-isel load combining,
2880
  /// this information should not be provided because it will generate more
2881
  /// loads.
2882
  virtual bool hasPairedLoad(EVT /*LoadedType*/,
2883
                             Align & /*RequiredAlignment*/) const {
2884
    return false;
2885
  }
2886
 
2887
  /// Return true if the target has a vector blend instruction.
2888
  virtual bool hasVectorBlend() const { return false; }
2889
 
2890
  /// Get the maximum supported factor for interleaved memory accesses.
2891
  /// Default to be the minimum interleave factor: 2.
2892
  virtual unsigned getMaxSupportedInterleaveFactor() const { return 2; }
2893
 
2894
  /// Lower an interleaved load to target specific intrinsics. Return
2895
  /// true on success.
2896
  ///
2897
  /// \p LI is the vector load instruction.
2898
  /// \p Shuffles is the shufflevector list to DE-interleave the loaded vector.
2899
  /// \p Indices is the corresponding indices for each shufflevector.
2900
  /// \p Factor is the interleave factor.
2901
  virtual bool lowerInterleavedLoad(LoadInst *LI,
2902
                                    ArrayRef<ShuffleVectorInst *> Shuffles,
2903
                                    ArrayRef<unsigned> Indices,
2904
                                    unsigned Factor) const {
2905
    return false;
2906
  }
2907
 
2908
  /// Lower an interleaved store to target specific intrinsics. Return
2909
  /// true on success.
2910
  ///
2911
  /// \p SI is the vector store instruction.
2912
  /// \p SVI is the shufflevector to RE-interleave the stored vector.
2913
  /// \p Factor is the interleave factor.
2914
  virtual bool lowerInterleavedStore(StoreInst *SI, ShuffleVectorInst *SVI,
2915
                                     unsigned Factor) const {
2916
    return false;
2917
  }
2918
 
2919
  /// Return true if zero-extending the specific node Val to type VT2 is free
2920
  /// (either because it's implicitly zero-extended such as ARM ldrb / ldrh or
2921
  /// because it's folded such as X86 zero-extending loads).
2922
  virtual bool isZExtFree(SDValue Val, EVT VT2) const {
2923
    return isZExtFree(Val.getValueType(), VT2);
2924
  }
2925
 
2926
  /// Return true if an fpext operation is free (for instance, because
2927
  /// single-precision floating-point numbers are implicitly extended to
2928
  /// double-precision).
2929
  virtual bool isFPExtFree(EVT DestVT, EVT SrcVT) const {
2930
    assert(SrcVT.isFloatingPoint() && DestVT.isFloatingPoint() &&
2931
           "invalid fpext types");
2932
    return false;
2933
  }
2934
 
2935
  /// Return true if an fpext operation input to an \p Opcode operation is free
2936
  /// (for instance, because half-precision floating-point numbers are
2937
  /// implicitly extended to float-precision) for an FMA instruction.
2938
  virtual bool isFPExtFoldable(const MachineInstr &MI, unsigned Opcode,
2939
                               LLT DestTy, LLT SrcTy) const {
2940
    return false;
2941
  }
2942
 
2943
  /// Return true if an fpext operation input to an \p Opcode operation is free
2944
  /// (for instance, because half-precision floating-point numbers are
2945
  /// implicitly extended to float-precision) for an FMA instruction.
2946
  virtual bool isFPExtFoldable(const SelectionDAG &DAG, unsigned Opcode,
2947
                               EVT DestVT, EVT SrcVT) const {
2948
    assert(DestVT.isFloatingPoint() && SrcVT.isFloatingPoint() &&
2949
           "invalid fpext types");
2950
    return isFPExtFree(DestVT, SrcVT);
2951
  }
2952
 
2953
  /// Return true if folding a vector load into ExtVal (a sign, zero, or any
2954
  /// extend node) is profitable.
2955
  virtual bool isVectorLoadExtDesirable(SDValue ExtVal) const { return false; }
2956
 
2957
  /// Return true if an fneg operation is free to the point where it is never
2958
  /// worthwhile to replace it with a bitwise operation.
2959
  virtual bool isFNegFree(EVT VT) const {
2960
    assert(VT.isFloatingPoint());
2961
    return false;
2962
  }
2963
 
2964
  /// Return true if an fabs operation is free to the point where it is never
2965
  /// worthwhile to replace it with a bitwise operation.
2966
  virtual bool isFAbsFree(EVT VT) const {
2967
    assert(VT.isFloatingPoint());
2968
    return false;
2969
  }
2970
 
2971
  /// Return true if an FMA operation is faster than a pair of fmul and fadd
2972
  /// instructions. fmuladd intrinsics will be expanded to FMAs when this method
2973
  /// returns true, otherwise fmuladd is expanded to fmul + fadd.
2974
  ///
2975
  /// NOTE: This may be called before legalization on types for which FMAs are
2976
  /// not legal, but should return true if those types will eventually legalize
2977
  /// to types that support FMAs. After legalization, it will only be called on
2978
  /// types that support FMAs (via Legal or Custom actions)
2979
  virtual bool isFMAFasterThanFMulAndFAdd(const MachineFunction &MF,
2980
                                          EVT) const {
2981
    return false;
2982
  }
2983
 
2984
  /// Return true if an FMA operation is faster than a pair of fmul and fadd
2985
  /// instructions. fmuladd intrinsics will be expanded to FMAs when this method
2986
  /// returns true, otherwise fmuladd is expanded to fmul + fadd.
2987
  ///
2988
  /// NOTE: This may be called before legalization on types for which FMAs are
2989
  /// not legal, but should return true if those types will eventually legalize
2990
  /// to types that support FMAs. After legalization, it will only be called on
2991
  /// types that support FMAs (via Legal or Custom actions)
2992
  virtual bool isFMAFasterThanFMulAndFAdd(const MachineFunction &MF,
2993
                                          LLT) const {
2994
    return false;
2995
  }
2996
 
2997
  /// IR version
2998
  virtual bool isFMAFasterThanFMulAndFAdd(const Function &F, Type *) const {
2999
    return false;
3000
  }
3001
 
3002
  /// Returns true if \p MI can be combined with another instruction to
3003
  /// form TargetOpcode::G_FMAD. \p N may be an TargetOpcode::G_FADD,
3004
  /// TargetOpcode::G_FSUB, or an TargetOpcode::G_FMUL which will be
3005
  /// distributed into an fadd/fsub.
3006
  virtual bool isFMADLegal(const MachineInstr &MI, LLT Ty) const {
3007
    assert((MI.getOpcode() == TargetOpcode::G_FADD ||
3008
            MI.getOpcode() == TargetOpcode::G_FSUB ||
3009
            MI.getOpcode() == TargetOpcode::G_FMUL) &&
3010
           "unexpected node in FMAD forming combine");
3011
    switch (Ty.getScalarSizeInBits()) {
3012
    case 16:
3013
      return isOperationLegal(TargetOpcode::G_FMAD, MVT::f16);
3014
    case 32:
3015
      return isOperationLegal(TargetOpcode::G_FMAD, MVT::f32);
3016
    case 64:
3017
      return isOperationLegal(TargetOpcode::G_FMAD, MVT::f64);
3018
    default:
3019
      break;
3020
    }
3021
 
3022
    return false;
3023
  }
3024
 
3025
  /// Returns true if be combined with to form an ISD::FMAD. \p N may be an
3026
  /// ISD::FADD, ISD::FSUB, or an ISD::FMUL which will be distributed into an
3027
  /// fadd/fsub.
3028
  virtual bool isFMADLegal(const SelectionDAG &DAG, const SDNode *N) const {
3029
    assert((N->getOpcode() == ISD::FADD || N->getOpcode() == ISD::FSUB ||
3030
            N->getOpcode() == ISD::FMUL) &&
3031
           "unexpected node in FMAD forming combine");
3032
    return isOperationLegal(ISD::FMAD, N->getValueType(0));
3033
  }
3034
 
3035
  // Return true when the decision to generate FMA's (or FMS, FMLA etc) rather
3036
  // than FMUL and ADD is delegated to the machine combiner.
3037
  virtual bool generateFMAsInMachineCombiner(EVT VT,
3038
                                             CodeGenOpt::Level OptLevel) const {
3039
    return false;
3040
  }
3041
 
3042
  /// Return true if it's profitable to narrow operations of type VT1 to
3043
  /// VT2. e.g. on x86, it's profitable to narrow from i32 to i8 but not from
3044
  /// i32 to i16.
3045
  virtual bool isNarrowingProfitable(EVT /*VT1*/, EVT /*VT2*/) const {
3046
    return false;
3047
  }
3048
 
3049
  /// Return true if pulling a binary operation into a select with an identity
3050
  /// constant is profitable. This is the inverse of an IR transform.
3051
  /// Example: X + (Cond ? Y : 0) --> Cond ? (X + Y) : X
3052
  virtual bool shouldFoldSelectWithIdentityConstant(unsigned BinOpcode,
3053
                                                    EVT VT) const {
3054
    return false;
3055
  }
3056
 
3057
  /// Return true if it is beneficial to convert a load of a constant to
3058
  /// just the constant itself.
3059
  /// On some targets it might be more efficient to use a combination of
3060
  /// arithmetic instructions to materialize the constant instead of loading it
3061
  /// from a constant pool.
3062
  virtual bool shouldConvertConstantLoadToIntImm(const APInt &Imm,
3063
                                                 Type *Ty) const {
3064
    return false;
3065
  }
3066
 
3067
  /// Return true if EXTRACT_SUBVECTOR is cheap for extracting this result type
3068
  /// from this source type with this index. This is needed because
3069
  /// EXTRACT_SUBVECTOR usually has custom lowering that depends on the index of
3070
  /// the first element, and only the target knows which lowering is cheap.
3071
  virtual bool isExtractSubvectorCheap(EVT ResVT, EVT SrcVT,
3072
                                       unsigned Index) const {
3073
    return false;
3074
  }
3075
 
3076
  /// Try to convert an extract element of a vector binary operation into an
3077
  /// extract element followed by a scalar operation.
3078
  virtual bool shouldScalarizeBinop(SDValue VecOp) const {
3079
    return false;
3080
  }
3081
 
3082
  /// Return true if extraction of a scalar element from the given vector type
3083
  /// at the given index is cheap. For example, if scalar operations occur on
3084
  /// the same register file as vector operations, then an extract element may
3085
  /// be a sub-register rename rather than an actual instruction.
3086
  virtual bool isExtractVecEltCheap(EVT VT, unsigned Index) const {
3087
    return false;
3088
  }
3089
 
3090
  /// Try to convert math with an overflow comparison into the corresponding DAG
3091
  /// node operation. Targets may want to override this independently of whether
3092
  /// the operation is legal/custom for the given type because it may obscure
3093
  /// matching of other patterns.
3094
  virtual bool shouldFormOverflowOp(unsigned Opcode, EVT VT,
3095
                                    bool MathUsed) const {
3096
    // TODO: The default logic is inherited from code in CodeGenPrepare.
3097
    // The opcode should not make a difference by default?
3098
    if (Opcode != ISD::UADDO)
3099
      return false;
3100
 
3101
    // Allow the transform as long as we have an integer type that is not
3102
    // obviously illegal and unsupported and if the math result is used
3103
    // besides the overflow check. On some targets (e.g. SPARC), it is
3104
    // not profitable to form on overflow op if the math result has no
3105
    // concrete users.
3106
    if (VT.isVector())
3107
      return false;
3108
    return MathUsed && (VT.isSimple() || !isOperationExpand(Opcode, VT));
3109
  }
3110
 
3111
  // Return true if it is profitable to use a scalar input to a BUILD_VECTOR
3112
  // even if the vector itself has multiple uses.
3113
  virtual bool aggressivelyPreferBuildVectorSources(EVT VecVT) const {
3114
    return false;
3115
  }
3116
 
3117
  // Return true if CodeGenPrepare should consider splitting large offset of a
3118
  // GEP to make the GEP fit into the addressing mode and can be sunk into the
3119
  // same blocks of its users.
3120
  virtual bool shouldConsiderGEPOffsetSplit() const { return false; }
3121
 
3122
  /// Return true if creating a shift of the type by the given
3123
  /// amount is not profitable.
3124
  virtual bool shouldAvoidTransformToShift(EVT VT, unsigned Amount) const {
3125
    return false;
3126
  }
3127
 
3128
  /// Does this target require the clearing of high-order bits in a register
3129
  /// passed to the fp16 to fp conversion library function.
3130
  virtual bool shouldKeepZExtForFP16Conv() const { return false; }
3131
 
3132
  /// Should we generate fp_to_si_sat and fp_to_ui_sat from type FPVT to type VT
3133
  /// from min(max(fptoi)) saturation patterns.
3134
  virtual bool shouldConvertFpToSat(unsigned Op, EVT FPVT, EVT VT) const {
3135
    return isOperationLegalOrCustom(Op, VT);
3136
  }
3137
 
3138
  /// Does this target support complex deinterleaving
3139
  virtual bool isComplexDeinterleavingSupported() const { return false; }
3140
 
3141
  /// Does this target support complex deinterleaving with the given operation
3142
  /// and type
3143
  virtual bool isComplexDeinterleavingOperationSupported(
3144
      ComplexDeinterleavingOperation Operation, Type *Ty) const {
3145
    return false;
3146
  }
3147
 
3148
  /// Create the IR node for the given complex deinterleaving operation.
3149
  /// If one cannot be created using all the given inputs, nullptr should be
3150
  /// returned.
3151
  virtual Value *createComplexDeinterleavingIR(
3152
      Instruction *I, ComplexDeinterleavingOperation OperationType,
3153
      ComplexDeinterleavingRotation Rotation, Value *InputA, Value *InputB,
3154
      Value *Accumulator = nullptr) const {
3155
    return nullptr;
3156
  }
3157
 
3158
  //===--------------------------------------------------------------------===//
3159
  // Runtime Library hooks
3160
  //
3161
 
3162
  /// Rename the default libcall routine name for the specified libcall.
3163
  void setLibcallName(RTLIB::Libcall Call, const char *Name) {
3164
    LibcallRoutineNames[Call] = Name;
3165
  }
3166
  void setLibcallName(ArrayRef<RTLIB::Libcall> Calls, const char *Name) {
3167
    for (auto Call : Calls)
3168
      setLibcallName(Call, Name);
3169
  }
3170
 
3171
  /// Get the libcall routine name for the specified libcall.
3172
  const char *getLibcallName(RTLIB::Libcall Call) const {
3173
    return LibcallRoutineNames[Call];
3174
  }
3175
 
3176
  /// Override the default CondCode to be used to test the result of the
3177
  /// comparison libcall against zero.
3178
  void setCmpLibcallCC(RTLIB::Libcall Call, ISD::CondCode CC) {
3179
    CmpLibcallCCs[Call] = CC;
3180
  }
3181
 
3182
  /// Get the CondCode that's to be used to test the result of the comparison
3183
  /// libcall against zero.
3184
  ISD::CondCode getCmpLibcallCC(RTLIB::Libcall Call) const {
3185
    return CmpLibcallCCs[Call];
3186
  }
3187
 
3188
  /// Set the CallingConv that should be used for the specified libcall.
3189
  void setLibcallCallingConv(RTLIB::Libcall Call, CallingConv::ID CC) {
3190
    LibcallCallingConvs[Call] = CC;
3191
  }
3192
 
3193
  /// Get the CallingConv that should be used for the specified libcall.
3194
  CallingConv::ID getLibcallCallingConv(RTLIB::Libcall Call) const {
3195
    return LibcallCallingConvs[Call];
3196
  }
3197
 
3198
  /// Execute target specific actions to finalize target lowering.
3199
  /// This is used to set extra flags in MachineFrameInformation and freezing
3200
  /// the set of reserved registers.
3201
  /// The default implementation just freezes the set of reserved registers.
3202
  virtual void finalizeLowering(MachineFunction &MF) const;
3203
 
3204
  //===----------------------------------------------------------------------===//
3205
  //  GlobalISel Hooks
3206
  //===----------------------------------------------------------------------===//
3207
  /// Check whether or not \p MI needs to be moved close to its uses.
3208
  virtual bool shouldLocalize(const MachineInstr &MI, const TargetTransformInfo *TTI) const;
3209
 
3210
 
3211
private:
3212
  const TargetMachine &TM;
3213
 
3214
  /// Tells the code generator that the target has multiple (allocatable)
3215
  /// condition registers that can be used to store the results of comparisons
3216
  /// for use by selects and conditional branches. With multiple condition
3217
  /// registers, the code generator will not aggressively sink comparisons into
3218
  /// the blocks of their users.
3219
  bool HasMultipleConditionRegisters;
3220
 
3221
  /// Tells the code generator that the target has BitExtract instructions.
3222
  /// The code generator will aggressively sink "shift"s into the blocks of
3223
  /// their users if the users will generate "and" instructions which can be
3224
  /// combined with "shift" to BitExtract instructions.
3225
  bool HasExtractBitsInsn;
3226
 
3227
  /// Tells the code generator to bypass slow divide or remainder
3228
  /// instructions. For example, BypassSlowDivWidths[32,8] tells the code
3229
  /// generator to bypass 32-bit integer div/rem with an 8-bit unsigned integer
3230
  /// div/rem when the operands are positive and less than 256.
3231
  DenseMap <unsigned int, unsigned int> BypassSlowDivWidths;
3232
 
3233
  /// Tells the code generator that it shouldn't generate extra flow control
3234
  /// instructions and should attempt to combine flow control instructions via
3235
  /// predication.
3236
  bool JumpIsExpensive;
3237
 
3238
  /// Information about the contents of the high-bits in boolean values held in
3239
  /// a type wider than i1. See getBooleanContents.
3240
  BooleanContent BooleanContents;
3241
 
3242
  /// Information about the contents of the high-bits in boolean values held in
3243
  /// a type wider than i1. See getBooleanContents.
3244
  BooleanContent BooleanFloatContents;
3245
 
3246
  /// Information about the contents of the high-bits in boolean vector values
3247
  /// when the element type is wider than i1. See getBooleanContents.
3248
  BooleanContent BooleanVectorContents;
3249
 
3250
  /// The target scheduling preference: shortest possible total cycles or lowest
3251
  /// register usage.
3252
  Sched::Preference SchedPreferenceInfo;
3253
 
3254
  /// The minimum alignment that any argument on the stack needs to have.
3255
  Align MinStackArgumentAlignment;
3256
 
3257
  /// The minimum function alignment (used when optimizing for size, and to
3258
  /// prevent explicitly provided alignment from leading to incorrect code).
3259
  Align MinFunctionAlignment;
3260
 
3261
  /// The preferred function alignment (used when alignment unspecified and
3262
  /// optimizing for speed).
3263
  Align PrefFunctionAlignment;
3264
 
3265
  /// The preferred loop alignment (in log2 bot in bytes).
3266
  Align PrefLoopAlignment;
3267
  /// The maximum amount of bytes permitted to be emitted for alignment.
3268
  unsigned MaxBytesForAlignment;
3269
 
3270
  /// Size in bits of the maximum atomics size the backend supports.
3271
  /// Accesses larger than this will be expanded by AtomicExpandPass.
3272
  unsigned MaxAtomicSizeInBitsSupported;
3273
 
3274
  /// Size in bits of the maximum div/rem size the backend supports.
3275
  /// Larger operations will be expanded by ExpandLargeDivRem.
3276
  unsigned MaxDivRemBitWidthSupported;
3277
 
3278
  /// Size in bits of the maximum larget fp convert size the backend
3279
  /// supports. Larger operations will be expanded by ExpandLargeFPConvert.
3280
  unsigned MaxLargeFPConvertBitWidthSupported;
3281
 
3282
  /// Size in bits of the minimum cmpxchg or ll/sc operation the
3283
  /// backend supports.
3284
  unsigned MinCmpXchgSizeInBits;
3285
 
3286
  /// This indicates if the target supports unaligned atomic operations.
3287
  bool SupportsUnalignedAtomics;
3288
 
3289
  /// If set to a physical register, this specifies the register that
3290
  /// llvm.savestack/llvm.restorestack should save and restore.
3291
  Register StackPointerRegisterToSaveRestore;
3292
 
3293
  /// This indicates the default register class to use for each ValueType the
3294
  /// target supports natively.
3295
  const TargetRegisterClass *RegClassForVT[MVT::VALUETYPE_SIZE];
3296
  uint16_t NumRegistersForVT[MVT::VALUETYPE_SIZE];
3297
  MVT RegisterTypeForVT[MVT::VALUETYPE_SIZE];
3298
 
3299
  /// This indicates the "representative" register class to use for each
3300
  /// ValueType the target supports natively. This information is used by the
3301
  /// scheduler to track register pressure. By default, the representative
3302
  /// register class is the largest legal super-reg register class of the
3303
  /// register class of the specified type. e.g. On x86, i8, i16, and i32's
3304
  /// representative class would be GR32.
3305
  const TargetRegisterClass *RepRegClassForVT[MVT::VALUETYPE_SIZE];
3306
 
3307
  /// This indicates the "cost" of the "representative" register class for each
3308
  /// ValueType. The cost is used by the scheduler to approximate register
3309
  /// pressure.
3310
  uint8_t RepRegClassCostForVT[MVT::VALUETYPE_SIZE];
3311
 
3312
  /// For any value types we are promoting or expanding, this contains the value
3313
  /// type that we are changing to.  For Expanded types, this contains one step
3314
  /// of the expand (e.g. i64 -> i32), even if there are multiple steps required
3315
  /// (e.g. i64 -> i16).  For types natively supported by the system, this holds
3316
  /// the same type (e.g. i32 -> i32).
3317
  MVT TransformToType[MVT::VALUETYPE_SIZE];
3318
 
3319
  /// For each operation and each value type, keep a LegalizeAction that
3320
  /// indicates how instruction selection should deal with the operation.  Most
3321
  /// operations are Legal (aka, supported natively by the target), but
3322
  /// operations that are not should be described.  Note that operations on
3323
  /// non-legal value types are not described here.
3324
  LegalizeAction OpActions[MVT::VALUETYPE_SIZE][ISD::BUILTIN_OP_END];
3325
 
3326
  /// For each load extension type and each value type, keep a LegalizeAction
3327
  /// that indicates how instruction selection should deal with a load of a
3328
  /// specific value type and extension type. Uses 4-bits to store the action
3329
  /// for each of the 4 load ext types.
3330
  uint16_t LoadExtActions[MVT::VALUETYPE_SIZE][MVT::VALUETYPE_SIZE];
3331
 
3332
  /// For each value type pair keep a LegalizeAction that indicates whether a
3333
  /// truncating store of a specific value type and truncating type is legal.
3334
  LegalizeAction TruncStoreActions[MVT::VALUETYPE_SIZE][MVT::VALUETYPE_SIZE];
3335
 
3336
  /// For each indexed mode and each value type, keep a quad of LegalizeAction
3337
  /// that indicates how instruction selection should deal with the load /
3338
  /// store / maskedload / maskedstore.
3339
  ///
3340
  /// The first dimension is the value_type for the reference. The second
3341
  /// dimension represents the various modes for load store.
3342
  uint16_t IndexedModeActions[MVT::VALUETYPE_SIZE][ISD::LAST_INDEXED_MODE];
3343
 
3344
  /// For each condition code (ISD::CondCode) keep a LegalizeAction that
3345
  /// indicates how instruction selection should deal with the condition code.
3346
  ///
3347
  /// Because each CC action takes up 4 bits, we need to have the array size be
3348
  /// large enough to fit all of the value types. This can be done by rounding
3349
  /// up the MVT::VALUETYPE_SIZE value to the next multiple of 8.
3350
  uint32_t CondCodeActions[ISD::SETCC_INVALID][(MVT::VALUETYPE_SIZE + 7) / 8];
3351
 
3352
  ValueTypeActionImpl ValueTypeActions;
3353
 
3354
private:
3355
  /// Targets can specify ISD nodes that they would like PerformDAGCombine
3356
  /// callbacks for by calling setTargetDAGCombine(), which sets a bit in this
3357
  /// array.
3358
  unsigned char
3359
  TargetDAGCombineArray[(ISD::BUILTIN_OP_END+CHAR_BIT-1)/CHAR_BIT];
3360
 
3361
  /// For operations that must be promoted to a specific type, this holds the
3362
  /// destination type.  This map should be sparse, so don't hold it as an
3363
  /// array.
3364
  ///
3365
  /// Targets add entries to this map with AddPromotedToType(..), clients access
3366
  /// this with getTypeToPromoteTo(..).
3367
  std::map<std::pair<unsigned, MVT::SimpleValueType>, MVT::SimpleValueType>
3368
    PromoteToType;
3369
 
3370
  /// Stores the name each libcall.
3371
  const char *LibcallRoutineNames[RTLIB::UNKNOWN_LIBCALL + 1];
3372
 
3373
  /// The ISD::CondCode that should be used to test the result of each of the
3374
  /// comparison libcall against zero.
3375
  ISD::CondCode CmpLibcallCCs[RTLIB::UNKNOWN_LIBCALL];
3376
 
3377
  /// Stores the CallingConv that should be used for each libcall.
3378
  CallingConv::ID LibcallCallingConvs[RTLIB::UNKNOWN_LIBCALL];
3379
 
3380
  /// Set default libcall names and calling conventions.
3381
  void InitLibcalls(const Triple &TT);
3382
 
3383
  /// The bits of IndexedModeActions used to store the legalisation actions
3384
  /// We store the data as   | ML | MS |  L |  S | each taking 4 bits.
3385
  enum IndexedModeActionsBits {
3386
    IMAB_Store = 0,
3387
    IMAB_Load = 4,
3388
    IMAB_MaskedStore = 8,
3389
    IMAB_MaskedLoad = 12
3390
  };
3391
 
3392
  void setIndexedModeAction(unsigned IdxMode, MVT VT, unsigned Shift,
3393
                            LegalizeAction Action) {
3394
    assert(VT.isValid() && IdxMode < ISD::LAST_INDEXED_MODE &&
3395
           (unsigned)Action < 0xf && "Table isn't big enough!");
3396
    unsigned Ty = (unsigned)VT.SimpleTy;
3397
    IndexedModeActions[Ty][IdxMode] &= ~(0xf << Shift);
3398
    IndexedModeActions[Ty][IdxMode] |= ((uint16_t)Action) << Shift;
3399
  }
3400
 
3401
  LegalizeAction getIndexedModeAction(unsigned IdxMode, MVT VT,
3402
                                      unsigned Shift) const {
3403
    assert(IdxMode < ISD::LAST_INDEXED_MODE && VT.isValid() &&
3404
           "Table isn't big enough!");
3405
    unsigned Ty = (unsigned)VT.SimpleTy;
3406
    return (LegalizeAction)((IndexedModeActions[Ty][IdxMode] >> Shift) & 0xf);
3407
  }
3408
 
3409
protected:
3410
  /// Return true if the extension represented by \p I is free.
3411
  /// \pre \p I is a sign, zero, or fp extension and
3412
  ///      is[Z|FP]ExtFree of the related types is not true.
3413
  virtual bool isExtFreeImpl(const Instruction *I) const { return false; }
3414
 
3415
  /// Depth that GatherAllAliases should should continue looking for chain
3416
  /// dependencies when trying to find a more preferable chain. As an
3417
  /// approximation, this should be more than the number of consecutive stores
3418
  /// expected to be merged.
3419
  unsigned GatherAllAliasesMaxDepth;
3420
 
3421
  /// \brief Specify maximum number of store instructions per memset call.
3422
  ///
3423
  /// When lowering \@llvm.memset this field specifies the maximum number of
3424
  /// store operations that may be substituted for the call to memset. Targets
3425
  /// must set this value based on the cost threshold for that target. Targets
3426
  /// should assume that the memset will be done using as many of the largest
3427
  /// store operations first, followed by smaller ones, if necessary, per
3428
  /// alignment restrictions. For example, storing 9 bytes on a 32-bit machine
3429
  /// with 16-bit alignment would result in four 2-byte stores and one 1-byte
3430
  /// store.  This only applies to setting a constant array of a constant size.
3431
  unsigned MaxStoresPerMemset;
3432
  /// Likewise for functions with the OptSize attribute.
3433
  unsigned MaxStoresPerMemsetOptSize;
3434
 
3435
  /// \brief Specify maximum number of store instructions per memcpy call.
3436
  ///
3437
  /// When lowering \@llvm.memcpy this field specifies the maximum number of
3438
  /// store operations that may be substituted for a call to memcpy. Targets
3439
  /// must set this value based on the cost threshold for that target. Targets
3440
  /// should assume that the memcpy will be done using as many of the largest
3441
  /// store operations first, followed by smaller ones, if necessary, per
3442
  /// alignment restrictions. For example, storing 7 bytes on a 32-bit machine
3443
  /// with 32-bit alignment would result in one 4-byte store, a one 2-byte store
3444
  /// and one 1-byte store. This only applies to copying a constant array of
3445
  /// constant size.
3446
  unsigned MaxStoresPerMemcpy;
3447
  /// Likewise for functions with the OptSize attribute.
3448
  unsigned MaxStoresPerMemcpyOptSize;
3449
  /// \brief Specify max number of store instructions to glue in inlined memcpy.
3450
  ///
3451
  /// When memcpy is inlined based on MaxStoresPerMemcpy, specify maximum number
3452
  /// of store instructions to keep together. This helps in pairing and
3453
  //  vectorization later on.
3454
  unsigned MaxGluedStoresPerMemcpy = 0;
3455
 
3456
  /// \brief Specify maximum number of load instructions per memcmp call.
3457
  ///
3458
  /// When lowering \@llvm.memcmp this field specifies the maximum number of
3459
  /// pairs of load operations that may be substituted for a call to memcmp.
3460
  /// Targets must set this value based on the cost threshold for that target.
3461
  /// Targets should assume that the memcmp will be done using as many of the
3462
  /// largest load operations first, followed by smaller ones, if necessary, per
3463
  /// alignment restrictions. For example, loading 7 bytes on a 32-bit machine
3464
  /// with 32-bit alignment would result in one 4-byte load, a one 2-byte load
3465
  /// and one 1-byte load. This only applies to copying a constant array of
3466
  /// constant size.
3467
  unsigned MaxLoadsPerMemcmp;
3468
  /// Likewise for functions with the OptSize attribute.
3469
  unsigned MaxLoadsPerMemcmpOptSize;
3470
 
3471
  /// \brief Specify maximum number of store instructions per memmove call.
3472
  ///
3473
  /// When lowering \@llvm.memmove this field specifies the maximum number of
3474
  /// store instructions that may be substituted for a call to memmove. Targets
3475
  /// must set this value based on the cost threshold for that target. Targets
3476
  /// should assume that the memmove will be done using as many of the largest
3477
  /// store operations first, followed by smaller ones, if necessary, per
3478
  /// alignment restrictions. For example, moving 9 bytes on a 32-bit machine
3479
  /// with 8-bit alignment would result in nine 1-byte stores.  This only
3480
  /// applies to copying a constant array of constant size.
3481
  unsigned MaxStoresPerMemmove;
3482
  /// Likewise for functions with the OptSize attribute.
3483
  unsigned MaxStoresPerMemmoveOptSize;
3484
 
3485
  /// Tells the code generator that select is more expensive than a branch if
3486
  /// the branch is usually predicted right.
3487
  bool PredictableSelectIsExpensive;
3488
 
3489
  /// \see enableExtLdPromotion.
3490
  bool EnableExtLdPromotion;
3491
 
3492
  /// Return true if the value types that can be represented by the specified
3493
  /// register class are all legal.
3494
  bool isLegalRC(const TargetRegisterInfo &TRI,
3495
                 const TargetRegisterClass &RC) const;
3496
 
3497
  /// Replace/modify any TargetFrameIndex operands with a targte-dependent
3498
  /// sequence of memory operands that is recognized by PrologEpilogInserter.
3499
  MachineBasicBlock *emitPatchPoint(MachineInstr &MI,
3500
                                    MachineBasicBlock *MBB) const;
3501
 
3502
  bool IsStrictFPEnabled;
3503
};
3504
 
3505
/// This class defines information used to lower LLVM code to legal SelectionDAG
3506
/// operators that the target instruction selector can accept natively.
3507
///
3508
/// This class also defines callbacks that targets must implement to lower
3509
/// target-specific constructs to SelectionDAG operators.
3510
class TargetLowering : public TargetLoweringBase {
3511
public:
3512
  struct DAGCombinerInfo;
3513
  struct MakeLibCallOptions;
3514
 
3515
  TargetLowering(const TargetLowering &) = delete;
3516
  TargetLowering &operator=(const TargetLowering &) = delete;
3517
 
3518
  explicit TargetLowering(const TargetMachine &TM);
3519
 
3520
  bool isPositionIndependent() const;
3521
 
3522
  virtual bool isSDNodeSourceOfDivergence(const SDNode *N,
3523
                                          FunctionLoweringInfo *FLI,
3524
                                          LegacyDivergenceAnalysis *DA) const {
3525
    return false;
3526
  }
3527
 
3528
  // Lets target to control the following reassociation of operands: (op (op x,
3529
  // c1), y) -> (op (op x, y), c1) where N0 is (op x, c1) and N1 is y. By
3530
  // default consider profitable any case where N0 has single use.  This
3531
  // behavior reflects the condition replaced by this target hook call in the
3532
  // DAGCombiner.  Any particular target can implement its own heuristic to
3533
  // restrict common combiner.
3534
  virtual bool isReassocProfitable(SelectionDAG &DAG, SDValue N0,
3535
                                   SDValue N1) const {
3536
    return N0.hasOneUse();
3537
  }
3538
 
3539
  virtual bool isSDNodeAlwaysUniform(const SDNode * N) const {
3540
    return false;
3541
  }
3542
 
3543
  /// Returns true by value, base pointer and offset pointer and addressing mode
3544
  /// by reference if the node's address can be legally represented as
3545
  /// pre-indexed load / store address.
3546
  virtual bool getPreIndexedAddressParts(SDNode * /*N*/, SDValue &/*Base*/,
3547
                                         SDValue &/*Offset*/,
3548
                                         ISD::MemIndexedMode &/*AM*/,
3549
                                         SelectionDAG &/*DAG*/) const {
3550
    return false;
3551
  }
3552
 
3553
  /// Returns true by value, base pointer and offset pointer and addressing mode
3554
  /// by reference if this node can be combined with a load / store to form a
3555
  /// post-indexed load / store.
3556
  virtual bool getPostIndexedAddressParts(SDNode * /*N*/, SDNode * /*Op*/,
3557
                                          SDValue &/*Base*/,
3558
                                          SDValue &/*Offset*/,
3559
                                          ISD::MemIndexedMode &/*AM*/,
3560
                                          SelectionDAG &/*DAG*/) const {
3561
    return false;
3562
  }
3563
 
3564
  /// Returns true if the specified base+offset is a legal indexed addressing
3565
  /// mode for this target. \p MI is the load or store instruction that is being
3566
  /// considered for transformation.
3567
  virtual bool isIndexingLegal(MachineInstr &MI, Register Base, Register Offset,
3568
                               bool IsPre, MachineRegisterInfo &MRI) const {
3569
    return false;
3570
  }
3571
 
3572
  /// Return the entry encoding for a jump table in the current function.  The
3573
  /// returned value is a member of the MachineJumpTableInfo::JTEntryKind enum.
3574
  virtual unsigned getJumpTableEncoding() const;
3575
 
3576
  virtual const MCExpr *
3577
  LowerCustomJumpTableEntry(const MachineJumpTableInfo * /*MJTI*/,
3578
                            const MachineBasicBlock * /*MBB*/, unsigned /*uid*/,
3579
                            MCContext &/*Ctx*/) const {
3580
    llvm_unreachable("Need to implement this hook if target has custom JTIs");
3581
  }
3582
 
3583
  /// Returns relocation base for the given PIC jumptable.
3584
  virtual SDValue getPICJumpTableRelocBase(SDValue Table,
3585
                                           SelectionDAG &DAG) const;
3586
 
3587
  /// This returns the relocation base for the given PIC jumptable, the same as
3588
  /// getPICJumpTableRelocBase, but as an MCExpr.
3589
  virtual const MCExpr *
3590
  getPICJumpTableRelocBaseExpr(const MachineFunction *MF,
3591
                               unsigned JTI, MCContext &Ctx) const;
3592
 
3593
  /// Return true if folding a constant offset with the given GlobalAddress is
3594
  /// legal.  It is frequently not legal in PIC relocation models.
3595
  virtual bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const;
3596
 
3597
  /// Return true if the operand with index OpNo corresponding to a target
3598
  /// branch, for example, in following case
3599
  ///
3600
  /// call void asm "lea r8, $0\0A\09call qword ptr ${1:P}\0A\09ret",
3601
  ///               "*m,*m,~{r8},~{dirflag},~{fpsr},~{flags}"
3602
  ///                ([9 x i32]* @Arr), void (...)* @sincos_asm)
3603
  ///
3604
  /// the operand $1 (sincos_asm) is target branch in inline asm, but the
3605
  /// operand $0 (Arr) is not.
3606
  virtual bool
3607
  isInlineAsmTargetBranch(const SmallVectorImpl<StringRef> &AsmStrs,
3608
                          unsigned OpNo) const {
3609
    return false;
3610
  }
3611
 
3612
  bool isInTailCallPosition(SelectionDAG &DAG, SDNode *Node,
3613
                            SDValue &Chain) const;
3614
 
3615
  void softenSetCCOperands(SelectionDAG &DAG, EVT VT, SDValue &NewLHS,
3616
                           SDValue &NewRHS, ISD::CondCode &CCCode,
3617
                           const SDLoc &DL, const SDValue OldLHS,
3618
                           const SDValue OldRHS) const;
3619
 
3620
  void softenSetCCOperands(SelectionDAG &DAG, EVT VT, SDValue &NewLHS,
3621
                           SDValue &NewRHS, ISD::CondCode &CCCode,
3622
                           const SDLoc &DL, const SDValue OldLHS,
3623
                           const SDValue OldRHS, SDValue &Chain,
3624
                           bool IsSignaling = false) const;
3625
 
3626
  /// Returns a pair of (return value, chain).
3627
  /// It is an error to pass RTLIB::UNKNOWN_LIBCALL as \p LC.
3628
  std::pair<SDValue, SDValue> makeLibCall(SelectionDAG &DAG, RTLIB::Libcall LC,
3629
                                          EVT RetVT, ArrayRef<SDValue> Ops,
3630
                                          MakeLibCallOptions CallOptions,
3631
                                          const SDLoc &dl,
3632
                                          SDValue Chain = SDValue()) const;
3633
 
3634
  /// Check whether parameters to a call that are passed in callee saved
3635
  /// registers are the same as from the calling function.  This needs to be
3636
  /// checked for tail call eligibility.
3637
  bool parametersInCSRMatch(const MachineRegisterInfo &MRI,
3638
      const uint32_t *CallerPreservedMask,
3639
      const SmallVectorImpl<CCValAssign> &ArgLocs,
3640
      const SmallVectorImpl<SDValue> &OutVals) const;
3641
 
3642
  //===--------------------------------------------------------------------===//
3643
  // TargetLowering Optimization Methods
3644
  //
3645
 
3646
  /// A convenience struct that encapsulates a DAG, and two SDValues for
3647
  /// returning information from TargetLowering to its clients that want to
3648
  /// combine.
3649
  struct TargetLoweringOpt {
3650
    SelectionDAG &DAG;
3651
    bool LegalTys;
3652
    bool LegalOps;
3653
    SDValue Old;
3654
    SDValue New;
3655
 
3656
    explicit TargetLoweringOpt(SelectionDAG &InDAG,
3657
                               bool LT, bool LO) :
3658
      DAG(InDAG), LegalTys(LT), LegalOps(LO) {}
3659
 
3660
    bool LegalTypes() const { return LegalTys; }
3661
    bool LegalOperations() const { return LegalOps; }
3662
 
3663
    bool CombineTo(SDValue O, SDValue N) {
3664
      Old = O;
3665
      New = N;
3666
      return true;
3667
    }
3668
  };
3669
 
3670
  /// Determines the optimal series of memory ops to replace the memset / memcpy.
3671
  /// Return true if the number of memory ops is below the threshold (Limit).
3672
  /// Note that this is always the case when Limit is ~0.
3673
  /// It returns the types of the sequence of memory ops to perform
3674
  /// memset / memcpy by reference.
3675
  virtual bool
3676
  findOptimalMemOpLowering(std::vector<EVT> &MemOps, unsigned Limit,
3677
                           const MemOp &Op, unsigned DstAS, unsigned SrcAS,
3678
                           const AttributeList &FuncAttributes) const;
3679
 
3680
  /// Check to see if the specified operand of the specified instruction is a
3681
  /// constant integer.  If so, check to see if there are any bits set in the
3682
  /// constant that are not demanded.  If so, shrink the constant and return
3683
  /// true.
3684
  bool ShrinkDemandedConstant(SDValue Op, const APInt &DemandedBits,
3685
                              const APInt &DemandedElts,
3686
                              TargetLoweringOpt &TLO) const;
3687
 
3688
  /// Helper wrapper around ShrinkDemandedConstant, demanding all elements.
3689
  bool ShrinkDemandedConstant(SDValue Op, const APInt &DemandedBits,
3690
                              TargetLoweringOpt &TLO) const;
3691
 
3692
  // Target hook to do target-specific const optimization, which is called by
3693
  // ShrinkDemandedConstant. This function should return true if the target
3694
  // doesn't want ShrinkDemandedConstant to further optimize the constant.
3695
  virtual bool targetShrinkDemandedConstant(SDValue Op,
3696
                                            const APInt &DemandedBits,
3697
                                            const APInt &DemandedElts,
3698
                                            TargetLoweringOpt &TLO) const {
3699
    return false;
3700
  }
3701
 
3702
  /// Convert x+y to (VT)((SmallVT)x+(SmallVT)y) if the casts are free.  This
3703
  /// uses isZExtFree and ZERO_EXTEND for the widening cast, but it could be
3704
  /// generalized for targets with other types of implicit widening casts.
3705
  bool ShrinkDemandedOp(SDValue Op, unsigned BitWidth, const APInt &Demanded,
3706
                        TargetLoweringOpt &TLO) const;
3707
 
3708
  /// Look at Op.  At this point, we know that only the DemandedBits bits of the
3709
  /// result of Op are ever used downstream.  If we can use this information to
3710
  /// simplify Op, create a new simplified DAG node and return true, returning
3711
  /// the original and new nodes in Old and New.  Otherwise, analyze the
3712
  /// expression and return a mask of KnownOne and KnownZero bits for the
3713
  /// expression (used to simplify the caller).  The KnownZero/One bits may only
3714
  /// be accurate for those bits in the Demanded masks.
3715
  /// \p AssumeSingleUse When this parameter is true, this function will
3716
  ///    attempt to simplify \p Op even if there are multiple uses.
3717
  ///    Callers are responsible for correctly updating the DAG based on the
3718
  ///    results of this function, because simply replacing replacing TLO.Old
3719
  ///    with TLO.New will be incorrect when this parameter is true and TLO.Old
3720
  ///    has multiple uses.
3721
  bool SimplifyDemandedBits(SDValue Op, const APInt &DemandedBits,
3722
                            const APInt &DemandedElts, KnownBits &Known,
3723
                            TargetLoweringOpt &TLO, unsigned Depth = 0,
3724
                            bool AssumeSingleUse = false) const;
3725
 
3726
  /// Helper wrapper around SimplifyDemandedBits, demanding all elements.
3727
  /// Adds Op back to the worklist upon success.
3728
  bool SimplifyDemandedBits(SDValue Op, const APInt &DemandedBits,
3729
                            KnownBits &Known, TargetLoweringOpt &TLO,
3730
                            unsigned Depth = 0,
3731
                            bool AssumeSingleUse = false) const;
3732
 
3733
  /// Helper wrapper around SimplifyDemandedBits.
3734
  /// Adds Op back to the worklist upon success.
3735
  bool SimplifyDemandedBits(SDValue Op, const APInt &DemandedBits,
3736
                            DAGCombinerInfo &DCI) const;
3737
 
3738
  /// Helper wrapper around SimplifyDemandedBits.
3739
  /// Adds Op back to the worklist upon success.
3740
  bool SimplifyDemandedBits(SDValue Op, const APInt &DemandedBits,
3741
                            const APInt &DemandedElts,
3742
                            DAGCombinerInfo &DCI) const;
3743
 
3744
  /// More limited version of SimplifyDemandedBits that can be used to "look
3745
  /// through" ops that don't contribute to the DemandedBits/DemandedElts -
3746
  /// bitwise ops etc.
3747
  SDValue SimplifyMultipleUseDemandedBits(SDValue Op, const APInt &DemandedBits,
3748
                                          const APInt &DemandedElts,
3749
                                          SelectionDAG &DAG,
3750
                                          unsigned Depth = 0) const;
3751
 
3752
  /// Helper wrapper around SimplifyMultipleUseDemandedBits, demanding all
3753
  /// elements.
3754
  SDValue SimplifyMultipleUseDemandedBits(SDValue Op, const APInt &DemandedBits,
3755
                                          SelectionDAG &DAG,
3756
                                          unsigned Depth = 0) const;
3757
 
3758
  /// Helper wrapper around SimplifyMultipleUseDemandedBits, demanding all
3759
  /// bits from only some vector elements.
3760
  SDValue SimplifyMultipleUseDemandedVectorElts(SDValue Op,
3761
                                                const APInt &DemandedElts,
3762
                                                SelectionDAG &DAG,
3763
                                                unsigned Depth = 0) const;
3764
 
3765
  /// Look at Vector Op. At this point, we know that only the DemandedElts
3766
  /// elements of the result of Op are ever used downstream.  If we can use
3767
  /// this information to simplify Op, create a new simplified DAG node and
3768
  /// return true, storing the original and new nodes in TLO.
3769
  /// Otherwise, analyze the expression and return a mask of KnownUndef and
3770
  /// KnownZero elements for the expression (used to simplify the caller).
3771
  /// The KnownUndef/Zero elements may only be accurate for those bits
3772
  /// in the DemandedMask.
3773
  /// \p AssumeSingleUse When this parameter is true, this function will
3774
  ///    attempt to simplify \p Op even if there are multiple uses.
3775
  ///    Callers are responsible for correctly updating the DAG based on the
3776
  ///    results of this function, because simply replacing replacing TLO.Old
3777
  ///    with TLO.New will be incorrect when this parameter is true and TLO.Old
3778
  ///    has multiple uses.
3779
  bool SimplifyDemandedVectorElts(SDValue Op, const APInt &DemandedEltMask,
3780
                                  APInt &KnownUndef, APInt &KnownZero,
3781
                                  TargetLoweringOpt &TLO, unsigned Depth = 0,
3782
                                  bool AssumeSingleUse = false) const;
3783
 
3784
  /// Helper wrapper around SimplifyDemandedVectorElts.
3785
  /// Adds Op back to the worklist upon success.
3786
  bool SimplifyDemandedVectorElts(SDValue Op, const APInt &DemandedElts,
3787
                                  DAGCombinerInfo &DCI) const;
3788
 
3789
  /// Return true if the target supports simplifying demanded vector elements by
3790
  /// converting them to undefs.
3791
  virtual bool
3792
  shouldSimplifyDemandedVectorElts(SDValue Op,
3793
                                   const TargetLoweringOpt &TLO) const {
3794
    return true;
3795
  }
3796
 
3797
  /// Determine which of the bits specified in Mask are known to be either zero
3798
  /// or one and return them in the KnownZero/KnownOne bitsets. The DemandedElts
3799
  /// argument allows us to only collect the known bits that are shared by the
3800
  /// requested vector elements.
3801
  virtual void computeKnownBitsForTargetNode(const SDValue Op,
3802
                                             KnownBits &Known,
3803
                                             const APInt &DemandedElts,
3804
                                             const SelectionDAG &DAG,
3805
                                             unsigned Depth = 0) const;
3806
 
3807
  /// Determine which of the bits specified in Mask are known to be either zero
3808
  /// or one and return them in the KnownZero/KnownOne bitsets. The DemandedElts
3809
  /// argument allows us to only collect the known bits that are shared by the
3810
  /// requested vector elements. This is for GISel.
3811
  virtual void computeKnownBitsForTargetInstr(GISelKnownBits &Analysis,
3812
                                              Register R, KnownBits &Known,
3813
                                              const APInt &DemandedElts,
3814
                                              const MachineRegisterInfo &MRI,
3815
                                              unsigned Depth = 0) const;
3816
 
3817
  /// Determine the known alignment for the pointer value \p R. This is can
3818
  /// typically be inferred from the number of low known 0 bits. However, for a
3819
  /// pointer with a non-integral address space, the alignment value may be
3820
  /// independent from the known low bits.
3821
  virtual Align computeKnownAlignForTargetInstr(GISelKnownBits &Analysis,
3822
                                                Register R,
3823
                                                const MachineRegisterInfo &MRI,
3824
                                                unsigned Depth = 0) const;
3825
 
3826
  /// Determine which of the bits of FrameIndex \p FIOp are known to be 0.
3827
  /// Default implementation computes low bits based on alignment
3828
  /// information. This should preserve known bits passed into it.
3829
  virtual void computeKnownBitsForFrameIndex(int FIOp,
3830
                                             KnownBits &Known,
3831
                                             const MachineFunction &MF) const;
3832
 
3833
  /// This method can be implemented by targets that want to expose additional
3834
  /// information about sign bits to the DAG Combiner. The DemandedElts
3835
  /// argument allows us to only collect the minimum sign bits that are shared
3836
  /// by the requested vector elements.
3837
  virtual unsigned ComputeNumSignBitsForTargetNode(SDValue Op,
3838
                                                   const APInt &DemandedElts,
3839
                                                   const SelectionDAG &DAG,
3840
                                                   unsigned Depth = 0) const;
3841
 
3842
  /// This method can be implemented by targets that want to expose additional
3843
  /// information about sign bits to GlobalISel combiners. The DemandedElts
3844
  /// argument allows us to only collect the minimum sign bits that are shared
3845
  /// by the requested vector elements.
3846
  virtual unsigned computeNumSignBitsForTargetInstr(GISelKnownBits &Analysis,
3847
                                                    Register R,
3848
                                                    const APInt &DemandedElts,
3849
                                                    const MachineRegisterInfo &MRI,
3850
                                                    unsigned Depth = 0) const;
3851
 
3852
  /// Attempt to simplify any target nodes based on the demanded vector
3853
  /// elements, returning true on success. Otherwise, analyze the expression and
3854
  /// return a mask of KnownUndef and KnownZero elements for the expression
3855
  /// (used to simplify the caller). The KnownUndef/Zero elements may only be
3856
  /// accurate for those bits in the DemandedMask.
3857
  virtual bool SimplifyDemandedVectorEltsForTargetNode(
3858
      SDValue Op, const APInt &DemandedElts, APInt &KnownUndef,
3859
      APInt &KnownZero, TargetLoweringOpt &TLO, unsigned Depth = 0) const;
3860
 
3861
  /// Attempt to simplify any target nodes based on the demanded bits/elts,
3862
  /// returning true on success. Otherwise, analyze the
3863
  /// expression and return a mask of KnownOne and KnownZero bits for the
3864
  /// expression (used to simplify the caller).  The KnownZero/One bits may only
3865
  /// be accurate for those bits in the Demanded masks.
3866
  virtual bool SimplifyDemandedBitsForTargetNode(SDValue Op,
3867
                                                 const APInt &DemandedBits,
3868
                                                 const APInt &DemandedElts,
3869
                                                 KnownBits &Known,
3870
                                                 TargetLoweringOpt &TLO,
3871
                                                 unsigned Depth = 0) const;
3872
 
3873
  /// More limited version of SimplifyDemandedBits that can be used to "look
3874
  /// through" ops that don't contribute to the DemandedBits/DemandedElts -
3875
  /// bitwise ops etc.
3876
  virtual SDValue SimplifyMultipleUseDemandedBitsForTargetNode(
3877
      SDValue Op, const APInt &DemandedBits, const APInt &DemandedElts,
3878
      SelectionDAG &DAG, unsigned Depth) const;
3879
 
3880
  /// Return true if this function can prove that \p Op is never poison
3881
  /// and, if \p PoisonOnly is false, does not have undef bits. The DemandedElts
3882
  /// argument limits the check to the requested vector elements.
3883
  virtual bool isGuaranteedNotToBeUndefOrPoisonForTargetNode(
3884
      SDValue Op, const APInt &DemandedElts, const SelectionDAG &DAG,
3885
      bool PoisonOnly, unsigned Depth) const;
3886
 
3887
  /// Return true if Op can create undef or poison from non-undef & non-poison
3888
  /// operands. The DemandedElts argument limits the check to the requested
3889
  /// vector elements.
3890
  virtual bool
3891
  canCreateUndefOrPoisonForTargetNode(SDValue Op, const APInt &DemandedElts,
3892
                                      const SelectionDAG &DAG, bool PoisonOnly,
3893
                                      bool ConsiderFlags, unsigned Depth) const;
3894
 
3895
  /// Tries to build a legal vector shuffle using the provided parameters
3896
  /// or equivalent variations. The Mask argument maybe be modified as the
3897
  /// function tries different variations.
3898
  /// Returns an empty SDValue if the operation fails.
3899
  SDValue buildLegalVectorShuffle(EVT VT, const SDLoc &DL, SDValue N0,
3900
                                  SDValue N1, MutableArrayRef<int> Mask,
3901
                                  SelectionDAG &DAG) const;
3902
 
3903
  /// This method returns the constant pool value that will be loaded by LD.
3904
  /// NOTE: You must check for implicit extensions of the constant by LD.
3905
  virtual const Constant *getTargetConstantFromLoad(LoadSDNode *LD) const;
3906
 
3907
  /// If \p SNaN is false, \returns true if \p Op is known to never be any
3908
  /// NaN. If \p sNaN is true, returns if \p Op is known to never be a signaling
3909
  /// NaN.
3910
  virtual bool isKnownNeverNaNForTargetNode(SDValue Op,
3911
                                            const SelectionDAG &DAG,
3912
                                            bool SNaN = false,
3913
                                            unsigned Depth = 0) const;
3914
 
3915
  /// Return true if vector \p Op has the same value across all \p DemandedElts,
3916
  /// indicating any elements which may be undef in the output \p UndefElts.
3917
  virtual bool isSplatValueForTargetNode(SDValue Op, const APInt &DemandedElts,
3918
                                         APInt &UndefElts,
3919
                                         const SelectionDAG &DAG,
3920
                                         unsigned Depth = 0) const;
3921
 
3922
  /// Returns true if the given Opc is considered a canonical constant for the
3923
  /// target, which should not be transformed back into a BUILD_VECTOR.
3924
  virtual bool isTargetCanonicalConstantNode(SDValue Op) const {
3925
    return Op.getOpcode() == ISD::SPLAT_VECTOR;
3926
  }
3927
 
3928
  struct DAGCombinerInfo {
3929
    void *DC;  // The DAG Combiner object.
3930
    CombineLevel Level;
3931
    bool CalledByLegalizer;
3932
 
3933
  public:
3934
    SelectionDAG &DAG;
3935
 
3936
    DAGCombinerInfo(SelectionDAG &dag, CombineLevel level,  bool cl, void *dc)
3937
      : DC(dc), Level(level), CalledByLegalizer(cl), DAG(dag) {}
3938
 
3939
    bool isBeforeLegalize() const { return Level == BeforeLegalizeTypes; }
3940
    bool isBeforeLegalizeOps() const { return Level < AfterLegalizeVectorOps; }
3941
    bool isAfterLegalizeDAG() const { return Level >= AfterLegalizeDAG; }
3942
    CombineLevel getDAGCombineLevel() { return Level; }
3943
    bool isCalledByLegalizer() const { return CalledByLegalizer; }
3944
 
3945
    void AddToWorklist(SDNode *N);
3946
    SDValue CombineTo(SDNode *N, ArrayRef<SDValue> To, bool AddTo = true);
3947
    SDValue CombineTo(SDNode *N, SDValue Res, bool AddTo = true);
3948
    SDValue CombineTo(SDNode *N, SDValue Res0, SDValue Res1, bool AddTo = true);
3949
 
3950
    bool recursivelyDeleteUnusedNodes(SDNode *N);
3951
 
3952
    void CommitTargetLoweringOpt(const TargetLoweringOpt &TLO);
3953
  };
3954
 
3955
  /// Return if the N is a constant or constant vector equal to the true value
3956
  /// from getBooleanContents().
3957
  bool isConstTrueVal(SDValue N) const;
3958
 
3959
  /// Return if the N is a constant or constant vector equal to the false value
3960
  /// from getBooleanContents().
3961
  bool isConstFalseVal(SDValue N) const;
3962
 
3963
  /// Return if \p N is a True value when extended to \p VT.
3964
  bool isExtendedTrueVal(const ConstantSDNode *N, EVT VT, bool SExt) const;
3965
 
3966
  /// Try to simplify a setcc built with the specified operands and cc. If it is
3967
  /// unable to simplify it, return a null SDValue.
3968
  SDValue SimplifySetCC(EVT VT, SDValue N0, SDValue N1, ISD::CondCode Cond,
3969
                        bool foldBooleans, DAGCombinerInfo &DCI,
3970
                        const SDLoc &dl) const;
3971
 
3972
  // For targets which wrap address, unwrap for analysis.
3973
  virtual SDValue unwrapAddress(SDValue N) const { return N; }
3974
 
3975
  /// Returns true (and the GlobalValue and the offset) if the node is a
3976
  /// GlobalAddress + offset.
3977
  virtual bool
3978
  isGAPlusOffset(SDNode *N, const GlobalValue* &GA, int64_t &Offset) const;
3979
 
3980
  /// This method will be invoked for all target nodes and for any
3981
  /// target-independent nodes that the target has registered with invoke it
3982
  /// for.
3983
  ///
3984
  /// The semantics are as follows:
3985
  /// Return Value:
3986
  ///   SDValue.Val == 0   - No change was made
3987
  ///   SDValue.Val == N   - N was replaced, is dead, and is already handled.
3988
  ///   otherwise          - N should be replaced by the returned Operand.
3989
  ///
3990
  /// In addition, methods provided by DAGCombinerInfo may be used to perform
3991
  /// more complex transformations.
3992
  ///
3993
  virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const;
3994
 
3995
  /// Return true if it is profitable to move this shift by a constant amount
3996
  /// through its operand, adjusting any immediate operands as necessary to
3997
  /// preserve semantics. This transformation may not be desirable if it
3998
  /// disrupts a particularly auspicious target-specific tree (e.g. bitfield
3999
  /// extraction in AArch64). By default, it returns true.
4000
  ///
4001
  /// @param N the shift node
4002
  /// @param Level the current DAGCombine legalization level.
4003
  virtual bool isDesirableToCommuteWithShift(const SDNode *N,
4004
                                             CombineLevel Level) const {
4005
    return true;
4006
  }
4007
 
4008
  /// Return true if it is profitable to combine an XOR of a logical shift
4009
  /// to create a logical shift of NOT. This transformation may not be desirable
4010
  /// if it disrupts a particularly auspicious target-specific tree (e.g.
4011
  /// BIC on ARM/AArch64). By default, it returns true.
4012
  virtual bool isDesirableToCommuteXorWithShift(const SDNode *N) const {
4013
    return true;
4014
  }
4015
 
4016
  /// Return true if the target has native support for the specified value type
4017
  /// and it is 'desirable' to use the type for the given node type. e.g. On x86
4018
  /// i16 is legal, but undesirable since i16 instruction encodings are longer
4019
  /// and some i16 instructions are slow.
4020
  virtual bool isTypeDesirableForOp(unsigned /*Opc*/, EVT VT) const {
4021
    // By default, assume all legal types are desirable.
4022
    return isTypeLegal(VT);
4023
  }
4024
 
4025
  /// Return true if it is profitable for dag combiner to transform a floating
4026
  /// point op of specified opcode to a equivalent op of an integer
4027
  /// type. e.g. f32 load -> i32 load can be profitable on ARM.
4028
  virtual bool isDesirableToTransformToIntegerOp(unsigned /*Opc*/,
4029
                                                 EVT /*VT*/) const {
4030
    return false;
4031
  }
4032
 
4033
  /// This method query the target whether it is beneficial for dag combiner to
4034
  /// promote the specified node. If true, it should return the desired
4035
  /// promotion type by reference.
4036
  virtual bool IsDesirableToPromoteOp(SDValue /*Op*/, EVT &/*PVT*/) const {
4037
    return false;
4038
  }
4039
 
4040
  /// Return true if the target supports swifterror attribute. It optimizes
4041
  /// loads and stores to reading and writing a specific register.
4042
  virtual bool supportSwiftError() const {
4043
    return false;
4044
  }
4045
 
4046
  /// Return true if the target supports that a subset of CSRs for the given
4047
  /// machine function is handled explicitly via copies.
4048
  virtual bool supportSplitCSR(MachineFunction *MF) const {
4049
    return false;
4050
  }
4051
 
4052
  /// Return true if the target supports kcfi operand bundles.
4053
  virtual bool supportKCFIBundles() const { return false; }
4054
 
4055
  /// Perform necessary initialization to handle a subset of CSRs explicitly
4056
  /// via copies. This function is called at the beginning of instruction
4057
  /// selection.
4058
  virtual void initializeSplitCSR(MachineBasicBlock *Entry) const {
4059
    llvm_unreachable("Not Implemented");
4060
  }
4061
 
4062
  /// Insert explicit copies in entry and exit blocks. We copy a subset of
4063
  /// CSRs to virtual registers in the entry block, and copy them back to
4064
  /// physical registers in the exit blocks. This function is called at the end
4065
  /// of instruction selection.
4066
  virtual void insertCopiesSplitCSR(
4067
      MachineBasicBlock *Entry,
4068
      const SmallVectorImpl<MachineBasicBlock *> &Exits) const {
4069
    llvm_unreachable("Not Implemented");
4070
  }
4071
 
4072
  /// Return the newly negated expression if the cost is not expensive and
4073
  /// set the cost in \p Cost to indicate that if it is cheaper or neutral to
4074
  /// do the negation.
4075
  virtual SDValue getNegatedExpression(SDValue Op, SelectionDAG &DAG,
4076
                                       bool LegalOps, bool OptForSize,
4077
                                       NegatibleCost &Cost,
4078
                                       unsigned Depth = 0) const;
4079
 
4080
  SDValue getCheaperOrNeutralNegatedExpression(
4081
      SDValue Op, SelectionDAG &DAG, bool LegalOps, bool OptForSize,
4082
      const NegatibleCost CostThreshold = NegatibleCost::Neutral,
4083
      unsigned Depth = 0) const {
4084
    NegatibleCost Cost = NegatibleCost::Expensive;
4085
    SDValue Neg =
4086
        getNegatedExpression(Op, DAG, LegalOps, OptForSize, Cost, Depth);
4087
    if (!Neg)
4088
      return SDValue();
4089
 
4090
    if (Cost <= CostThreshold)
4091
      return Neg;
4092
 
4093
    // Remove the new created node to avoid the side effect to the DAG.
4094
    if (Neg->use_empty())
4095
      DAG.RemoveDeadNode(Neg.getNode());
4096
    return SDValue();
4097
  }
4098
 
4099
  /// This is the helper function to return the newly negated expression only
4100
  /// when the cost is cheaper.
4101
  SDValue getCheaperNegatedExpression(SDValue Op, SelectionDAG &DAG,
4102
                                      bool LegalOps, bool OptForSize,
4103
                                      unsigned Depth = 0) const {
4104
    return getCheaperOrNeutralNegatedExpression(Op, DAG, LegalOps, OptForSize,
4105
                                                NegatibleCost::Cheaper, Depth);
4106
  }
4107
 
4108
  /// This is the helper function to return the newly negated expression if
4109
  /// the cost is not expensive.
4110
  SDValue getNegatedExpression(SDValue Op, SelectionDAG &DAG, bool LegalOps,
4111
                               bool OptForSize, unsigned Depth = 0) const {
4112
    NegatibleCost Cost = NegatibleCost::Expensive;
4113
    return getNegatedExpression(Op, DAG, LegalOps, OptForSize, Cost, Depth);
4114
  }
4115
 
4116
  //===--------------------------------------------------------------------===//
4117
  // Lowering methods - These methods must be implemented by targets so that
4118
  // the SelectionDAGBuilder code knows how to lower these.
4119
  //
4120
 
4121
  /// Target-specific splitting of values into parts that fit a register
4122
  /// storing a legal type
4123
  virtual bool splitValueIntoRegisterParts(
4124
      SelectionDAG & DAG, const SDLoc &DL, SDValue Val, SDValue *Parts,
4125
      unsigned NumParts, MVT PartVT, std::optional<CallingConv::ID> CC) const {
4126
    return false;
4127
  }
4128
 
4129
  /// Allows the target to handle physreg-carried dependency
4130
  /// in target-specific way. Used from the ScheduleDAGSDNodes to decide whether
4131
  /// to add the edge to the dependency graph.
4132
  /// Def - input: Selection DAG node defininfg physical register
4133
  /// User - input: Selection DAG node using physical register
4134
  /// Op - input: Number of User operand
4135
  /// PhysReg - inout: set to the physical register if the edge is
4136
  /// necessary, unchanged otherwise
4137
  /// Cost - inout: physical register copy cost.
4138
  /// Returns 'true' is the edge is necessary, 'false' otherwise
4139
  virtual bool checkForPhysRegDependency(SDNode *Def, SDNode *User, unsigned Op,
4140
                                         const TargetRegisterInfo *TRI,
4141
                                         const TargetInstrInfo *TII,
4142
                                         unsigned &PhysReg, int &Cost) const {
4143
    return false;
4144
  }
4145
 
4146
  /// Target-specific combining of register parts into its original value
4147
  virtual SDValue
4148
  joinRegisterPartsIntoValue(SelectionDAG &DAG, const SDLoc &DL,
4149
                             const SDValue *Parts, unsigned NumParts,
4150
                             MVT PartVT, EVT ValueVT,
4151
                             std::optional<CallingConv::ID> CC) const {
4152
    return SDValue();
4153
  }
4154
 
4155
  /// This hook must be implemented to lower the incoming (formal) arguments,
4156
  /// described by the Ins array, into the specified DAG. The implementation
4157
  /// should fill in the InVals array with legal-type argument values, and
4158
  /// return the resulting token chain value.
4159
  virtual SDValue LowerFormalArguments(
4160
      SDValue /*Chain*/, CallingConv::ID /*CallConv*/, bool /*isVarArg*/,
4161
      const SmallVectorImpl<ISD::InputArg> & /*Ins*/, const SDLoc & /*dl*/,
4162
      SelectionDAG & /*DAG*/, SmallVectorImpl<SDValue> & /*InVals*/) const {
4163
    llvm_unreachable("Not Implemented");
4164
  }
4165
 
4166
  /// This structure contains all information that is necessary for lowering
4167
  /// calls. It is passed to TLI::LowerCallTo when the SelectionDAG builder
4168
  /// needs to lower a call, and targets will see this struct in their LowerCall
4169
  /// implementation.
4170
  struct CallLoweringInfo {
4171
    SDValue Chain;
4172
    Type *RetTy = nullptr;
4173
    bool RetSExt           : 1;
4174
    bool RetZExt           : 1;
4175
    bool IsVarArg          : 1;
4176
    bool IsInReg           : 1;
4177
    bool DoesNotReturn     : 1;
4178
    bool IsReturnValueUsed : 1;
4179
    bool IsConvergent      : 1;
4180
    bool IsPatchPoint      : 1;
4181
    bool IsPreallocated : 1;
4182
    bool NoMerge           : 1;
4183
 
4184
    // IsTailCall should be modified by implementations of
4185
    // TargetLowering::LowerCall that perform tail call conversions.
4186
    bool IsTailCall = false;
4187
 
4188
    // Is Call lowering done post SelectionDAG type legalization.
4189
    bool IsPostTypeLegalization = false;
4190
 
4191
    unsigned NumFixedArgs = -1;
4192
    CallingConv::ID CallConv = CallingConv::C;
4193
    SDValue Callee;
4194
    ArgListTy Args;
4195
    SelectionDAG &DAG;
4196
    SDLoc DL;
4197
    const CallBase *CB = nullptr;
4198
    SmallVector<ISD::OutputArg, 32> Outs;
4199
    SmallVector<SDValue, 32> OutVals;
4200
    SmallVector<ISD::InputArg, 32> Ins;
4201
    SmallVector<SDValue, 4> InVals;
4202
    const ConstantInt *CFIType = nullptr;
4203
 
4204
    CallLoweringInfo(SelectionDAG &DAG)
4205
        : RetSExt(false), RetZExt(false), IsVarArg(false), IsInReg(false),
4206
          DoesNotReturn(false), IsReturnValueUsed(true), IsConvergent(false),
4207
          IsPatchPoint(false), IsPreallocated(false), NoMerge(false),
4208
          DAG(DAG) {}
4209
 
4210
    CallLoweringInfo &setDebugLoc(const SDLoc &dl) {
4211
      DL = dl;
4212
      return *this;
4213
    }
4214
 
4215
    CallLoweringInfo &setChain(SDValue InChain) {
4216
      Chain = InChain;
4217
      return *this;
4218
    }
4219
 
4220
    // setCallee with target/module-specific attributes
4221
    CallLoweringInfo &setLibCallee(CallingConv::ID CC, Type *ResultType,
4222
                                   SDValue Target, ArgListTy &&ArgsList) {
4223
      RetTy = ResultType;
4224
      Callee = Target;
4225
      CallConv = CC;
4226
      NumFixedArgs = ArgsList.size();
4227
      Args = std::move(ArgsList);
4228
 
4229
      DAG.getTargetLoweringInfo().markLibCallAttributes(
4230
          &(DAG.getMachineFunction()), CC, Args);
4231
      return *this;
4232
    }
4233
 
4234
    CallLoweringInfo &setCallee(CallingConv::ID CC, Type *ResultType,
4235
                                SDValue Target, ArgListTy &&ArgsList) {
4236
      RetTy = ResultType;
4237
      Callee = Target;
4238
      CallConv = CC;
4239
      NumFixedArgs = ArgsList.size();
4240
      Args = std::move(ArgsList);
4241
      return *this;
4242
    }
4243
 
4244
    CallLoweringInfo &setCallee(Type *ResultType, FunctionType *FTy,
4245
                                SDValue Target, ArgListTy &&ArgsList,
4246
                                const CallBase &Call) {
4247
      RetTy = ResultType;
4248
 
4249
      IsInReg = Call.hasRetAttr(Attribute::InReg);
4250
      DoesNotReturn =
4251
          Call.doesNotReturn() ||
4252
          (!isa<InvokeInst>(Call) && isa<UnreachableInst>(Call.getNextNode()));
4253
      IsVarArg = FTy->isVarArg();
4254
      IsReturnValueUsed = !Call.use_empty();
4255
      RetSExt = Call.hasRetAttr(Attribute::SExt);
4256
      RetZExt = Call.hasRetAttr(Attribute::ZExt);
4257
      NoMerge = Call.hasFnAttr(Attribute::NoMerge);
4258
 
4259
      Callee = Target;
4260
 
4261
      CallConv = Call.getCallingConv();
4262
      NumFixedArgs = FTy->getNumParams();
4263
      Args = std::move(ArgsList);
4264
 
4265
      CB = &Call;
4266
 
4267
      return *this;
4268
    }
4269
 
4270
    CallLoweringInfo &setInRegister(bool Value = true) {
4271
      IsInReg = Value;
4272
      return *this;
4273
    }
4274
 
4275
    CallLoweringInfo &setNoReturn(bool Value = true) {
4276
      DoesNotReturn = Value;
4277
      return *this;
4278
    }
4279
 
4280
    CallLoweringInfo &setVarArg(bool Value = true) {
4281
      IsVarArg = Value;
4282
      return *this;
4283
    }
4284
 
4285
    CallLoweringInfo &setTailCall(bool Value = true) {
4286
      IsTailCall = Value;
4287
      return *this;
4288
    }
4289
 
4290
    CallLoweringInfo &setDiscardResult(bool Value = true) {
4291
      IsReturnValueUsed = !Value;
4292
      return *this;
4293
    }
4294
 
4295
    CallLoweringInfo &setConvergent(bool Value = true) {
4296
      IsConvergent = Value;
4297
      return *this;
4298
    }
4299
 
4300
    CallLoweringInfo &setSExtResult(bool Value = true) {
4301
      RetSExt = Value;
4302
      return *this;
4303
    }
4304
 
4305
    CallLoweringInfo &setZExtResult(bool Value = true) {
4306
      RetZExt = Value;
4307
      return *this;
4308
    }
4309
 
4310
    CallLoweringInfo &setIsPatchPoint(bool Value = true) {
4311
      IsPatchPoint = Value;
4312
      return *this;
4313
    }
4314
 
4315
    CallLoweringInfo &setIsPreallocated(bool Value = true) {
4316
      IsPreallocated = Value;
4317
      return *this;
4318
    }
4319
 
4320
    CallLoweringInfo &setIsPostTypeLegalization(bool Value=true) {
4321
      IsPostTypeLegalization = Value;
4322
      return *this;
4323
    }
4324
 
4325
    CallLoweringInfo &setCFIType(const ConstantInt *Type) {
4326
      CFIType = Type;
4327
      return *this;
4328
    }
4329
 
4330
    ArgListTy &getArgs() {
4331
      return Args;
4332
    }
4333
  };
4334
 
4335
  /// This structure is used to pass arguments to makeLibCall function.
4336
  struct MakeLibCallOptions {
4337
    // By passing type list before soften to makeLibCall, the target hook
4338
    // shouldExtendTypeInLibCall can get the original type before soften.
4339
    ArrayRef<EVT> OpsVTBeforeSoften;
4340
    EVT RetVTBeforeSoften;
4341
    bool IsSExt : 1;
4342
    bool DoesNotReturn : 1;
4343
    bool IsReturnValueUsed : 1;
4344
    bool IsPostTypeLegalization : 1;
4345
    bool IsSoften : 1;
4346
 
4347
    MakeLibCallOptions()
4348
        : IsSExt(false), DoesNotReturn(false), IsReturnValueUsed(true),
4349
          IsPostTypeLegalization(false), IsSoften(false) {}
4350
 
4351
    MakeLibCallOptions &setSExt(bool Value = true) {
4352
      IsSExt = Value;
4353
      return *this;
4354
    }
4355
 
4356
    MakeLibCallOptions &setNoReturn(bool Value = true) {
4357
      DoesNotReturn = Value;
4358
      return *this;
4359
    }
4360
 
4361
    MakeLibCallOptions &setDiscardResult(bool Value = true) {
4362
      IsReturnValueUsed = !Value;
4363
      return *this;
4364
    }
4365
 
4366
    MakeLibCallOptions &setIsPostTypeLegalization(bool Value = true) {
4367
      IsPostTypeLegalization = Value;
4368
      return *this;
4369
    }
4370
 
4371
    MakeLibCallOptions &setTypeListBeforeSoften(ArrayRef<EVT> OpsVT, EVT RetVT,
4372
                                                bool Value = true) {
4373
      OpsVTBeforeSoften = OpsVT;
4374
      RetVTBeforeSoften = RetVT;
4375
      IsSoften = Value;
4376
      return *this;
4377
    }
4378
  };
4379
 
4380
  /// This function lowers an abstract call to a function into an actual call.
4381
  /// This returns a pair of operands.  The first element is the return value
4382
  /// for the function (if RetTy is not VoidTy).  The second element is the
4383
  /// outgoing token chain. It calls LowerCall to do the actual lowering.
4384
  std::pair<SDValue, SDValue> LowerCallTo(CallLoweringInfo &CLI) const;
4385
 
4386
  /// This hook must be implemented to lower calls into the specified
4387
  /// DAG. The outgoing arguments to the call are described by the Outs array,
4388
  /// and the values to be returned by the call are described by the Ins
4389
  /// array. The implementation should fill in the InVals array with legal-type
4390
  /// return values from the call, and return the resulting token chain value.
4391
  virtual SDValue
4392
    LowerCall(CallLoweringInfo &/*CLI*/,
4393
              SmallVectorImpl<SDValue> &/*InVals*/) const {
4394
    llvm_unreachable("Not Implemented");
4395
  }
4396
 
4397
  /// Target-specific cleanup for formal ByVal parameters.
4398
  virtual void HandleByVal(CCState *, unsigned &, Align) const {}
4399
 
4400
  /// This hook should be implemented to check whether the return values
4401
  /// described by the Outs array can fit into the return registers.  If false
4402
  /// is returned, an sret-demotion is performed.
4403
  virtual bool CanLowerReturn(CallingConv::ID /*CallConv*/,
4404
                              MachineFunction &/*MF*/, bool /*isVarArg*/,
4405
               const SmallVectorImpl<ISD::OutputArg> &/*Outs*/,
4406
               LLVMContext &/*Context*/) const
4407
  {
4408
    // Return true by default to get preexisting behavior.
4409
    return true;
4410
  }
4411
 
4412
  /// This hook must be implemented to lower outgoing return values, described
4413
  /// by the Outs array, into the specified DAG. The implementation should
4414
  /// return the resulting token chain value.
4415
  virtual SDValue LowerReturn(SDValue /*Chain*/, CallingConv::ID /*CallConv*/,
4416
                              bool /*isVarArg*/,
4417
                              const SmallVectorImpl<ISD::OutputArg> & /*Outs*/,
4418
                              const SmallVectorImpl<SDValue> & /*OutVals*/,
4419
                              const SDLoc & /*dl*/,
4420
                              SelectionDAG & /*DAG*/) const {
4421
    llvm_unreachable("Not Implemented");
4422
  }
4423
 
4424
  /// Return true if result of the specified node is used by a return node
4425
  /// only. It also compute and return the input chain for the tail call.
4426
  ///
4427
  /// This is used to determine whether it is possible to codegen a libcall as
4428
  /// tail call at legalization time.
4429
  virtual bool isUsedByReturnOnly(SDNode *, SDValue &/*Chain*/) const {
4430
    return false;
4431
  }
4432
 
4433
  /// Return true if the target may be able emit the call instruction as a tail
4434
  /// call. This is used by optimization passes to determine if it's profitable
4435
  /// to duplicate return instructions to enable tailcall optimization.
4436
  virtual bool mayBeEmittedAsTailCall(const CallInst *) const {
4437
    return false;
4438
  }
4439
 
4440
  /// Return the builtin name for the __builtin___clear_cache intrinsic
4441
  /// Default is to invoke the clear cache library call
4442
  virtual const char * getClearCacheBuiltinName() const {
4443
    return "__clear_cache";
4444
  }
4445
 
4446
  /// Return the register ID of the name passed in. Used by named register
4447
  /// global variables extension. There is no target-independent behaviour
4448
  /// so the default action is to bail.
4449
  virtual Register getRegisterByName(const char* RegName, LLT Ty,
4450
                                     const MachineFunction &MF) const {
4451
    report_fatal_error("Named registers not implemented for this target");
4452
  }
4453
 
4454
  /// Return the type that should be used to zero or sign extend a
4455
  /// zeroext/signext integer return value.  FIXME: Some C calling conventions
4456
  /// require the return type to be promoted, but this is not true all the time,
4457
  /// e.g. i1/i8/i16 on x86/x86_64. It is also not necessary for non-C calling
4458
  /// conventions. The frontend should handle this and include all of the
4459
  /// necessary information.
4460
  virtual EVT getTypeForExtReturn(LLVMContext &Context, EVT VT,
4461
                                       ISD::NodeType /*ExtendKind*/) const {
4462
    EVT MinVT = getRegisterType(Context, MVT::i32);
4463
    return VT.bitsLT(MinVT) ? MinVT : VT;
4464
  }
4465
 
4466
  /// For some targets, an LLVM struct type must be broken down into multiple
4467
  /// simple types, but the calling convention specifies that the entire struct
4468
  /// must be passed in a block of consecutive registers.
4469
  virtual bool
4470
  functionArgumentNeedsConsecutiveRegisters(Type *Ty, CallingConv::ID CallConv,
4471
                                            bool isVarArg,
4472
                                            const DataLayout &DL) const {
4473
    return false;
4474
  }
4475
 
4476
  /// For most targets, an LLVM type must be broken down into multiple
4477
  /// smaller types. Usually the halves are ordered according to the endianness
4478
  /// but for some platform that would break. So this method will default to
4479
  /// matching the endianness but can be overridden.
4480
  virtual bool
4481
  shouldSplitFunctionArgumentsAsLittleEndian(const DataLayout &DL) const {
4482
    return DL.isLittleEndian();
4483
  }
4484
 
4485
  /// Returns a 0 terminated array of registers that can be safely used as
4486
  /// scratch registers.
4487
  virtual const MCPhysReg *getScratchRegisters(CallingConv::ID CC) const {
4488
    return nullptr;
4489
  }
4490
 
4491
  /// This callback is used to prepare for a volatile or atomic load.
4492
  /// It takes a chain node as input and returns the chain for the load itself.
4493
  ///
4494
  /// Having a callback like this is necessary for targets like SystemZ,
4495
  /// which allows a CPU to reuse the result of a previous load indefinitely,
4496
  /// even if a cache-coherent store is performed by another CPU.  The default
4497
  /// implementation does nothing.
4498
  virtual SDValue prepareVolatileOrAtomicLoad(SDValue Chain, const SDLoc &DL,
4499
                                              SelectionDAG &DAG) const {
4500
    return Chain;
4501
  }
4502
 
4503
  /// Should SelectionDAG lower an atomic store of the given kind as a normal
4504
  /// StoreSDNode (as opposed to an AtomicSDNode)?  NOTE: The intention is to
4505
  /// eventually migrate all targets to the using StoreSDNodes, but porting is
4506
  /// being done target at a time.
4507
  virtual bool lowerAtomicStoreAsStoreSDNode(const StoreInst &SI) const {
4508
    assert(SI.isAtomic() && "violated precondition");
4509
    return false;
4510
  }
4511
 
4512
  /// Should SelectionDAG lower an atomic load of the given kind as a normal
4513
  /// LoadSDNode (as opposed to an AtomicSDNode)?  NOTE: The intention is to
4514
  /// eventually migrate all targets to the using LoadSDNodes, but porting is
4515
  /// being done target at a time.
4516
  virtual bool lowerAtomicLoadAsLoadSDNode(const LoadInst &LI) const {
4517
    assert(LI.isAtomic() && "violated precondition");
4518
    return false;
4519
  }
4520
 
4521
 
4522
  /// This callback is invoked by the type legalizer to legalize nodes with an
4523
  /// illegal operand type but legal result types.  It replaces the
4524
  /// LowerOperation callback in the type Legalizer.  The reason we can not do
4525
  /// away with LowerOperation entirely is that LegalizeDAG isn't yet ready to
4526
  /// use this callback.
4527
  ///
4528
  /// TODO: Consider merging with ReplaceNodeResults.
4529
  ///
4530
  /// The target places new result values for the node in Results (their number
4531
  /// and types must exactly match those of the original return values of
4532
  /// the node), or leaves Results empty, which indicates that the node is not
4533
  /// to be custom lowered after all.
4534
  /// The default implementation calls LowerOperation.
4535
  virtual void LowerOperationWrapper(SDNode *N,
4536
                                     SmallVectorImpl<SDValue> &Results,
4537
                                     SelectionDAG &DAG) const;
4538
 
4539
  /// This callback is invoked for operations that are unsupported by the
4540
  /// target, which are registered to use 'custom' lowering, and whose defined
4541
  /// values are all legal.  If the target has no operations that require custom
4542
  /// lowering, it need not implement this.  The default implementation of this
4543
  /// aborts.
4544
  virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
4545
 
4546
  /// This callback is invoked when a node result type is illegal for the
4547
  /// target, and the operation was registered to use 'custom' lowering for that
4548
  /// result type.  The target places new result values for the node in Results
4549
  /// (their number and types must exactly match those of the original return
4550
  /// values of the node), or leaves Results empty, which indicates that the
4551
  /// node is not to be custom lowered after all.
4552
  ///
4553
  /// If the target has no operations that require custom lowering, it need not
4554
  /// implement this.  The default implementation aborts.
4555
  virtual void ReplaceNodeResults(SDNode * /*N*/,
4556
                                  SmallVectorImpl<SDValue> &/*Results*/,
4557
                                  SelectionDAG &/*DAG*/) const {
4558
    llvm_unreachable("ReplaceNodeResults not implemented for this target!");
4559
  }
4560
 
4561
  /// This method returns the name of a target specific DAG node.
4562
  virtual const char *getTargetNodeName(unsigned Opcode) const;
4563
 
4564
  /// This method returns a target specific FastISel object, or null if the
4565
  /// target does not support "fast" ISel.
4566
  virtual FastISel *createFastISel(FunctionLoweringInfo &,
4567
                                   const TargetLibraryInfo *) const {
4568
    return nullptr;
4569
  }
4570
 
4571
  bool verifyReturnAddressArgumentIsConstant(SDValue Op,
4572
                                             SelectionDAG &DAG) const;
4573
 
4574
  //===--------------------------------------------------------------------===//
4575
  // Inline Asm Support hooks
4576
  //
4577
 
4578
  /// This hook allows the target to expand an inline asm call to be explicit
4579
  /// llvm code if it wants to.  This is useful for turning simple inline asms
4580
  /// into LLVM intrinsics, which gives the compiler more information about the
4581
  /// behavior of the code.
4582
  virtual bool ExpandInlineAsm(CallInst *) const {
4583
    return false;
4584
  }
4585
 
4586
  enum ConstraintType {
4587
    C_Register,            // Constraint represents specific register(s).
4588
    C_RegisterClass,       // Constraint represents any of register(s) in class.
4589
    C_Memory,              // Memory constraint.
4590
    C_Address,             // Address constraint.
4591
    C_Immediate,           // Requires an immediate.
4592
    C_Other,               // Something else.
4593
    C_Unknown              // Unsupported constraint.
4594
  };
4595
 
4596
  enum ConstraintWeight {
4597
    // Generic weights.
4598
    CW_Invalid  = -1,     // No match.
4599
    CW_Okay     = 0,      // Acceptable.
4600
    CW_Good     = 1,      // Good weight.
4601
    CW_Better   = 2,      // Better weight.
4602
    CW_Best     = 3,      // Best weight.
4603
 
4604
    // Well-known weights.
4605
    CW_SpecificReg  = CW_Okay,    // Specific register operands.
4606
    CW_Register     = CW_Good,    // Register operands.
4607
    CW_Memory       = CW_Better,  // Memory operands.
4608
    CW_Constant     = CW_Best,    // Constant operand.
4609
    CW_Default      = CW_Okay     // Default or don't know type.
4610
  };
4611
 
4612
  /// This contains information for each constraint that we are lowering.
4613
  struct AsmOperandInfo : public InlineAsm::ConstraintInfo {
4614
    /// This contains the actual string for the code, like "m".  TargetLowering
4615
    /// picks the 'best' code from ConstraintInfo::Codes that most closely
4616
    /// matches the operand.
4617
    std::string ConstraintCode;
4618
 
4619
    /// Information about the constraint code, e.g. Register, RegisterClass,
4620
    /// Memory, Other, Unknown.
4621
    TargetLowering::ConstraintType ConstraintType = TargetLowering::C_Unknown;
4622
 
4623
    /// If this is the result output operand or a clobber, this is null,
4624
    /// otherwise it is the incoming operand to the CallInst.  This gets
4625
    /// modified as the asm is processed.
4626
    Value *CallOperandVal = nullptr;
4627
 
4628
    /// The ValueType for the operand value.
4629
    MVT ConstraintVT = MVT::Other;
4630
 
4631
    /// Copy constructor for copying from a ConstraintInfo.
4632
    AsmOperandInfo(InlineAsm::ConstraintInfo Info)
4633
        : InlineAsm::ConstraintInfo(std::move(Info)) {}
4634
 
4635
    /// Return true of this is an input operand that is a matching constraint
4636
    /// like "4".
4637
    bool isMatchingInputConstraint() const;
4638
 
4639
    /// If this is an input matching constraint, this method returns the output
4640
    /// operand it matches.
4641
    unsigned getMatchedOperand() const;
4642
  };
4643
 
4644
  using AsmOperandInfoVector = std::vector<AsmOperandInfo>;
4645
 
4646
  /// Split up the constraint string from the inline assembly value into the
4647
  /// specific constraints and their prefixes, and also tie in the associated
4648
  /// operand values.  If this returns an empty vector, and if the constraint
4649
  /// string itself isn't empty, there was an error parsing.
4650
  virtual AsmOperandInfoVector ParseConstraints(const DataLayout &DL,
4651
                                                const TargetRegisterInfo *TRI,
4652
                                                const CallBase &Call) const;
4653
 
4654
  /// Examine constraint type and operand type and determine a weight value.
4655
  /// The operand object must already have been set up with the operand type.
4656
  virtual ConstraintWeight getMultipleConstraintMatchWeight(
4657
      AsmOperandInfo &info, int maIndex) const;
4658
 
4659
  /// Examine constraint string and operand type and determine a weight value.
4660
  /// The operand object must already have been set up with the operand type.
4661
  virtual ConstraintWeight getSingleConstraintMatchWeight(
4662
      AsmOperandInfo &info, const char *constraint) const;
4663
 
4664
  /// Determines the constraint code and constraint type to use for the specific
4665
  /// AsmOperandInfo, setting OpInfo.ConstraintCode and OpInfo.ConstraintType.
4666
  /// If the actual operand being passed in is available, it can be passed in as
4667
  /// Op, otherwise an empty SDValue can be passed.
4668
  virtual void ComputeConstraintToUse(AsmOperandInfo &OpInfo,
4669
                                      SDValue Op,
4670
                                      SelectionDAG *DAG = nullptr) const;
4671
 
4672
  /// Given a constraint, return the type of constraint it is for this target.
4673
  virtual ConstraintType getConstraintType(StringRef Constraint) const;
4674
 
4675
  /// Given a physical register constraint (e.g.  {edx}), return the register
4676
  /// number and the register class for the register.
4677
  ///
4678
  /// Given a register class constraint, like 'r', if this corresponds directly
4679
  /// to an LLVM register class, return a register of 0 and the register class
4680
  /// pointer.
4681
  ///
4682
  /// This should only be used for C_Register constraints.  On error, this
4683
  /// returns a register number of 0 and a null register class pointer.
4684
  virtual std::pair<unsigned, const TargetRegisterClass *>
4685
  getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
4686
                               StringRef Constraint, MVT VT) const;
4687
 
4688
  virtual unsigned getInlineAsmMemConstraint(StringRef ConstraintCode) const {
4689
    if (ConstraintCode == "m")
4690
      return InlineAsm::Constraint_m;
4691
    if (ConstraintCode == "o")
4692
      return InlineAsm::Constraint_o;
4693
    if (ConstraintCode == "X")
4694
      return InlineAsm::Constraint_X;
4695
    if (ConstraintCode == "p")
4696
      return InlineAsm::Constraint_p;
4697
    return InlineAsm::Constraint_Unknown;
4698
  }
4699
 
4700
  /// Try to replace an X constraint, which matches anything, with another that
4701
  /// has more specific requirements based on the type of the corresponding
4702
  /// operand.  This returns null if there is no replacement to make.
4703
  virtual const char *LowerXConstraint(EVT ConstraintVT) const;
4704
 
4705
  /// Lower the specified operand into the Ops vector.  If it is invalid, don't
4706
  /// add anything to Ops.
4707
  virtual void LowerAsmOperandForConstraint(SDValue Op, std::string &Constraint,
4708
                                            std::vector<SDValue> &Ops,
4709
                                            SelectionDAG &DAG) const;
4710
 
4711
  // Lower custom output constraints. If invalid, return SDValue().
4712
  virtual SDValue LowerAsmOutputForConstraint(SDValue &Chain, SDValue &Flag,
4713
                                              const SDLoc &DL,
4714
                                              const AsmOperandInfo &OpInfo,
4715
                                              SelectionDAG &DAG) const;
4716
 
4717
  // Targets may override this function to collect operands from the CallInst
4718
  // and for example, lower them into the SelectionDAG operands.
4719
  virtual void CollectTargetIntrinsicOperands(const CallInst &I,
4720
                                              SmallVectorImpl<SDValue> &Ops,
4721
                                              SelectionDAG &DAG) const;
4722
 
4723
  //===--------------------------------------------------------------------===//
4724
  // Div utility functions
4725
  //
4726
 
4727
  SDValue BuildSDIV(SDNode *N, SelectionDAG &DAG, bool IsAfterLegalization,
4728
                    SmallVectorImpl<SDNode *> &Created) const;
4729
  SDValue BuildUDIV(SDNode *N, SelectionDAG &DAG, bool IsAfterLegalization,
4730
                    SmallVectorImpl<SDNode *> &Created) const;
4731
 
4732
  /// Targets may override this function to provide custom SDIV lowering for
4733
  /// power-of-2 denominators.  If the target returns an empty SDValue, LLVM
4734
  /// assumes SDIV is expensive and replaces it with a series of other integer
4735
  /// operations.
4736
  virtual SDValue BuildSDIVPow2(SDNode *N, const APInt &Divisor,
4737
                                SelectionDAG &DAG,
4738
                                SmallVectorImpl<SDNode *> &Created) const;
4739
 
4740
  /// Targets may override this function to provide custom SREM lowering for
4741
  /// power-of-2 denominators.  If the target returns an empty SDValue, LLVM
4742
  /// assumes SREM is expensive and replaces it with a series of other integer
4743
  /// operations.
4744
  virtual SDValue BuildSREMPow2(SDNode *N, const APInt &Divisor,
4745
                                SelectionDAG &DAG,
4746
                                SmallVectorImpl<SDNode *> &Created) const;
4747
 
4748
  /// Indicate whether this target prefers to combine FDIVs with the same
4749
  /// divisor. If the transform should never be done, return zero. If the
4750
  /// transform should be done, return the minimum number of divisor uses
4751
  /// that must exist.
4752
  virtual unsigned combineRepeatedFPDivisors() const {
4753
    return 0;
4754
  }
4755
 
4756
  /// Hooks for building estimates in place of slower divisions and square
4757
  /// roots.
4758
 
4759
  /// Return either a square root or its reciprocal estimate value for the input
4760
  /// operand.
4761
  /// \p Enabled is a ReciprocalEstimate enum with value either 'Unspecified' or
4762
  /// 'Enabled' as set by a potential default override attribute.
4763
  /// If \p RefinementSteps is 'Unspecified', the number of Newton-Raphson
4764
  /// refinement iterations required to generate a sufficient (though not
4765
  /// necessarily IEEE-754 compliant) estimate is returned in that parameter.
4766
  /// The boolean UseOneConstNR output is used to select a Newton-Raphson
4767
  /// algorithm implementation that uses either one or two constants.
4768
  /// The boolean Reciprocal is used to select whether the estimate is for the
4769
  /// square root of the input operand or the reciprocal of its square root.
4770
  /// A target may choose to implement its own refinement within this function.
4771
  /// If that's true, then return '0' as the number of RefinementSteps to avoid
4772
  /// any further refinement of the estimate.
4773
  /// An empty SDValue return means no estimate sequence can be created.
4774
  virtual SDValue getSqrtEstimate(SDValue Operand, SelectionDAG &DAG,
4775
                                  int Enabled, int &RefinementSteps,
4776
                                  bool &UseOneConstNR, bool Reciprocal) const {
4777
    return SDValue();
4778
  }
4779
 
4780
  /// Try to convert the fminnum/fmaxnum to a compare/select sequence. This is
4781
  /// required for correctness since InstCombine might have canonicalized a
4782
  /// fcmp+select sequence to a FMINNUM/FMAXNUM intrinsic.  If we were to fall
4783
  /// through to the default expansion/soften to libcall, we might introduce a
4784
  /// link-time dependency on libm into a file that originally did not have one.
4785
  SDValue createSelectForFMINNUM_FMAXNUM(SDNode *Node, SelectionDAG &DAG) const;
4786
 
4787
  /// Return a reciprocal estimate value for the input operand.
4788
  /// \p Enabled is a ReciprocalEstimate enum with value either 'Unspecified' or
4789
  /// 'Enabled' as set by a potential default override attribute.
4790
  /// If \p RefinementSteps is 'Unspecified', the number of Newton-Raphson
4791
  /// refinement iterations required to generate a sufficient (though not
4792
  /// necessarily IEEE-754 compliant) estimate is returned in that parameter.
4793
  /// A target may choose to implement its own refinement within this function.
4794
  /// If that's true, then return '0' as the number of RefinementSteps to avoid
4795
  /// any further refinement of the estimate.
4796
  /// An empty SDValue return means no estimate sequence can be created.
4797
  virtual SDValue getRecipEstimate(SDValue Operand, SelectionDAG &DAG,
4798
                                   int Enabled, int &RefinementSteps) const {
4799
    return SDValue();
4800
  }
4801
 
4802
  /// Return a target-dependent comparison result if the input operand is
4803
  /// suitable for use with a square root estimate calculation. For example, the
4804
  /// comparison may check if the operand is NAN, INF, zero, normal, etc. The
4805
  /// result should be used as the condition operand for a select or branch.
4806
  virtual SDValue getSqrtInputTest(SDValue Operand, SelectionDAG &DAG,
4807
                                   const DenormalMode &Mode) const;
4808
 
4809
  /// Return a target-dependent result if the input operand is not suitable for
4810
  /// use with a square root estimate calculation.
4811
  virtual SDValue getSqrtResultForDenormInput(SDValue Operand,
4812
                                              SelectionDAG &DAG) const {
4813
    return DAG.getConstantFP(0.0, SDLoc(Operand), Operand.getValueType());
4814
  }
4815
 
4816
  //===--------------------------------------------------------------------===//
4817
  // Legalization utility functions
4818
  //
4819
 
4820
  /// Expand a MUL or [US]MUL_LOHI of n-bit values into two or four nodes,
4821
  /// respectively, each computing an n/2-bit part of the result.
4822
  /// \param Result A vector that will be filled with the parts of the result
4823
  ///        in little-endian order.
4824
  /// \param LL Low bits of the LHS of the MUL.  You can use this parameter
4825
  ///        if you want to control how low bits are extracted from the LHS.
4826
  /// \param LH High bits of the LHS of the MUL.  See LL for meaning.
4827
  /// \param RL Low bits of the RHS of the MUL.  See LL for meaning
4828
  /// \param RH High bits of the RHS of the MUL.  See LL for meaning.
4829
  /// \returns true if the node has been expanded, false if it has not
4830
  bool expandMUL_LOHI(unsigned Opcode, EVT VT, const SDLoc &dl, SDValue LHS,
4831
                      SDValue RHS, SmallVectorImpl<SDValue> &Result, EVT HiLoVT,
4832
                      SelectionDAG &DAG, MulExpansionKind Kind,
4833
                      SDValue LL = SDValue(), SDValue LH = SDValue(),
4834
                      SDValue RL = SDValue(), SDValue RH = SDValue()) const;
4835
 
4836
  /// Expand a MUL into two nodes.  One that computes the high bits of
4837
  /// the result and one that computes the low bits.
4838
  /// \param HiLoVT The value type to use for the Lo and Hi nodes.
4839
  /// \param LL Low bits of the LHS of the MUL.  You can use this parameter
4840
  ///        if you want to control how low bits are extracted from the LHS.
4841
  /// \param LH High bits of the LHS of the MUL.  See LL for meaning.
4842
  /// \param RL Low bits of the RHS of the MUL.  See LL for meaning
4843
  /// \param RH High bits of the RHS of the MUL.  See LL for meaning.
4844
  /// \returns true if the node has been expanded. false if it has not
4845
  bool expandMUL(SDNode *N, SDValue &Lo, SDValue &Hi, EVT HiLoVT,
4846
                 SelectionDAG &DAG, MulExpansionKind Kind,
4847
                 SDValue LL = SDValue(), SDValue LH = SDValue(),
4848
                 SDValue RL = SDValue(), SDValue RH = SDValue()) const;
4849
 
4850
  /// Attempt to expand an n-bit div/rem/divrem by constant using a n/2-bit
4851
  /// urem by constant and other arithmetic ops. The n/2-bit urem by constant
4852
  /// will be expanded by DAGCombiner. This is not possible for all constant
4853
  /// divisors.
4854
  /// \param N Node to expand
4855
  /// \param Result A vector that will be filled with the lo and high parts of
4856
  ///        the results. For *DIVREM, this will be the quotient parts followed
4857
  ///        by the remainder parts.
4858
  /// \param HiLoVT The value type to use for the Lo and Hi parts. Should be
4859
  ///        half of VT.
4860
  /// \param LL Low bits of the LHS of the operation. You can use this
4861
  ///        parameter if you want to control how low bits are extracted from
4862
  ///        the LHS.
4863
  /// \param LH High bits of the LHS of the operation. See LL for meaning.
4864
  /// \returns true if the node has been expanded, false if it has not.
4865
  bool expandDIVREMByConstant(SDNode *N, SmallVectorImpl<SDValue> &Result,
4866
                              EVT HiLoVT, SelectionDAG &DAG,
4867
                              SDValue LL = SDValue(),
4868
                              SDValue LH = SDValue()) const;
4869
 
4870
  /// Expand funnel shift.
4871
  /// \param N Node to expand
4872
  /// \returns The expansion if successful, SDValue() otherwise
4873
  SDValue expandFunnelShift(SDNode *N, SelectionDAG &DAG) const;
4874
 
4875
  /// Expand rotations.
4876
  /// \param N Node to expand
4877
  /// \param AllowVectorOps expand vector rotate, this should only be performed
4878
  ///        if the legalization is happening outside of LegalizeVectorOps
4879
  /// \returns The expansion if successful, SDValue() otherwise
4880
  SDValue expandROT(SDNode *N, bool AllowVectorOps, SelectionDAG &DAG) const;
4881
 
4882
  /// Expand shift-by-parts.
4883
  /// \param N Node to expand
4884
  /// \param Lo lower-output-part after conversion
4885
  /// \param Hi upper-output-part after conversion
4886
  void expandShiftParts(SDNode *N, SDValue &Lo, SDValue &Hi,
4887
                        SelectionDAG &DAG) const;
4888
 
4889
  /// Expand float(f32) to SINT(i64) conversion
4890
  /// \param N Node to expand
4891
  /// \param Result output after conversion
4892
  /// \returns True, if the expansion was successful, false otherwise
4893
  bool expandFP_TO_SINT(SDNode *N, SDValue &Result, SelectionDAG &DAG) const;
4894
 
4895
  /// Expand float to UINT conversion
4896
  /// \param N Node to expand
4897
  /// \param Result output after conversion
4898
  /// \param Chain output chain after conversion
4899
  /// \returns True, if the expansion was successful, false otherwise
4900
  bool expandFP_TO_UINT(SDNode *N, SDValue &Result, SDValue &Chain,
4901
                        SelectionDAG &DAG) const;
4902
 
4903
  /// Expand UINT(i64) to double(f64) conversion
4904
  /// \param N Node to expand
4905
  /// \param Result output after conversion
4906
  /// \param Chain output chain after conversion
4907
  /// \returns True, if the expansion was successful, false otherwise
4908
  bool expandUINT_TO_FP(SDNode *N, SDValue &Result, SDValue &Chain,
4909
                        SelectionDAG &DAG) const;
4910
 
4911
  /// Expand fminnum/fmaxnum into fminnum_ieee/fmaxnum_ieee with quieted inputs.
4912
  SDValue expandFMINNUM_FMAXNUM(SDNode *N, SelectionDAG &DAG) const;
4913
 
4914
  /// Expand FP_TO_[US]INT_SAT into FP_TO_[US]INT and selects or min/max.
4915
  /// \param N Node to expand
4916
  /// \returns The expansion result
4917
  SDValue expandFP_TO_INT_SAT(SDNode *N, SelectionDAG &DAG) const;
4918
 
4919
  /// Expand check for floating point class.
4920
  /// \param ResultVT The type of intrinsic call result.
4921
  /// \param Op The tested value.
4922
  /// \param Test The test to perform.
4923
  /// \param Flags The optimization flags.
4924
  /// \returns The expansion result or SDValue() if it fails.
4925
  SDValue expandIS_FPCLASS(EVT ResultVT, SDValue Op, unsigned Test,
4926
                           SDNodeFlags Flags, const SDLoc &DL,
4927
                           SelectionDAG &DAG) const;
4928
 
4929
  /// Expand CTPOP nodes. Expands vector/scalar CTPOP nodes,
4930
  /// vector nodes can only succeed if all operations are legal/custom.
4931
  /// \param N Node to expand
4932
  /// \returns The expansion result or SDValue() if it fails.
4933
  SDValue expandCTPOP(SDNode *N, SelectionDAG &DAG) const;
4934
 
4935
  /// Expand VP_CTPOP nodes.
4936
  /// \returns The expansion result or SDValue() if it fails.
4937
  SDValue expandVPCTPOP(SDNode *N, SelectionDAG &DAG) const;
4938
 
4939
  /// Expand CTLZ/CTLZ_ZERO_UNDEF nodes. Expands vector/scalar CTLZ nodes,
4940
  /// vector nodes can only succeed if all operations are legal/custom.
4941
  /// \param N Node to expand
4942
  /// \returns The expansion result or SDValue() if it fails.
4943
  SDValue expandCTLZ(SDNode *N, SelectionDAG &DAG) const;
4944
 
4945
  /// Expand VP_CTLZ/VP_CTLZ_ZERO_UNDEF nodes.
4946
  /// \param N Node to expand
4947
  /// \returns The expansion result or SDValue() if it fails.
4948
  SDValue expandVPCTLZ(SDNode *N, SelectionDAG &DAG) const;
4949
 
4950
  /// Expand CTTZ via Table Lookup.
4951
  /// \param N Node to expand
4952
  /// \returns The expansion result or SDValue() if it fails.
4953
  SDValue CTTZTableLookup(SDNode *N, SelectionDAG &DAG, const SDLoc &DL, EVT VT,
4954
                          SDValue Op, unsigned NumBitsPerElt) const;
4955
 
4956
  /// Expand CTTZ/CTTZ_ZERO_UNDEF nodes. Expands vector/scalar CTTZ nodes,
4957
  /// vector nodes can only succeed if all operations are legal/custom.
4958
  /// \param N Node to expand
4959
  /// \returns The expansion result or SDValue() if it fails.
4960
  SDValue expandCTTZ(SDNode *N, SelectionDAG &DAG) const;
4961
 
4962
  /// Expand VP_CTTZ/VP_CTTZ_ZERO_UNDEF nodes.
4963
  /// \param N Node to expand
4964
  /// \returns The expansion result or SDValue() if it fails.
4965
  SDValue expandVPCTTZ(SDNode *N, SelectionDAG &DAG) const;
4966
 
4967
  /// Expand ABS nodes. Expands vector/scalar ABS nodes,
4968
  /// vector nodes can only succeed if all operations are legal/custom.
4969
  /// (ABS x) -> (XOR (ADD x, (SRA x, type_size)), (SRA x, type_size))
4970
  /// \param N Node to expand
4971
  /// \param IsNegative indicate negated abs
4972
  /// \returns The expansion result or SDValue() if it fails.
4973
  SDValue expandABS(SDNode *N, SelectionDAG &DAG,
4974
                    bool IsNegative = false) const;
4975
 
4976
  /// Expand BSWAP nodes. Expands scalar/vector BSWAP nodes with i16/i32/i64
4977
  /// scalar types. Returns SDValue() if expand fails.
4978
  /// \param N Node to expand
4979
  /// \returns The expansion result or SDValue() if it fails.
4980
  SDValue expandBSWAP(SDNode *N, SelectionDAG &DAG) const;
4981
 
4982
  /// Expand VP_BSWAP nodes. Expands VP_BSWAP nodes with
4983
  /// i16/i32/i64 scalar types. Returns SDValue() if expand fails. \param N Node
4984
  /// to expand \returns The expansion result or SDValue() if it fails.
4985
  SDValue expandVPBSWAP(SDNode *N, SelectionDAG &DAG) const;
4986
 
4987
  /// Expand BITREVERSE nodes. Expands scalar/vector BITREVERSE nodes.
4988
  /// Returns SDValue() if expand fails.
4989
  /// \param N Node to expand
4990
  /// \returns The expansion result or SDValue() if it fails.
4991
  SDValue expandBITREVERSE(SDNode *N, SelectionDAG &DAG) const;
4992
 
4993
  /// Expand VP_BITREVERSE nodes. Expands VP_BITREVERSE nodes with
4994
  /// i8/i16/i32/i64 scalar types. \param N Node to expand \returns The
4995
  /// expansion result or SDValue() if it fails.
4996
  SDValue expandVPBITREVERSE(SDNode *N, SelectionDAG &DAG) const;
4997
 
4998
  /// Turn load of vector type into a load of the individual elements.
4999
  /// \param LD load to expand
5000
  /// \returns BUILD_VECTOR and TokenFactor nodes.
5001
  std::pair<SDValue, SDValue> scalarizeVectorLoad(LoadSDNode *LD,
5002
                                                  SelectionDAG &DAG) const;
5003
 
5004
  // Turn a store of a vector type into stores of the individual elements.
5005
  /// \param ST Store with a vector value type
5006
  /// \returns TokenFactor of the individual store chains.
5007
  SDValue scalarizeVectorStore(StoreSDNode *ST, SelectionDAG &DAG) const;
5008
 
5009
  /// Expands an unaligned load to 2 half-size loads for an integer, and
5010
  /// possibly more for vectors.
5011
  std::pair<SDValue, SDValue> expandUnalignedLoad(LoadSDNode *LD,
5012
                                                  SelectionDAG &DAG) const;
5013
 
5014
  /// Expands an unaligned store to 2 half-size stores for integer values, and
5015
  /// possibly more for vectors.
5016
  SDValue expandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG) const;
5017
 
5018
  /// Increments memory address \p Addr according to the type of the value
5019
  /// \p DataVT that should be stored. If the data is stored in compressed
5020
  /// form, the memory address should be incremented according to the number of
5021
  /// the stored elements. This number is equal to the number of '1's bits
5022
  /// in the \p Mask.
5023
  /// \p DataVT is a vector type. \p Mask is a vector value.
5024
  /// \p DataVT and \p Mask have the same number of vector elements.
5025
  SDValue IncrementMemoryAddress(SDValue Addr, SDValue Mask, const SDLoc &DL,
5026
                                 EVT DataVT, SelectionDAG &DAG,
5027
                                 bool IsCompressedMemory) const;
5028
 
5029
  /// Get a pointer to vector element \p Idx located in memory for a vector of
5030
  /// type \p VecVT starting at a base address of \p VecPtr. If \p Idx is out of
5031
  /// bounds the returned pointer is unspecified, but will be within the vector
5032
  /// bounds.
5033
  SDValue getVectorElementPointer(SelectionDAG &DAG, SDValue VecPtr, EVT VecVT,
5034
                                  SDValue Index) const;
5035
 
5036
  /// Get a pointer to a sub-vector of type \p SubVecVT at index \p Idx located
5037
  /// in memory for a vector of type \p VecVT starting at a base address of
5038
  /// \p VecPtr. If \p Idx plus the size of \p SubVecVT is out of bounds the
5039
  /// returned pointer is unspecified, but the value returned will be such that
5040
  /// the entire subvector would be within the vector bounds.
5041
  SDValue getVectorSubVecPointer(SelectionDAG &DAG, SDValue VecPtr, EVT VecVT,
5042
                                 EVT SubVecVT, SDValue Index) const;
5043
 
5044
  /// Method for building the DAG expansion of ISD::[US][MIN|MAX]. This
5045
  /// method accepts integers as its arguments.
5046
  SDValue expandIntMINMAX(SDNode *Node, SelectionDAG &DAG) const;
5047
 
5048
  /// Method for building the DAG expansion of ISD::[US][ADD|SUB]SAT. This
5049
  /// method accepts integers as its arguments.
5050
  SDValue expandAddSubSat(SDNode *Node, SelectionDAG &DAG) const;
5051
 
5052
  /// Method for building the DAG expansion of ISD::[US]SHLSAT. This
5053
  /// method accepts integers as its arguments.
5054
  SDValue expandShlSat(SDNode *Node, SelectionDAG &DAG) const;
5055
 
5056
  /// Method for building the DAG expansion of ISD::[U|S]MULFIX[SAT]. This
5057
  /// method accepts integers as its arguments.
5058
  SDValue expandFixedPointMul(SDNode *Node, SelectionDAG &DAG) const;
5059
 
5060
  /// Method for building the DAG expansion of ISD::[US]DIVFIX[SAT]. This
5061
  /// method accepts integers as its arguments.
5062
  /// Note: This method may fail if the division could not be performed
5063
  /// within the type. Clients must retry with a wider type if this happens.
5064
  SDValue expandFixedPointDiv(unsigned Opcode, const SDLoc &dl,
5065
                              SDValue LHS, SDValue RHS,
5066
                              unsigned Scale, SelectionDAG &DAG) const;
5067
 
5068
  /// Method for building the DAG expansion of ISD::U(ADD|SUB)O. Expansion
5069
  /// always suceeds and populates the Result and Overflow arguments.
5070
  void expandUADDSUBO(SDNode *Node, SDValue &Result, SDValue &Overflow,
5071
                      SelectionDAG &DAG) const;
5072
 
5073
  /// Method for building the DAG expansion of ISD::S(ADD|SUB)O. Expansion
5074
  /// always suceeds and populates the Result and Overflow arguments.
5075
  void expandSADDSUBO(SDNode *Node, SDValue &Result, SDValue &Overflow,
5076
                      SelectionDAG &DAG) const;
5077
 
5078
  /// Method for building the DAG expansion of ISD::[US]MULO. Returns whether
5079
  /// expansion was successful and populates the Result and Overflow arguments.
5080
  bool expandMULO(SDNode *Node, SDValue &Result, SDValue &Overflow,
5081
                  SelectionDAG &DAG) const;
5082
 
5083
  /// Expand a VECREDUCE_* into an explicit calculation. If Count is specified,
5084
  /// only the first Count elements of the vector are used.
5085
  SDValue expandVecReduce(SDNode *Node, SelectionDAG &DAG) const;
5086
 
5087
  /// Expand a VECREDUCE_SEQ_* into an explicit ordered calculation.
5088
  SDValue expandVecReduceSeq(SDNode *Node, SelectionDAG &DAG) const;
5089
 
5090
  /// Expand an SREM or UREM using SDIV/UDIV or SDIVREM/UDIVREM, if legal.
5091
  /// Returns true if the expansion was successful.
5092
  bool expandREM(SDNode *Node, SDValue &Result, SelectionDAG &DAG) const;
5093
 
5094
  /// Method for building the DAG expansion of ISD::VECTOR_SPLICE. This
5095
  /// method accepts vectors as its arguments.
5096
  SDValue expandVectorSplice(SDNode *Node, SelectionDAG &DAG) const;
5097
 
5098
  /// Legalize a SETCC or VP_SETCC with given LHS and RHS and condition code CC
5099
  /// on the current target. A VP_SETCC will additionally be given a Mask
5100
  /// and/or EVL not equal to SDValue().
5101
  ///
5102
  /// If the SETCC has been legalized using AND / OR, then the legalized node
5103
  /// will be stored in LHS. RHS and CC will be set to SDValue(). NeedInvert
5104
  /// will be set to false. This will also hold if the VP_SETCC has been
5105
  /// legalized using VP_AND / VP_OR.
5106
  ///
5107
  /// If the SETCC / VP_SETCC has been legalized by using
5108
  /// getSetCCSwappedOperands(), then the values of LHS and RHS will be
5109
  /// swapped, CC will be set to the new condition, and NeedInvert will be set
5110
  /// to false.
5111
  ///
5112
  /// If the SETCC / VP_SETCC has been legalized using the inverse condcode,
5113
  /// then LHS and RHS will be unchanged, CC will set to the inverted condcode,
5114
  /// and NeedInvert will be set to true. The caller must invert the result of
5115
  /// the SETCC with SelectionDAG::getLogicalNOT() or take equivalent action to
5116
  /// swap the effect of a true/false result.
5117
  ///
5118
  /// \returns true if the SETCC / VP_SETCC has been legalized, false if it
5119
  /// hasn't.
5120
  bool LegalizeSetCCCondCode(SelectionDAG &DAG, EVT VT, SDValue &LHS,
5121
                             SDValue &RHS, SDValue &CC, SDValue Mask,
5122
                             SDValue EVL, bool &NeedInvert, const SDLoc &dl,
5123
                             SDValue &Chain, bool IsSignaling = false) const;
5124
 
5125
  //===--------------------------------------------------------------------===//
5126
  // Instruction Emitting Hooks
5127
  //
5128
 
5129
  /// This method should be implemented by targets that mark instructions with
5130
  /// the 'usesCustomInserter' flag.  These instructions are special in various
5131
  /// ways, which require special support to insert.  The specified MachineInstr
5132
  /// is created but not inserted into any basic blocks, and this method is
5133
  /// called to expand it into a sequence of instructions, potentially also
5134
  /// creating new basic blocks and control flow.
5135
  /// As long as the returned basic block is different (i.e., we created a new
5136
  /// one), the custom inserter is free to modify the rest of \p MBB.
5137
  virtual MachineBasicBlock *
5138
  EmitInstrWithCustomInserter(MachineInstr &MI, MachineBasicBlock *MBB) const;
5139
 
5140
  /// This method should be implemented by targets that mark instructions with
5141
  /// the 'hasPostISelHook' flag. These instructions must be adjusted after
5142
  /// instruction selection by target hooks.  e.g. To fill in optional defs for
5143
  /// ARM 's' setting instructions.
5144
  virtual void AdjustInstrPostInstrSelection(MachineInstr &MI,
5145
                                             SDNode *Node) const;
5146
 
5147
  /// If this function returns true, SelectionDAGBuilder emits a
5148
  /// LOAD_STACK_GUARD node when it is lowering Intrinsic::stackprotector.
5149
  virtual bool useLoadStackGuardNode() const {
5150
    return false;
5151
  }
5152
 
5153
  virtual SDValue emitStackGuardXorFP(SelectionDAG &DAG, SDValue Val,
5154
                                      const SDLoc &DL) const {
5155
    llvm_unreachable("not implemented for this target");
5156
  }
5157
 
5158
  /// Lower TLS global address SDNode for target independent emulated TLS model.
5159
  virtual SDValue LowerToTLSEmulatedModel(const GlobalAddressSDNode *GA,
5160
                                          SelectionDAG &DAG) const;
5161
 
5162
  /// Expands target specific indirect branch for the case of JumpTable
5163
  /// expanasion.
5164
  virtual SDValue expandIndirectJTBranch(const SDLoc& dl, SDValue Value, SDValue Addr,
5165
                                         SelectionDAG &DAG) const {
5166
    return DAG.getNode(ISD::BRIND, dl, MVT::Other, Value, Addr);
5167
  }
5168
 
5169
  // seteq(x, 0) -> truncate(srl(ctlz(zext(x)), log2(#bits)))
5170
  // If we're comparing for equality to zero and isCtlzFast is true, expose the
5171
  // fact that this can be implemented as a ctlz/srl pair, so that the dag
5172
  // combiner can fold the new nodes.
5173
  SDValue lowerCmpEqZeroToCtlzSrl(SDValue Op, SelectionDAG &DAG) const;
5174
 
5175
private:
5176
  SDValue foldSetCCWithAnd(EVT VT, SDValue N0, SDValue N1, ISD::CondCode Cond,
5177
                           const SDLoc &DL, DAGCombinerInfo &DCI) const;
5178
  SDValue foldSetCCWithBinOp(EVT VT, SDValue N0, SDValue N1, ISD::CondCode Cond,
5179
                             const SDLoc &DL, DAGCombinerInfo &DCI) const;
5180
 
5181
  SDValue optimizeSetCCOfSignedTruncationCheck(EVT SCCVT, SDValue N0,
5182
                                               SDValue N1, ISD::CondCode Cond,
5183
                                               DAGCombinerInfo &DCI,
5184
                                               const SDLoc &DL) const;
5185
 
5186
  // (X & (C l>>/<< Y)) ==/!= 0  -->  ((X <</l>> Y) & C) ==/!= 0
5187
  SDValue optimizeSetCCByHoistingAndByConstFromLogicalShift(
5188
      EVT SCCVT, SDValue N0, SDValue N1C, ISD::CondCode Cond,
5189
      DAGCombinerInfo &DCI, const SDLoc &DL) const;
5190
 
5191
  SDValue prepareUREMEqFold(EVT SETCCVT, SDValue REMNode,
5192
                            SDValue CompTargetNode, ISD::CondCode Cond,
5193
                            DAGCombinerInfo &DCI, const SDLoc &DL,
5194
                            SmallVectorImpl<SDNode *> &Created) const;
5195
  SDValue buildUREMEqFold(EVT SETCCVT, SDValue REMNode, SDValue CompTargetNode,
5196
                          ISD::CondCode Cond, DAGCombinerInfo &DCI,
5197
                          const SDLoc &DL) const;
5198
 
5199
  SDValue prepareSREMEqFold(EVT SETCCVT, SDValue REMNode,
5200
                            SDValue CompTargetNode, ISD::CondCode Cond,
5201
                            DAGCombinerInfo &DCI, const SDLoc &DL,
5202
                            SmallVectorImpl<SDNode *> &Created) const;
5203
  SDValue buildSREMEqFold(EVT SETCCVT, SDValue REMNode, SDValue CompTargetNode,
5204
                          ISD::CondCode Cond, DAGCombinerInfo &DCI,
5205
                          const SDLoc &DL) const;
5206
};
5207
 
5208
/// Given an LLVM IR type and return type attributes, compute the return value
5209
/// EVTs and flags, and optionally also the offsets, if the return value is
5210
/// being lowered to memory.
5211
void GetReturnInfo(CallingConv::ID CC, Type *ReturnType, AttributeList attr,
5212
                   SmallVectorImpl<ISD::OutputArg> &Outs,
5213
                   const TargetLowering &TLI, const DataLayout &DL);
5214
 
5215
} // end namespace llvm
5216
 
5217
#endif // LLVM_CODEGEN_TARGETLOWERING_H