1//===-- SelectionDAGBuilder.h - Selection-DAG building --------*- C++ -*---===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This implements routines for translating from LLVM IR into SelectionDAG IR.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_CODEGEN_SELECTIONDAG_SELECTIONDAGBUILDER_H
15#define LLVM_LIB_CODEGEN_SELECTIONDAG_SELECTIONDAGBUILDER_H
16
17#include "StatepointLowering.h"
18#include "llvm/ADT/APInt.h"
19#include "llvm/ADT/DenseMap.h"
20#include "llvm/Analysis/AliasAnalysis.h"
21#include "llvm/CodeGen/Analysis.h"
22#include "llvm/CodeGen/SelectionDAG.h"
23#include "llvm/CodeGen/SelectionDAGNodes.h"
24#include "llvm/IR/CallSite.h"
25#include "llvm/IR/Statepoint.h"
26#include "llvm/IR/Constants.h"
27#include "llvm/Support/ErrorHandling.h"
28#include "llvm/Target/TargetLowering.h"
29#include <vector>
30
31namespace llvm {
32
33class AddrSpaceCastInst;
34class AllocaInst;
35class BasicBlock;
36class BitCastInst;
37class BranchInst;
38class CallInst;
39class DbgValueInst;
40class ExtractElementInst;
41class ExtractValueInst;
42class FCmpInst;
43class FPExtInst;
44class FPToSIInst;
45class FPToUIInst;
46class FPTruncInst;
47class Function;
48class FunctionLoweringInfo;
49class GetElementPtrInst;
50class GCFunctionInfo;
51class ICmpInst;
52class IntToPtrInst;
53class IndirectBrInst;
54class InvokeInst;
55class InsertElementInst;
56class InsertValueInst;
57class Instruction;
58class LoadInst;
59class MachineBasicBlock;
60class MachineInstr;
61class MachineRegisterInfo;
62class MDNode;
63class MVT;
64class PHINode;
65class PtrToIntInst;
66class ReturnInst;
67class SDDbgValue;
68class SExtInst;
69class SelectInst;
70class ShuffleVectorInst;
71class SIToFPInst;
72class StoreInst;
73class SwitchInst;
74class DataLayout;
75class TargetLibraryInfo;
76class TargetLowering;
77class TruncInst;
78class UIToFPInst;
79class UnreachableInst;
80class VAArgInst;
81class ZExtInst;
82
83//===----------------------------------------------------------------------===//
84/// SelectionDAGBuilder - This is the common target-independent lowering
85/// implementation that is parameterized by a TargetLowering object.
86///
87class SelectionDAGBuilder {
88  /// CurInst - The current instruction being visited
89  const Instruction *CurInst;
90
91  DenseMap<const Value*, SDValue> NodeMap;
92
93  /// UnusedArgNodeMap - Maps argument value for unused arguments. This is used
94  /// to preserve debug information for incoming arguments.
95  DenseMap<const Value*, SDValue> UnusedArgNodeMap;
96
97  /// DanglingDebugInfo - Helper type for DanglingDebugInfoMap.
98  class DanglingDebugInfo {
99    const DbgValueInst* DI;
100    DebugLoc dl;
101    unsigned SDNodeOrder;
102  public:
103    DanglingDebugInfo() : DI(nullptr), dl(DebugLoc()), SDNodeOrder(0) { }
104    DanglingDebugInfo(const DbgValueInst *di, DebugLoc DL, unsigned SDNO) :
105      DI(di), dl(DL), SDNodeOrder(SDNO) { }
106    const DbgValueInst* getDI() { return DI; }
107    DebugLoc getdl() { return dl; }
108    unsigned getSDNodeOrder() { return SDNodeOrder; }
109  };
110
111  /// DanglingDebugInfoMap - Keeps track of dbg_values for which we have not
112  /// yet seen the referent.  We defer handling these until we do see it.
113  DenseMap<const Value*, DanglingDebugInfo> DanglingDebugInfoMap;
114
115public:
116  /// PendingLoads - Loads are not emitted to the program immediately.  We bunch
117  /// them up and then emit token factor nodes when possible.  This allows us to
118  /// get simple disambiguation between loads without worrying about alias
119  /// analysis.
120  SmallVector<SDValue, 8> PendingLoads;
121
122  /// State used while lowering a statepoint sequence (gc_statepoint,
123  /// gc_relocate, and gc_result).  See StatepointLowering.hpp/cpp for details.
124  StatepointLoweringState StatepointLowering;
125private:
126
127  /// PendingExports - CopyToReg nodes that copy values to virtual registers
128  /// for export to other blocks need to be emitted before any terminator
129  /// instruction, but they have no other ordering requirements. We bunch them
130  /// up and the emit a single tokenfactor for them just before terminator
131  /// instructions.
132  SmallVector<SDValue, 8> PendingExports;
133
134  /// SDNodeOrder - A unique monotonically increasing number used to order the
135  /// SDNodes we create.
136  unsigned SDNodeOrder;
137
138  enum CaseClusterKind {
139    /// A cluster of adjacent case labels with the same destination, or just one
140    /// case.
141    CC_Range,
142    /// A cluster of cases suitable for jump table lowering.
143    CC_JumpTable,
144    /// A cluster of cases suitable for bit test lowering.
145    CC_BitTests
146  };
147
148  /// A cluster of case labels.
149  struct CaseCluster {
150    CaseClusterKind Kind;
151    const ConstantInt *Low, *High;
152    union {
153      MachineBasicBlock *MBB;
154      unsigned JTCasesIndex;
155      unsigned BTCasesIndex;
156    };
157    BranchProbability Prob;
158
159    static CaseCluster range(const ConstantInt *Low, const ConstantInt *High,
160                             MachineBasicBlock *MBB, BranchProbability Prob) {
161      CaseCluster C;
162      C.Kind = CC_Range;
163      C.Low = Low;
164      C.High = High;
165      C.MBB = MBB;
166      C.Prob = Prob;
167      return C;
168    }
169
170    static CaseCluster jumpTable(const ConstantInt *Low,
171                                 const ConstantInt *High, unsigned JTCasesIndex,
172                                 BranchProbability Prob) {
173      CaseCluster C;
174      C.Kind = CC_JumpTable;
175      C.Low = Low;
176      C.High = High;
177      C.JTCasesIndex = JTCasesIndex;
178      C.Prob = Prob;
179      return C;
180    }
181
182    static CaseCluster bitTests(const ConstantInt *Low, const ConstantInt *High,
183                                unsigned BTCasesIndex, BranchProbability Prob) {
184      CaseCluster C;
185      C.Kind = CC_BitTests;
186      C.Low = Low;
187      C.High = High;
188      C.BTCasesIndex = BTCasesIndex;
189      C.Prob = Prob;
190      return C;
191    }
192  };
193
194  typedef std::vector<CaseCluster> CaseClusterVector;
195  typedef CaseClusterVector::iterator CaseClusterIt;
196
197  struct CaseBits {
198    uint64_t Mask;
199    MachineBasicBlock* BB;
200    unsigned Bits;
201    BranchProbability ExtraProb;
202
203    CaseBits(uint64_t mask, MachineBasicBlock* bb, unsigned bits,
204             BranchProbability Prob):
205      Mask(mask), BB(bb), Bits(bits), ExtraProb(Prob) { }
206
207    CaseBits() : Mask(0), BB(nullptr), Bits(0) {}
208  };
209
210  typedef std::vector<CaseBits> CaseBitsVector;
211
212  /// Sort Clusters and merge adjacent cases.
213  void sortAndRangeify(CaseClusterVector &Clusters);
214
215  /// CaseBlock - This structure is used to communicate between
216  /// SelectionDAGBuilder and SDISel for the code generation of additional basic
217  /// blocks needed by multi-case switch statements.
218  struct CaseBlock {
219    CaseBlock(ISD::CondCode cc, const Value *cmplhs, const Value *cmprhs,
220              const Value *cmpmiddle, MachineBasicBlock *truebb,
221              MachineBasicBlock *falsebb, MachineBasicBlock *me,
222              BranchProbability trueprob = BranchProbability::getUnknown(),
223              BranchProbability falseprob = BranchProbability::getUnknown())
224        : CC(cc), CmpLHS(cmplhs), CmpMHS(cmpmiddle), CmpRHS(cmprhs),
225          TrueBB(truebb), FalseBB(falsebb), ThisBB(me), TrueProb(trueprob),
226          FalseProb(falseprob) {}
227
228    // CC - the condition code to use for the case block's setcc node
229    ISD::CondCode CC;
230
231    // CmpLHS/CmpRHS/CmpMHS - The LHS/MHS/RHS of the comparison to emit.
232    // Emit by default LHS op RHS. MHS is used for range comparisons:
233    // If MHS is not null: (LHS <= MHS) and (MHS <= RHS).
234    const Value *CmpLHS, *CmpMHS, *CmpRHS;
235
236    // TrueBB/FalseBB - the block to branch to if the setcc is true/false.
237    MachineBasicBlock *TrueBB, *FalseBB;
238
239    // ThisBB - the block into which to emit the code for the setcc and branches
240    MachineBasicBlock *ThisBB;
241
242    // TrueProb/FalseProb - branch weights.
243    BranchProbability TrueProb, FalseProb;
244  };
245
246  struct JumpTable {
247    JumpTable(unsigned R, unsigned J, MachineBasicBlock *M,
248              MachineBasicBlock *D): Reg(R), JTI(J), MBB(M), Default(D) {}
249
250    /// Reg - the virtual register containing the index of the jump table entry
251    //. to jump to.
252    unsigned Reg;
253    /// JTI - the JumpTableIndex for this jump table in the function.
254    unsigned JTI;
255    /// MBB - the MBB into which to emit the code for the indirect jump.
256    MachineBasicBlock *MBB;
257    /// Default - the MBB of the default bb, which is a successor of the range
258    /// check MBB.  This is when updating PHI nodes in successors.
259    MachineBasicBlock *Default;
260  };
261  struct JumpTableHeader {
262    JumpTableHeader(APInt F, APInt L, const Value *SV, MachineBasicBlock *H,
263                    bool E = false):
264      First(F), Last(L), SValue(SV), HeaderBB(H), Emitted(E) {}
265    APInt First;
266    APInt Last;
267    const Value *SValue;
268    MachineBasicBlock *HeaderBB;
269    bool Emitted;
270  };
271  typedef std::pair<JumpTableHeader, JumpTable> JumpTableBlock;
272
273  struct BitTestCase {
274    BitTestCase(uint64_t M, MachineBasicBlock* T, MachineBasicBlock* Tr,
275                BranchProbability Prob):
276      Mask(M), ThisBB(T), TargetBB(Tr), ExtraProb(Prob) { }
277    uint64_t Mask;
278    MachineBasicBlock *ThisBB;
279    MachineBasicBlock *TargetBB;
280    BranchProbability ExtraProb;
281  };
282
283  typedef SmallVector<BitTestCase, 3> BitTestInfo;
284
285  struct BitTestBlock {
286    BitTestBlock(APInt F, APInt R, const Value *SV, unsigned Rg, MVT RgVT,
287                 bool E, bool CR, MachineBasicBlock *P, MachineBasicBlock *D,
288                 BitTestInfo C, BranchProbability Pr)
289        : First(F), Range(R), SValue(SV), Reg(Rg), RegVT(RgVT), Emitted(E),
290          ContiguousRange(CR), Parent(P), Default(D), Cases(std::move(C)),
291          Prob(Pr) {}
292    APInt First;
293    APInt Range;
294    const Value *SValue;
295    unsigned Reg;
296    MVT RegVT;
297    bool Emitted;
298    bool ContiguousRange;
299    MachineBasicBlock *Parent;
300    MachineBasicBlock *Default;
301    BitTestInfo Cases;
302    BranchProbability Prob;
303    BranchProbability DefaultProb;
304  };
305
306  /// Minimum jump table density, in percent.
307  enum { MinJumpTableDensity = 40 };
308
309  /// Check whether a range of clusters is dense enough for a jump table.
310  bool isDense(const CaseClusterVector &Clusters, unsigned *TotalCases,
311               unsigned First, unsigned Last);
312
313  /// Build a jump table cluster from Clusters[First..Last]. Returns false if it
314  /// decides it's not a good idea.
315  bool buildJumpTable(CaseClusterVector &Clusters, unsigned First,
316                      unsigned Last, const SwitchInst *SI,
317                      MachineBasicBlock *DefaultMBB, CaseCluster &JTCluster);
318
319  /// Find clusters of cases suitable for jump table lowering.
320  void findJumpTables(CaseClusterVector &Clusters, const SwitchInst *SI,
321                      MachineBasicBlock *DefaultMBB);
322
323  /// Check whether the range [Low,High] fits in a machine word.
324  bool rangeFitsInWord(const APInt &Low, const APInt &High);
325
326  /// Check whether these clusters are suitable for lowering with bit tests based
327  /// on the number of destinations, comparison metric, and range.
328  bool isSuitableForBitTests(unsigned NumDests, unsigned NumCmps,
329                             const APInt &Low, const APInt &High);
330
331  /// Build a bit test cluster from Clusters[First..Last]. Returns false if it
332  /// decides it's not a good idea.
333  bool buildBitTests(CaseClusterVector &Clusters, unsigned First, unsigned Last,
334                     const SwitchInst *SI, CaseCluster &BTCluster);
335
336  /// Find clusters of cases suitable for bit test lowering.
337  void findBitTestClusters(CaseClusterVector &Clusters, const SwitchInst *SI);
338
339  struct SwitchWorkListItem {
340    MachineBasicBlock *MBB;
341    CaseClusterIt FirstCluster;
342    CaseClusterIt LastCluster;
343    const ConstantInt *GE;
344    const ConstantInt *LT;
345    BranchProbability DefaultProb;
346  };
347  typedef SmallVector<SwitchWorkListItem, 4> SwitchWorkList;
348
349  /// Determine the rank by weight of CC in [First,Last]. If CC has more weight
350  /// than each cluster in the range, its rank is 0.
351  static unsigned caseClusterRank(const CaseCluster &CC, CaseClusterIt First,
352                                  CaseClusterIt Last);
353
354  /// Emit comparison and split W into two subtrees.
355  void splitWorkItem(SwitchWorkList &WorkList, const SwitchWorkListItem &W,
356                     Value *Cond, MachineBasicBlock *SwitchMBB);
357
358  /// Lower W.
359  void lowerWorkItem(SwitchWorkListItem W, Value *Cond,
360                     MachineBasicBlock *SwitchMBB,
361                     MachineBasicBlock *DefaultMBB);
362
363
364  /// A class which encapsulates all of the information needed to generate a
365  /// stack protector check and signals to isel via its state being initialized
366  /// that a stack protector needs to be generated.
367  ///
368  /// *NOTE* The following is a high level documentation of SelectionDAG Stack
369  /// Protector Generation. The reason that it is placed here is for a lack of
370  /// other good places to stick it.
371  ///
372  /// High Level Overview of SelectionDAG Stack Protector Generation:
373  ///
374  /// Previously, generation of stack protectors was done exclusively in the
375  /// pre-SelectionDAG Codegen LLVM IR Pass "Stack Protector". This necessitated
376  /// splitting basic blocks at the IR level to create the success/failure basic
377  /// blocks in the tail of the basic block in question. As a result of this,
378  /// calls that would have qualified for the sibling call optimization were no
379  /// longer eligible for optimization since said calls were no longer right in
380  /// the "tail position" (i.e. the immediate predecessor of a ReturnInst
381  /// instruction).
382  ///
383  /// Then it was noticed that since the sibling call optimization causes the
384  /// callee to reuse the caller's stack, if we could delay the generation of
385  /// the stack protector check until later in CodeGen after the sibling call
386  /// decision was made, we get both the tail call optimization and the stack
387  /// protector check!
388  ///
389  /// A few goals in solving this problem were:
390  ///
391  ///   1. Preserve the architecture independence of stack protector generation.
392  ///
393  ///   2. Preserve the normal IR level stack protector check for platforms like
394  ///      OpenBSD for which we support platform-specific stack protector
395  ///      generation.
396  ///
397  /// The main problem that guided the present solution is that one can not
398  /// solve this problem in an architecture independent manner at the IR level
399  /// only. This is because:
400  ///
401  ///   1. The decision on whether or not to perform a sibling call on certain
402  ///      platforms (for instance i386) requires lower level information
403  ///      related to available registers that can not be known at the IR level.
404  ///
405  ///   2. Even if the previous point were not true, the decision on whether to
406  ///      perform a tail call is done in LowerCallTo in SelectionDAG which
407  ///      occurs after the Stack Protector Pass. As a result, one would need to
408  ///      put the relevant callinst into the stack protector check success
409  ///      basic block (where the return inst is placed) and then move it back
410  ///      later at SelectionDAG/MI time before the stack protector check if the
411  ///      tail call optimization failed. The MI level option was nixed
412  ///      immediately since it would require platform-specific pattern
413  ///      matching. The SelectionDAG level option was nixed because
414  ///      SelectionDAG only processes one IR level basic block at a time
415  ///      implying one could not create a DAG Combine to move the callinst.
416  ///
417  /// To get around this problem a few things were realized:
418  ///
419  ///   1. While one can not handle multiple IR level basic blocks at the
420  ///      SelectionDAG Level, one can generate multiple machine basic blocks
421  ///      for one IR level basic block. This is how we handle bit tests and
422  ///      switches.
423  ///
424  ///   2. At the MI level, tail calls are represented via a special return
425  ///      MIInst called "tcreturn". Thus if we know the basic block in which we
426  ///      wish to insert the stack protector check, we get the correct behavior
427  ///      by always inserting the stack protector check right before the return
428  ///      statement. This is a "magical transformation" since no matter where
429  ///      the stack protector check intrinsic is, we always insert the stack
430  ///      protector check code at the end of the BB.
431  ///
432  /// Given the aforementioned constraints, the following solution was devised:
433  ///
434  ///   1. On platforms that do not support SelectionDAG stack protector check
435  ///      generation, allow for the normal IR level stack protector check
436  ///      generation to continue.
437  ///
438  ///   2. On platforms that do support SelectionDAG stack protector check
439  ///      generation:
440  ///
441  ///     a. Use the IR level stack protector pass to decide if a stack
442  ///        protector is required/which BB we insert the stack protector check
443  ///        in by reusing the logic already therein. If we wish to generate a
444  ///        stack protector check in a basic block, we place a special IR
445  ///        intrinsic called llvm.stackprotectorcheck right before the BB's
446  ///        returninst or if there is a callinst that could potentially be
447  ///        sibling call optimized, before the call inst.
448  ///
449  ///     b. Then when a BB with said intrinsic is processed, we codegen the BB
450  ///        normally via SelectBasicBlock. In said process, when we visit the
451  ///        stack protector check, we do not actually emit anything into the
452  ///        BB. Instead, we just initialize the stack protector descriptor
453  ///        class (which involves stashing information/creating the success
454  ///        mbbb and the failure mbb if we have not created one for this
455  ///        function yet) and export the guard variable that we are going to
456  ///        compare.
457  ///
458  ///     c. After we finish selecting the basic block, in FinishBasicBlock if
459  ///        the StackProtectorDescriptor attached to the SelectionDAGBuilder is
460  ///        initialized, we first find a splice point in the parent basic block
461  ///        before the terminator and then splice the terminator of said basic
462  ///        block into the success basic block. Then we code-gen a new tail for
463  ///        the parent basic block consisting of the two loads, the comparison,
464  ///        and finally two branches to the success/failure basic blocks. We
465  ///        conclude by code-gening the failure basic block if we have not
466  ///        code-gened it already (all stack protector checks we generate in
467  ///        the same function, use the same failure basic block).
468  class StackProtectorDescriptor {
469  public:
470    StackProtectorDescriptor() : ParentMBB(nullptr), SuccessMBB(nullptr),
471                                 FailureMBB(nullptr), Guard(nullptr),
472                                 GuardReg(0) { }
473
474    /// Returns true if all fields of the stack protector descriptor are
475    /// initialized implying that we should/are ready to emit a stack protector.
476    bool shouldEmitStackProtector() const {
477      return ParentMBB && SuccessMBB && FailureMBB && Guard;
478    }
479
480    /// Initialize the stack protector descriptor structure for a new basic
481    /// block.
482    void initialize(const BasicBlock *BB,
483                    MachineBasicBlock *MBB,
484                    const CallInst &StackProtCheckCall) {
485      // Make sure we are not initialized yet.
486      assert(!shouldEmitStackProtector() && "Stack Protector Descriptor is "
487             "already initialized!");
488      ParentMBB = MBB;
489      SuccessMBB = AddSuccessorMBB(BB, MBB, /* IsLikely */ true);
490      FailureMBB = AddSuccessorMBB(BB, MBB, /* IsLikely */ false, FailureMBB);
491      if (!Guard)
492        Guard = StackProtCheckCall.getArgOperand(0);
493    }
494
495    /// Reset state that changes when we handle different basic blocks.
496    ///
497    /// This currently includes:
498    ///
499    /// 1. The specific basic block we are generating a
500    /// stack protector for (ParentMBB).
501    ///
502    /// 2. The successor machine basic block that will contain the tail of
503    /// parent mbb after we create the stack protector check (SuccessMBB). This
504    /// BB is visited only on stack protector check success.
505    void resetPerBBState() {
506      ParentMBB = nullptr;
507      SuccessMBB = nullptr;
508    }
509
510    /// Reset state that only changes when we switch functions.
511    ///
512    /// This currently includes:
513    ///
514    /// 1. FailureMBB since we reuse the failure code path for all stack
515    /// protector checks created in an individual function.
516    ///
517    /// 2.The guard variable since the guard variable we are checking against is
518    /// always the same.
519    void resetPerFunctionState() {
520      FailureMBB = nullptr;
521      Guard = nullptr;
522      GuardReg = 0;
523    }
524
525    MachineBasicBlock *getParentMBB() { return ParentMBB; }
526    MachineBasicBlock *getSuccessMBB() { return SuccessMBB; }
527    MachineBasicBlock *getFailureMBB() { return FailureMBB; }
528    const Value *getGuard() { return Guard; }
529
530    unsigned getGuardReg() const { return GuardReg; }
531    void setGuardReg(unsigned R) { GuardReg = R; }
532
533  private:
534    /// The basic block for which we are generating the stack protector.
535    ///
536    /// As a result of stack protector generation, we will splice the
537    /// terminators of this basic block into the successor mbb SuccessMBB and
538    /// replace it with a compare/branch to the successor mbbs
539    /// SuccessMBB/FailureMBB depending on whether or not the stack protector
540    /// was violated.
541    MachineBasicBlock *ParentMBB;
542
543    /// A basic block visited on stack protector check success that contains the
544    /// terminators of ParentMBB.
545    MachineBasicBlock *SuccessMBB;
546
547    /// This basic block visited on stack protector check failure that will
548    /// contain a call to __stack_chk_fail().
549    MachineBasicBlock *FailureMBB;
550
551    /// The guard variable which we will compare against the stored value in the
552    /// stack protector stack slot.
553    const Value *Guard;
554
555    /// The virtual register holding the stack guard value.
556    unsigned GuardReg;
557
558    /// Add a successor machine basic block to ParentMBB. If the successor mbb
559    /// has not been created yet (i.e. if SuccMBB = 0), then the machine basic
560    /// block will be created. Assign a large weight if IsLikely is true.
561    MachineBasicBlock *AddSuccessorMBB(const BasicBlock *BB,
562                                       MachineBasicBlock *ParentMBB,
563                                       bool IsLikely,
564                                       MachineBasicBlock *SuccMBB = nullptr);
565  };
566
567private:
568  const TargetMachine &TM;
569public:
570  /// Lowest valid SDNodeOrder. The special case 0 is reserved for scheduling
571  /// nodes without a corresponding SDNode.
572  static const unsigned LowestSDNodeOrder = 1;
573
574  SelectionDAG &DAG;
575  const DataLayout *DL;
576  AliasAnalysis *AA;
577  const TargetLibraryInfo *LibInfo;
578
579  /// SwitchCases - Vector of CaseBlock structures used to communicate
580  /// SwitchInst code generation information.
581  std::vector<CaseBlock> SwitchCases;
582  /// JTCases - Vector of JumpTable structures used to communicate
583  /// SwitchInst code generation information.
584  std::vector<JumpTableBlock> JTCases;
585  /// BitTestCases - Vector of BitTestBlock structures used to communicate
586  /// SwitchInst code generation information.
587  std::vector<BitTestBlock> BitTestCases;
588  /// A StackProtectorDescriptor structure used to communicate stack protector
589  /// information in between SelectBasicBlock and FinishBasicBlock.
590  StackProtectorDescriptor SPDescriptor;
591
592  // Emit PHI-node-operand constants only once even if used by multiple
593  // PHI nodes.
594  DenseMap<const Constant *, unsigned> ConstantsOut;
595
596  /// FuncInfo - Information about the function as a whole.
597  ///
598  FunctionLoweringInfo &FuncInfo;
599
600  /// GFI - Garbage collection metadata for the function.
601  GCFunctionInfo *GFI;
602
603  /// LPadToCallSiteMap - Map a landing pad to the call site indexes.
604  DenseMap<MachineBasicBlock*, SmallVector<unsigned, 4> > LPadToCallSiteMap;
605
606  /// HasTailCall - This is set to true if a call in the current
607  /// block has been translated as a tail call. In this case,
608  /// no subsequent DAG nodes should be created.
609  ///
610  bool HasTailCall;
611
612  LLVMContext *Context;
613
614  SelectionDAGBuilder(SelectionDAG &dag, FunctionLoweringInfo &funcinfo,
615                      CodeGenOpt::Level ol)
616    : CurInst(nullptr), SDNodeOrder(LowestSDNodeOrder), TM(dag.getTarget()),
617      DAG(dag), FuncInfo(funcinfo),
618      HasTailCall(false) {
619  }
620
621  void init(GCFunctionInfo *gfi, AliasAnalysis &aa,
622            const TargetLibraryInfo *li);
623
624  /// clear - Clear out the current SelectionDAG and the associated
625  /// state and prepare this SelectionDAGBuilder object to be used
626  /// for a new block. This doesn't clear out information about
627  /// additional blocks that are needed to complete switch lowering
628  /// or PHI node updating; that information is cleared out as it is
629  /// consumed.
630  void clear();
631
632  /// clearDanglingDebugInfo - Clear the dangling debug information
633  /// map. This function is separated from the clear so that debug
634  /// information that is dangling in a basic block can be properly
635  /// resolved in a different basic block. This allows the
636  /// SelectionDAG to resolve dangling debug information attached
637  /// to PHI nodes.
638  void clearDanglingDebugInfo();
639
640  /// getRoot - Return the current virtual root of the Selection DAG,
641  /// flushing any PendingLoad items. This must be done before emitting
642  /// a store or any other node that may need to be ordered after any
643  /// prior load instructions.
644  ///
645  SDValue getRoot();
646
647  /// getControlRoot - Similar to getRoot, but instead of flushing all the
648  /// PendingLoad items, flush all the PendingExports items. It is necessary
649  /// to do this before emitting a terminator instruction.
650  ///
651  SDValue getControlRoot();
652
653  SDLoc getCurSDLoc() const {
654    return SDLoc(CurInst, SDNodeOrder);
655  }
656
657  DebugLoc getCurDebugLoc() const {
658    return CurInst ? CurInst->getDebugLoc() : DebugLoc();
659  }
660
661  unsigned getSDNodeOrder() const { return SDNodeOrder; }
662
663  void CopyValueToVirtualRegister(const Value *V, unsigned Reg);
664
665  void visit(const Instruction &I);
666
667  void visit(unsigned Opcode, const User &I);
668
669  /// getCopyFromRegs - If there was virtual register allocated for the value V
670  /// emit CopyFromReg of the specified type Ty. Return empty SDValue() otherwise.
671  SDValue getCopyFromRegs(const Value *V, Type *Ty);
672
673  // resolveDanglingDebugInfo - if we saw an earlier dbg_value referring to V,
674  // generate the debug data structures now that we've seen its definition.
675  void resolveDanglingDebugInfo(const Value *V, SDValue Val);
676  SDValue getValue(const Value *V);
677  bool findValue(const Value *V) const;
678
679  SDValue getNonRegisterValue(const Value *V);
680  SDValue getValueImpl(const Value *V);
681
682  void setValue(const Value *V, SDValue NewN) {
683    SDValue &N = NodeMap[V];
684    assert(!N.getNode() && "Already set a value for this node!");
685    N = NewN;
686  }
687
688  void setUnusedArgValue(const Value *V, SDValue NewN) {
689    SDValue &N = UnusedArgNodeMap[V];
690    assert(!N.getNode() && "Already set a value for this node!");
691    N = NewN;
692  }
693
694  void FindMergedConditions(const Value *Cond, MachineBasicBlock *TBB,
695                            MachineBasicBlock *FBB, MachineBasicBlock *CurBB,
696                            MachineBasicBlock *SwitchBB,
697                            Instruction::BinaryOps Opc, BranchProbability TW,
698                            BranchProbability FW);
699  void EmitBranchForMergedCondition(const Value *Cond, MachineBasicBlock *TBB,
700                                    MachineBasicBlock *FBB,
701                                    MachineBasicBlock *CurBB,
702                                    MachineBasicBlock *SwitchBB,
703                                    BranchProbability TW, BranchProbability FW);
704  bool ShouldEmitAsBranches(const std::vector<CaseBlock> &Cases);
705  bool isExportableFromCurrentBlock(const Value *V, const BasicBlock *FromBB);
706  void CopyToExportRegsIfNeeded(const Value *V);
707  void ExportFromCurrentBlock(const Value *V);
708  void LowerCallTo(ImmutableCallSite CS, SDValue Callee, bool IsTailCall,
709                   const BasicBlock *EHPadBB = nullptr);
710
711  std::pair<SDValue, SDValue> lowerCallOperands(
712          ImmutableCallSite CS,
713          unsigned ArgIdx,
714          unsigned NumArgs,
715          SDValue Callee,
716          Type *ReturnTy,
717          const BasicBlock *EHPadBB = nullptr,
718          bool IsPatchPoint = false);
719
720  /// UpdateSplitBlock - When an MBB was split during scheduling, update the
721  /// references that need to refer to the last resulting block.
722  void UpdateSplitBlock(MachineBasicBlock *First, MachineBasicBlock *Last);
723
724  // This function is responsible for the whole statepoint lowering process.
725  // It uniformly handles invoke and call statepoints.
726  void LowerStatepoint(ImmutableStatepoint Statepoint,
727                       const BasicBlock *EHPadBB = nullptr);
728private:
729  std::pair<SDValue, SDValue>
730  lowerInvokable(TargetLowering::CallLoweringInfo &CLI,
731                 const BasicBlock *EHPadBB = nullptr);
732
733  // Terminator instructions.
734  void visitRet(const ReturnInst &I);
735  void visitBr(const BranchInst &I);
736  void visitSwitch(const SwitchInst &I);
737  void visitIndirectBr(const IndirectBrInst &I);
738  void visitUnreachable(const UnreachableInst &I);
739  void visitCleanupRet(const CleanupReturnInst &I);
740  void visitCatchSwitch(const CatchSwitchInst &I);
741  void visitCatchRet(const CatchReturnInst &I);
742  void visitCatchPad(const CatchPadInst &I);
743  void visitCleanupPad(const CleanupPadInst &CPI);
744
745  BranchProbability getEdgeProbability(const MachineBasicBlock *Src,
746                                       const MachineBasicBlock *Dst) const;
747  void addSuccessorWithProb(
748      MachineBasicBlock *Src, MachineBasicBlock *Dst,
749      BranchProbability Prob = BranchProbability::getUnknown());
750
751public:
752  void visitSwitchCase(CaseBlock &CB,
753                       MachineBasicBlock *SwitchBB);
754  void visitSPDescriptorParent(StackProtectorDescriptor &SPD,
755                               MachineBasicBlock *ParentBB);
756  void visitSPDescriptorFailure(StackProtectorDescriptor &SPD);
757  void visitBitTestHeader(BitTestBlock &B, MachineBasicBlock *SwitchBB);
758  void visitBitTestCase(BitTestBlock &BB,
759                        MachineBasicBlock* NextMBB,
760                        BranchProbability BranchProbToNext,
761                        unsigned Reg,
762                        BitTestCase &B,
763                        MachineBasicBlock *SwitchBB);
764  void visitJumpTable(JumpTable &JT);
765  void visitJumpTableHeader(JumpTable &JT, JumpTableHeader &JTH,
766                            MachineBasicBlock *SwitchBB);
767
768private:
769  // These all get lowered before this pass.
770  void visitInvoke(const InvokeInst &I);
771  void visitResume(const ResumeInst &I);
772
773  void visitBinary(const User &I, unsigned OpCode);
774  void visitShift(const User &I, unsigned Opcode);
775  void visitAdd(const User &I)  { visitBinary(I, ISD::ADD); }
776  void visitFAdd(const User &I) { visitBinary(I, ISD::FADD); }
777  void visitSub(const User &I)  { visitBinary(I, ISD::SUB); }
778  void visitFSub(const User &I);
779  void visitMul(const User &I)  { visitBinary(I, ISD::MUL); }
780  void visitFMul(const User &I) { visitBinary(I, ISD::FMUL); }
781  void visitURem(const User &I) { visitBinary(I, ISD::UREM); }
782  void visitSRem(const User &I) { visitBinary(I, ISD::SREM); }
783  void visitFRem(const User &I) { visitBinary(I, ISD::FREM); }
784  void visitUDiv(const User &I) { visitBinary(I, ISD::UDIV); }
785  void visitSDiv(const User &I);
786  void visitFDiv(const User &I) { visitBinary(I, ISD::FDIV); }
787  void visitAnd (const User &I) { visitBinary(I, ISD::AND); }
788  void visitOr  (const User &I) { visitBinary(I, ISD::OR); }
789  void visitXor (const User &I) { visitBinary(I, ISD::XOR); }
790  void visitShl (const User &I) { visitShift(I, ISD::SHL); }
791  void visitLShr(const User &I) { visitShift(I, ISD::SRL); }
792  void visitAShr(const User &I) { visitShift(I, ISD::SRA); }
793  void visitICmp(const User &I);
794  void visitFCmp(const User &I);
795  // Visit the conversion instructions
796  void visitTrunc(const User &I);
797  void visitZExt(const User &I);
798  void visitSExt(const User &I);
799  void visitFPTrunc(const User &I);
800  void visitFPExt(const User &I);
801  void visitFPToUI(const User &I);
802  void visitFPToSI(const User &I);
803  void visitUIToFP(const User &I);
804  void visitSIToFP(const User &I);
805  void visitPtrToInt(const User &I);
806  void visitIntToPtr(const User &I);
807  void visitBitCast(const User &I);
808  void visitAddrSpaceCast(const User &I);
809
810  void visitExtractElement(const User &I);
811  void visitInsertElement(const User &I);
812  void visitShuffleVector(const User &I);
813
814  void visitExtractValue(const ExtractValueInst &I);
815  void visitInsertValue(const InsertValueInst &I);
816  void visitLandingPad(const LandingPadInst &I);
817
818  void visitGetElementPtr(const User &I);
819  void visitSelect(const User &I);
820
821  void visitAlloca(const AllocaInst &I);
822  void visitLoad(const LoadInst &I);
823  void visitStore(const StoreInst &I);
824  void visitMaskedLoad(const CallInst &I);
825  void visitMaskedStore(const CallInst &I);
826  void visitMaskedGather(const CallInst &I);
827  void visitMaskedScatter(const CallInst &I);
828  void visitAtomicCmpXchg(const AtomicCmpXchgInst &I);
829  void visitAtomicRMW(const AtomicRMWInst &I);
830  void visitFence(const FenceInst &I);
831  void visitPHI(const PHINode &I);
832  void visitCall(const CallInst &I);
833  bool visitMemCmpCall(const CallInst &I);
834  bool visitMemChrCall(const CallInst &I);
835  bool visitStrCpyCall(const CallInst &I, bool isStpcpy);
836  bool visitStrCmpCall(const CallInst &I);
837  bool visitStrLenCall(const CallInst &I);
838  bool visitStrNLenCall(const CallInst &I);
839  bool visitUnaryFloatCall(const CallInst &I, unsigned Opcode);
840  bool visitBinaryFloatCall(const CallInst &I, unsigned Opcode);
841  void visitAtomicLoad(const LoadInst &I);
842  void visitAtomicStore(const StoreInst &I);
843
844  void visitInlineAsm(ImmutableCallSite CS);
845  const char *visitIntrinsicCall(const CallInst &I, unsigned Intrinsic);
846  void visitTargetIntrinsic(const CallInst &I, unsigned Intrinsic);
847
848  void visitVAStart(const CallInst &I);
849  void visitVAArg(const VAArgInst &I);
850  void visitVAEnd(const CallInst &I);
851  void visitVACopy(const CallInst &I);
852  void visitStackmap(const CallInst &I);
853  void visitPatchpoint(ImmutableCallSite CS,
854                       const BasicBlock *EHPadBB = nullptr);
855
856  // These three are implemented in StatepointLowering.cpp
857  void visitStatepoint(const CallInst &I);
858  void visitGCRelocate(const CallInst &I);
859  void visitGCResult(const CallInst &I);
860
861  void visitUserOp1(const Instruction &I) {
862    llvm_unreachable("UserOp1 should not exist at instruction selection time!");
863  }
864  void visitUserOp2(const Instruction &I) {
865    llvm_unreachable("UserOp2 should not exist at instruction selection time!");
866  }
867
868  void processIntegerCallValue(const Instruction &I,
869                               SDValue Value, bool IsSigned);
870
871  void HandlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB);
872
873  /// EmitFuncArgumentDbgValue - If V is an function argument then create
874  /// corresponding DBG_VALUE machine instruction for it now. At the end of
875  /// instruction selection, they will be inserted to the entry BB.
876  bool EmitFuncArgumentDbgValue(const Value *V, DILocalVariable *Variable,
877                                DIExpression *Expr, DILocation *DL,
878                                int64_t Offset, bool IsIndirect,
879                                const SDValue &N);
880
881  /// Return the next block after MBB, or nullptr if there is none.
882  MachineBasicBlock *NextBlock(MachineBasicBlock *MBB);
883
884  /// Update the DAG and DAG builder with the relevant information after
885  /// a new root node has been created which could be a tail call.
886  void updateDAGForMaybeTailCall(SDValue MaybeTC);
887};
888
889/// RegsForValue - This struct represents the registers (physical or virtual)
890/// that a particular set of values is assigned, and the type information about
891/// the value. The most common situation is to represent one value at a time,
892/// but struct or array values are handled element-wise as multiple values.  The
893/// splitting of aggregates is performed recursively, so that we never have
894/// aggregate-typed registers. The values at this point do not necessarily have
895/// legal types, so each value may require one or more registers of some legal
896/// type.
897///
898struct RegsForValue {
899  /// ValueVTs - The value types of the values, which may not be legal, and
900  /// may need be promoted or synthesized from one or more registers.
901  ///
902  SmallVector<EVT, 4> ValueVTs;
903
904  /// RegVTs - The value types of the registers. This is the same size as
905  /// ValueVTs and it records, for each value, what the type of the assigned
906  /// register or registers are. (Individual values are never synthesized
907  /// from more than one type of register.)
908  ///
909  /// With virtual registers, the contents of RegVTs is redundant with TLI's
910  /// getRegisterType member function, however when with physical registers
911  /// it is necessary to have a separate record of the types.
912  ///
913  SmallVector<MVT, 4> RegVTs;
914
915  /// Regs - This list holds the registers assigned to the values.
916  /// Each legal or promoted value requires one register, and each
917  /// expanded value requires multiple registers.
918  ///
919  SmallVector<unsigned, 4> Regs;
920
921  RegsForValue();
922
923  RegsForValue(const SmallVector<unsigned, 4> &regs, MVT regvt, EVT valuevt);
924
925  RegsForValue(LLVMContext &Context, const TargetLowering &TLI,
926               const DataLayout &DL, unsigned Reg, Type *Ty);
927
928  /// append - Add the specified values to this one.
929  void append(const RegsForValue &RHS) {
930    ValueVTs.append(RHS.ValueVTs.begin(), RHS.ValueVTs.end());
931    RegVTs.append(RHS.RegVTs.begin(), RHS.RegVTs.end());
932    Regs.append(RHS.Regs.begin(), RHS.Regs.end());
933  }
934
935  /// getCopyFromRegs - Emit a series of CopyFromReg nodes that copies from
936  /// this value and returns the result as a ValueVTs value.  This uses
937  /// Chain/Flag as the input and updates them for the output Chain/Flag.
938  /// If the Flag pointer is NULL, no flag is used.
939  SDValue getCopyFromRegs(SelectionDAG &DAG, FunctionLoweringInfo &FuncInfo,
940                          SDLoc dl,
941                          SDValue &Chain, SDValue *Flag,
942                          const Value *V = nullptr) const;
943
944  /// getCopyToRegs - Emit a series of CopyToReg nodes that copies the specified
945  /// value into the registers specified by this object.  This uses Chain/Flag
946  /// as the input and updates them for the output Chain/Flag.  If the Flag
947  /// pointer is nullptr, no flag is used.  If V is not nullptr, then it is used
948  /// in printing better diagnostic messages on error.
949  void
950  getCopyToRegs(SDValue Val, SelectionDAG &DAG, SDLoc dl, SDValue &Chain,
951                SDValue *Flag, const Value *V = nullptr,
952                ISD::NodeType PreferredExtendType = ISD::ANY_EXTEND) const;
953
954  /// AddInlineAsmOperands - Add this value to the specified inlineasm node
955  /// operand list.  This adds the code marker, matching input operand index
956  /// (if applicable), and includes the number of values added into it.
957  void AddInlineAsmOperands(unsigned Kind,
958                            bool HasMatching, unsigned MatchingIdx, SDLoc dl,
959                            SelectionDAG &DAG,
960                            std::vector<SDValue> &Ops) const;
961};
962
963} // end namespace llvm
964
965#endif
966