[SelectionDAGBuilder] Adds support for landingpads of token type
[oota-llvm.git] / lib / CodeGen / SelectionDAG / SelectionDAGBuilder.cpp
1 //===-- SelectionDAGBuilder.cpp - Selection-DAG building ------------------===//
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 #include "SelectionDAGBuilder.h"
15 #include "SDNodeDbgValue.h"
16 #include "llvm/ADT/BitVector.h"
17 #include "llvm/ADT/Optional.h"
18 #include "llvm/ADT/SmallSet.h"
19 #include "llvm/ADT/Statistic.h"
20 #include "llvm/Analysis/AliasAnalysis.h"
21 #include "llvm/Analysis/BranchProbabilityInfo.h"
22 #include "llvm/Analysis/ConstantFolding.h"
23 #include "llvm/Analysis/TargetLibraryInfo.h"
24 #include "llvm/Analysis/ValueTracking.h"
25 #include "llvm/Analysis/VectorUtils.h"
26 #include "llvm/CodeGen/FastISel.h"
27 #include "llvm/CodeGen/FunctionLoweringInfo.h"
28 #include "llvm/CodeGen/GCMetadata.h"
29 #include "llvm/CodeGen/GCStrategy.h"
30 #include "llvm/CodeGen/MachineFrameInfo.h"
31 #include "llvm/CodeGen/MachineFunction.h"
32 #include "llvm/CodeGen/MachineInstrBuilder.h"
33 #include "llvm/CodeGen/MachineJumpTableInfo.h"
34 #include "llvm/CodeGen/MachineModuleInfo.h"
35 #include "llvm/CodeGen/MachineRegisterInfo.h"
36 #include "llvm/CodeGen/SelectionDAG.h"
37 #include "llvm/CodeGen/StackMaps.h"
38 #include "llvm/CodeGen/WinEHFuncInfo.h"
39 #include "llvm/IR/CallingConv.h"
40 #include "llvm/IR/Constants.h"
41 #include "llvm/IR/DataLayout.h"
42 #include "llvm/IR/DebugInfo.h"
43 #include "llvm/IR/DerivedTypes.h"
44 #include "llvm/IR/Function.h"
45 #include "llvm/IR/GlobalVariable.h"
46 #include "llvm/IR/InlineAsm.h"
47 #include "llvm/IR/Instructions.h"
48 #include "llvm/IR/IntrinsicInst.h"
49 #include "llvm/IR/Intrinsics.h"
50 #include "llvm/IR/LLVMContext.h"
51 #include "llvm/IR/Module.h"
52 #include "llvm/IR/Statepoint.h"
53 #include "llvm/MC/MCSymbol.h"
54 #include "llvm/Support/CommandLine.h"
55 #include "llvm/Support/Debug.h"
56 #include "llvm/Support/ErrorHandling.h"
57 #include "llvm/Support/MathExtras.h"
58 #include "llvm/Support/raw_ostream.h"
59 #include "llvm/Target/TargetFrameLowering.h"
60 #include "llvm/Target/TargetInstrInfo.h"
61 #include "llvm/Target/TargetIntrinsicInfo.h"
62 #include "llvm/Target/TargetLowering.h"
63 #include "llvm/Target/TargetOptions.h"
64 #include "llvm/Target/TargetSelectionDAGInfo.h"
65 #include "llvm/Target/TargetSubtargetInfo.h"
66 #include <algorithm>
67 #include <utility>
68 using namespace llvm;
69
70 #define DEBUG_TYPE "isel"
71
72 /// LimitFloatPrecision - Generate low-precision inline sequences for
73 /// some float libcalls (6, 8 or 12 bits).
74 static unsigned LimitFloatPrecision;
75
76 static cl::opt<unsigned, true>
77 LimitFPPrecision("limit-float-precision",
78                  cl::desc("Generate low-precision inline sequences "
79                           "for some float libcalls"),
80                  cl::location(LimitFloatPrecision),
81                  cl::init(0));
82
83 static cl::opt<bool>
84 EnableFMFInDAG("enable-fmf-dag", cl::init(true), cl::Hidden,
85                 cl::desc("Enable fast-math-flags for DAG nodes"));
86
87 // Limit the width of DAG chains. This is important in general to prevent
88 // DAG-based analysis from blowing up. For example, alias analysis and
89 // load clustering may not complete in reasonable time. It is difficult to
90 // recognize and avoid this situation within each individual analysis, and
91 // future analyses are likely to have the same behavior. Limiting DAG width is
92 // the safe approach and will be especially important with global DAGs.
93 //
94 // MaxParallelChains default is arbitrarily high to avoid affecting
95 // optimization, but could be lowered to improve compile time. Any ld-ld-st-st
96 // sequence over this should have been converted to llvm.memcpy by the
97 // frontend. It easy to induce this behavior with .ll code such as:
98 // %buffer = alloca [4096 x i8]
99 // %data = load [4096 x i8]* %argPtr
100 // store [4096 x i8] %data, [4096 x i8]* %buffer
101 static const unsigned MaxParallelChains = 64;
102
103 static SDValue getCopyFromPartsVector(SelectionDAG &DAG, SDLoc DL,
104                                       const SDValue *Parts, unsigned NumParts,
105                                       MVT PartVT, EVT ValueVT, const Value *V);
106
107 /// getCopyFromParts - Create a value that contains the specified legal parts
108 /// combined into the value they represent.  If the parts combine to a type
109 /// larger then ValueVT then AssertOp can be used to specify whether the extra
110 /// bits are known to be zero (ISD::AssertZext) or sign extended from ValueVT
111 /// (ISD::AssertSext).
112 static SDValue getCopyFromParts(SelectionDAG &DAG, SDLoc DL,
113                                 const SDValue *Parts,
114                                 unsigned NumParts, MVT PartVT, EVT ValueVT,
115                                 const Value *V,
116                                 ISD::NodeType AssertOp = ISD::DELETED_NODE) {
117   if (ValueVT.isVector())
118     return getCopyFromPartsVector(DAG, DL, Parts, NumParts,
119                                   PartVT, ValueVT, V);
120
121   assert(NumParts > 0 && "No parts to assemble!");
122   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
123   SDValue Val = Parts[0];
124
125   if (NumParts > 1) {
126     // Assemble the value from multiple parts.
127     if (ValueVT.isInteger()) {
128       unsigned PartBits = PartVT.getSizeInBits();
129       unsigned ValueBits = ValueVT.getSizeInBits();
130
131       // Assemble the power of 2 part.
132       unsigned RoundParts = NumParts & (NumParts - 1) ?
133         1 << Log2_32(NumParts) : NumParts;
134       unsigned RoundBits = PartBits * RoundParts;
135       EVT RoundVT = RoundBits == ValueBits ?
136         ValueVT : EVT::getIntegerVT(*DAG.getContext(), RoundBits);
137       SDValue Lo, Hi;
138
139       EVT HalfVT = EVT::getIntegerVT(*DAG.getContext(), RoundBits/2);
140
141       if (RoundParts > 2) {
142         Lo = getCopyFromParts(DAG, DL, Parts, RoundParts / 2,
143                               PartVT, HalfVT, V);
144         Hi = getCopyFromParts(DAG, DL, Parts + RoundParts / 2,
145                               RoundParts / 2, PartVT, HalfVT, V);
146       } else {
147         Lo = DAG.getNode(ISD::BITCAST, DL, HalfVT, Parts[0]);
148         Hi = DAG.getNode(ISD::BITCAST, DL, HalfVT, Parts[1]);
149       }
150
151       if (DAG.getDataLayout().isBigEndian())
152         std::swap(Lo, Hi);
153
154       Val = DAG.getNode(ISD::BUILD_PAIR, DL, RoundVT, Lo, Hi);
155
156       if (RoundParts < NumParts) {
157         // Assemble the trailing non-power-of-2 part.
158         unsigned OddParts = NumParts - RoundParts;
159         EVT OddVT = EVT::getIntegerVT(*DAG.getContext(), OddParts * PartBits);
160         Hi = getCopyFromParts(DAG, DL,
161                               Parts + RoundParts, OddParts, PartVT, OddVT, V);
162
163         // Combine the round and odd parts.
164         Lo = Val;
165         if (DAG.getDataLayout().isBigEndian())
166           std::swap(Lo, Hi);
167         EVT TotalVT = EVT::getIntegerVT(*DAG.getContext(), NumParts * PartBits);
168         Hi = DAG.getNode(ISD::ANY_EXTEND, DL, TotalVT, Hi);
169         Hi =
170             DAG.getNode(ISD::SHL, DL, TotalVT, Hi,
171                         DAG.getConstant(Lo.getValueType().getSizeInBits(), DL,
172                                         TLI.getPointerTy(DAG.getDataLayout())));
173         Lo = DAG.getNode(ISD::ZERO_EXTEND, DL, TotalVT, Lo);
174         Val = DAG.getNode(ISD::OR, DL, TotalVT, Lo, Hi);
175       }
176     } else if (PartVT.isFloatingPoint()) {
177       // FP split into multiple FP parts (for ppcf128)
178       assert(ValueVT == EVT(MVT::ppcf128) && PartVT == MVT::f64 &&
179              "Unexpected split");
180       SDValue Lo, Hi;
181       Lo = DAG.getNode(ISD::BITCAST, DL, EVT(MVT::f64), Parts[0]);
182       Hi = DAG.getNode(ISD::BITCAST, DL, EVT(MVT::f64), Parts[1]);
183       if (TLI.hasBigEndianPartOrdering(ValueVT, DAG.getDataLayout()))
184         std::swap(Lo, Hi);
185       Val = DAG.getNode(ISD::BUILD_PAIR, DL, ValueVT, Lo, Hi);
186     } else {
187       // FP split into integer parts (soft fp)
188       assert(ValueVT.isFloatingPoint() && PartVT.isInteger() &&
189              !PartVT.isVector() && "Unexpected split");
190       EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), ValueVT.getSizeInBits());
191       Val = getCopyFromParts(DAG, DL, Parts, NumParts, PartVT, IntVT, V);
192     }
193   }
194
195   // There is now one part, held in Val.  Correct it to match ValueVT.
196   EVT PartEVT = Val.getValueType();
197
198   if (PartEVT == ValueVT)
199     return Val;
200
201   if (PartEVT.isInteger() && ValueVT.isFloatingPoint() &&
202       ValueVT.bitsLT(PartEVT)) {
203     // For an FP value in an integer part, we need to truncate to the right
204     // width first.
205     PartEVT = EVT::getIntegerVT(*DAG.getContext(),  ValueVT.getSizeInBits());
206     Val = DAG.getNode(ISD::TRUNCATE, DL, PartEVT, Val);
207   }
208
209   if (PartEVT.isInteger() && ValueVT.isInteger()) {
210     if (ValueVT.bitsLT(PartEVT)) {
211       // For a truncate, see if we have any information to
212       // indicate whether the truncated bits will always be
213       // zero or sign-extension.
214       if (AssertOp != ISD::DELETED_NODE)
215         Val = DAG.getNode(AssertOp, DL, PartEVT, Val,
216                           DAG.getValueType(ValueVT));
217       return DAG.getNode(ISD::TRUNCATE, DL, ValueVT, Val);
218     }
219     return DAG.getNode(ISD::ANY_EXTEND, DL, ValueVT, Val);
220   }
221
222   if (PartEVT.isFloatingPoint() && ValueVT.isFloatingPoint()) {
223     // FP_ROUND's are always exact here.
224     if (ValueVT.bitsLT(Val.getValueType()))
225       return DAG.getNode(
226           ISD::FP_ROUND, DL, ValueVT, Val,
227           DAG.getTargetConstant(1, DL, TLI.getPointerTy(DAG.getDataLayout())));
228
229     return DAG.getNode(ISD::FP_EXTEND, DL, ValueVT, Val);
230   }
231
232   if (PartEVT.getSizeInBits() == ValueVT.getSizeInBits())
233     return DAG.getNode(ISD::BITCAST, DL, ValueVT, Val);
234
235   llvm_unreachable("Unknown mismatch!");
236 }
237
238 static void diagnosePossiblyInvalidConstraint(LLVMContext &Ctx, const Value *V,
239                                               const Twine &ErrMsg) {
240   const Instruction *I = dyn_cast_or_null<Instruction>(V);
241   if (!V)
242     return Ctx.emitError(ErrMsg);
243
244   const char *AsmError = ", possible invalid constraint for vector type";
245   if (const CallInst *CI = dyn_cast<CallInst>(I))
246     if (isa<InlineAsm>(CI->getCalledValue()))
247       return Ctx.emitError(I, ErrMsg + AsmError);
248
249   return Ctx.emitError(I, ErrMsg);
250 }
251
252 /// getCopyFromPartsVector - Create a value that contains the specified legal
253 /// parts combined into the value they represent.  If the parts combine to a
254 /// type larger then ValueVT then AssertOp can be used to specify whether the
255 /// extra bits are known to be zero (ISD::AssertZext) or sign extended from
256 /// ValueVT (ISD::AssertSext).
257 static SDValue getCopyFromPartsVector(SelectionDAG &DAG, SDLoc DL,
258                                       const SDValue *Parts, unsigned NumParts,
259                                       MVT PartVT, EVT ValueVT, const Value *V) {
260   assert(ValueVT.isVector() && "Not a vector value");
261   assert(NumParts > 0 && "No parts to assemble!");
262   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
263   SDValue Val = Parts[0];
264
265   // Handle a multi-element vector.
266   if (NumParts > 1) {
267     EVT IntermediateVT;
268     MVT RegisterVT;
269     unsigned NumIntermediates;
270     unsigned NumRegs =
271     TLI.getVectorTypeBreakdown(*DAG.getContext(), ValueVT, IntermediateVT,
272                                NumIntermediates, RegisterVT);
273     assert(NumRegs == NumParts && "Part count doesn't match vector breakdown!");
274     NumParts = NumRegs; // Silence a compiler warning.
275     assert(RegisterVT == PartVT && "Part type doesn't match vector breakdown!");
276     assert(RegisterVT.getSizeInBits() ==
277            Parts[0].getSimpleValueType().getSizeInBits() &&
278            "Part type sizes don't match!");
279
280     // Assemble the parts into intermediate operands.
281     SmallVector<SDValue, 8> Ops(NumIntermediates);
282     if (NumIntermediates == NumParts) {
283       // If the register was not expanded, truncate or copy the value,
284       // as appropriate.
285       for (unsigned i = 0; i != NumParts; ++i)
286         Ops[i] = getCopyFromParts(DAG, DL, &Parts[i], 1,
287                                   PartVT, IntermediateVT, V);
288     } else if (NumParts > 0) {
289       // If the intermediate type was expanded, build the intermediate
290       // operands from the parts.
291       assert(NumParts % NumIntermediates == 0 &&
292              "Must expand into a divisible number of parts!");
293       unsigned Factor = NumParts / NumIntermediates;
294       for (unsigned i = 0; i != NumIntermediates; ++i)
295         Ops[i] = getCopyFromParts(DAG, DL, &Parts[i * Factor], Factor,
296                                   PartVT, IntermediateVT, V);
297     }
298
299     // Build a vector with BUILD_VECTOR or CONCAT_VECTORS from the
300     // intermediate operands.
301     Val = DAG.getNode(IntermediateVT.isVector() ? ISD::CONCAT_VECTORS
302                                                 : ISD::BUILD_VECTOR,
303                       DL, ValueVT, Ops);
304   }
305
306   // There is now one part, held in Val.  Correct it to match ValueVT.
307   EVT PartEVT = Val.getValueType();
308
309   if (PartEVT == ValueVT)
310     return Val;
311
312   if (PartEVT.isVector()) {
313     // If the element type of the source/dest vectors are the same, but the
314     // parts vector has more elements than the value vector, then we have a
315     // vector widening case (e.g. <2 x float> -> <4 x float>).  Extract the
316     // elements we want.
317     if (PartEVT.getVectorElementType() == ValueVT.getVectorElementType()) {
318       assert(PartEVT.getVectorNumElements() > ValueVT.getVectorNumElements() &&
319              "Cannot narrow, it would be a lossy transformation");
320       return DAG.getNode(
321           ISD::EXTRACT_SUBVECTOR, DL, ValueVT, Val,
322           DAG.getConstant(0, DL, TLI.getVectorIdxTy(DAG.getDataLayout())));
323     }
324
325     // Vector/Vector bitcast.
326     if (ValueVT.getSizeInBits() == PartEVT.getSizeInBits())
327       return DAG.getNode(ISD::BITCAST, DL, ValueVT, Val);
328
329     assert(PartEVT.getVectorNumElements() == ValueVT.getVectorNumElements() &&
330       "Cannot handle this kind of promotion");
331     // Promoted vector extract
332     return DAG.getAnyExtOrTrunc(Val, DL, ValueVT);
333
334   }
335
336   // Trivial bitcast if the types are the same size and the destination
337   // vector type is legal.
338   if (PartEVT.getSizeInBits() == ValueVT.getSizeInBits() &&
339       TLI.isTypeLegal(ValueVT))
340     return DAG.getNode(ISD::BITCAST, DL, ValueVT, Val);
341
342   // Handle cases such as i8 -> <1 x i1>
343   if (ValueVT.getVectorNumElements() != 1) {
344     diagnosePossiblyInvalidConstraint(*DAG.getContext(), V,
345                                       "non-trivial scalar-to-vector conversion");
346     return DAG.getUNDEF(ValueVT);
347   }
348
349   if (ValueVT.getVectorNumElements() == 1 &&
350       ValueVT.getVectorElementType() != PartEVT)
351     Val = DAG.getAnyExtOrTrunc(Val, DL, ValueVT.getScalarType());
352
353   return DAG.getNode(ISD::BUILD_VECTOR, DL, ValueVT, Val);
354 }
355
356 static void getCopyToPartsVector(SelectionDAG &DAG, SDLoc dl,
357                                  SDValue Val, SDValue *Parts, unsigned NumParts,
358                                  MVT PartVT, const Value *V);
359
360 /// getCopyToParts - Create a series of nodes that contain the specified value
361 /// split into legal parts.  If the parts contain more bits than Val, then, for
362 /// integers, ExtendKind can be used to specify how to generate the extra bits.
363 static void getCopyToParts(SelectionDAG &DAG, SDLoc DL,
364                            SDValue Val, SDValue *Parts, unsigned NumParts,
365                            MVT PartVT, const Value *V,
366                            ISD::NodeType ExtendKind = ISD::ANY_EXTEND) {
367   EVT ValueVT = Val.getValueType();
368
369   // Handle the vector case separately.
370   if (ValueVT.isVector())
371     return getCopyToPartsVector(DAG, DL, Val, Parts, NumParts, PartVT, V);
372
373   unsigned PartBits = PartVT.getSizeInBits();
374   unsigned OrigNumParts = NumParts;
375   assert(DAG.getTargetLoweringInfo().isTypeLegal(PartVT) &&
376          "Copying to an illegal type!");
377
378   if (NumParts == 0)
379     return;
380
381   assert(!ValueVT.isVector() && "Vector case handled elsewhere");
382   EVT PartEVT = PartVT;
383   if (PartEVT == ValueVT) {
384     assert(NumParts == 1 && "No-op copy with multiple parts!");
385     Parts[0] = Val;
386     return;
387   }
388
389   if (NumParts * PartBits > ValueVT.getSizeInBits()) {
390     // If the parts cover more bits than the value has, promote the value.
391     if (PartVT.isFloatingPoint() && ValueVT.isFloatingPoint()) {
392       assert(NumParts == 1 && "Do not know what to promote to!");
393       Val = DAG.getNode(ISD::FP_EXTEND, DL, PartVT, Val);
394     } else {
395       if (ValueVT.isFloatingPoint()) {
396         // FP values need to be bitcast, then extended if they are being put
397         // into a larger container.
398         ValueVT = EVT::getIntegerVT(*DAG.getContext(),  ValueVT.getSizeInBits());
399         Val = DAG.getNode(ISD::BITCAST, DL, ValueVT, Val);
400       }
401       assert((PartVT.isInteger() || PartVT == MVT::x86mmx) &&
402              ValueVT.isInteger() &&
403              "Unknown mismatch!");
404       ValueVT = EVT::getIntegerVT(*DAG.getContext(), NumParts * PartBits);
405       Val = DAG.getNode(ExtendKind, DL, ValueVT, Val);
406       if (PartVT == MVT::x86mmx)
407         Val = DAG.getNode(ISD::BITCAST, DL, PartVT, Val);
408     }
409   } else if (PartBits == ValueVT.getSizeInBits()) {
410     // Different types of the same size.
411     assert(NumParts == 1 && PartEVT != ValueVT);
412     Val = DAG.getNode(ISD::BITCAST, DL, PartVT, Val);
413   } else if (NumParts * PartBits < ValueVT.getSizeInBits()) {
414     // If the parts cover less bits than value has, truncate the value.
415     assert((PartVT.isInteger() || PartVT == MVT::x86mmx) &&
416            ValueVT.isInteger() &&
417            "Unknown mismatch!");
418     ValueVT = EVT::getIntegerVT(*DAG.getContext(), NumParts * PartBits);
419     Val = DAG.getNode(ISD::TRUNCATE, DL, ValueVT, Val);
420     if (PartVT == MVT::x86mmx)
421       Val = DAG.getNode(ISD::BITCAST, DL, PartVT, Val);
422   }
423
424   // The value may have changed - recompute ValueVT.
425   ValueVT = Val.getValueType();
426   assert(NumParts * PartBits == ValueVT.getSizeInBits() &&
427          "Failed to tile the value with PartVT!");
428
429   if (NumParts == 1) {
430     if (PartEVT != ValueVT)
431       diagnosePossiblyInvalidConstraint(*DAG.getContext(), V,
432                                         "scalar-to-vector conversion failed");
433
434     Parts[0] = Val;
435     return;
436   }
437
438   // Expand the value into multiple parts.
439   if (NumParts & (NumParts - 1)) {
440     // The number of parts is not a power of 2.  Split off and copy the tail.
441     assert(PartVT.isInteger() && ValueVT.isInteger() &&
442            "Do not know what to expand to!");
443     unsigned RoundParts = 1 << Log2_32(NumParts);
444     unsigned RoundBits = RoundParts * PartBits;
445     unsigned OddParts = NumParts - RoundParts;
446     SDValue OddVal = DAG.getNode(ISD::SRL, DL, ValueVT, Val,
447                                  DAG.getIntPtrConstant(RoundBits, DL));
448     getCopyToParts(DAG, DL, OddVal, Parts + RoundParts, OddParts, PartVT, V);
449
450     if (DAG.getDataLayout().isBigEndian())
451       // The odd parts were reversed by getCopyToParts - unreverse them.
452       std::reverse(Parts + RoundParts, Parts + NumParts);
453
454     NumParts = RoundParts;
455     ValueVT = EVT::getIntegerVT(*DAG.getContext(), NumParts * PartBits);
456     Val = DAG.getNode(ISD::TRUNCATE, DL, ValueVT, Val);
457   }
458
459   // The number of parts is a power of 2.  Repeatedly bisect the value using
460   // EXTRACT_ELEMENT.
461   Parts[0] = DAG.getNode(ISD::BITCAST, DL,
462                          EVT::getIntegerVT(*DAG.getContext(),
463                                            ValueVT.getSizeInBits()),
464                          Val);
465
466   for (unsigned StepSize = NumParts; StepSize > 1; StepSize /= 2) {
467     for (unsigned i = 0; i < NumParts; i += StepSize) {
468       unsigned ThisBits = StepSize * PartBits / 2;
469       EVT ThisVT = EVT::getIntegerVT(*DAG.getContext(), ThisBits);
470       SDValue &Part0 = Parts[i];
471       SDValue &Part1 = Parts[i+StepSize/2];
472
473       Part1 = DAG.getNode(ISD::EXTRACT_ELEMENT, DL,
474                           ThisVT, Part0, DAG.getIntPtrConstant(1, DL));
475       Part0 = DAG.getNode(ISD::EXTRACT_ELEMENT, DL,
476                           ThisVT, Part0, DAG.getIntPtrConstant(0, DL));
477
478       if (ThisBits == PartBits && ThisVT != PartVT) {
479         Part0 = DAG.getNode(ISD::BITCAST, DL, PartVT, Part0);
480         Part1 = DAG.getNode(ISD::BITCAST, DL, PartVT, Part1);
481       }
482     }
483   }
484
485   if (DAG.getDataLayout().isBigEndian())
486     std::reverse(Parts, Parts + OrigNumParts);
487 }
488
489
490 /// getCopyToPartsVector - Create a series of nodes that contain the specified
491 /// value split into legal parts.
492 static void getCopyToPartsVector(SelectionDAG &DAG, SDLoc DL,
493                                  SDValue Val, SDValue *Parts, unsigned NumParts,
494                                  MVT PartVT, const Value *V) {
495   EVT ValueVT = Val.getValueType();
496   assert(ValueVT.isVector() && "Not a vector");
497   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
498
499   if (NumParts == 1) {
500     EVT PartEVT = PartVT;
501     if (PartEVT == ValueVT) {
502       // Nothing to do.
503     } else if (PartVT.getSizeInBits() == ValueVT.getSizeInBits()) {
504       // Bitconvert vector->vector case.
505       Val = DAG.getNode(ISD::BITCAST, DL, PartVT, Val);
506     } else if (PartVT.isVector() &&
507                PartEVT.getVectorElementType() == ValueVT.getVectorElementType() &&
508                PartEVT.getVectorNumElements() > ValueVT.getVectorNumElements()) {
509       EVT ElementVT = PartVT.getVectorElementType();
510       // Vector widening case, e.g. <2 x float> -> <4 x float>.  Shuffle in
511       // undef elements.
512       SmallVector<SDValue, 16> Ops;
513       for (unsigned i = 0, e = ValueVT.getVectorNumElements(); i != e; ++i)
514         Ops.push_back(DAG.getNode(
515             ISD::EXTRACT_VECTOR_ELT, DL, ElementVT, Val,
516             DAG.getConstant(i, DL, TLI.getVectorIdxTy(DAG.getDataLayout()))));
517
518       for (unsigned i = ValueVT.getVectorNumElements(),
519            e = PartVT.getVectorNumElements(); i != e; ++i)
520         Ops.push_back(DAG.getUNDEF(ElementVT));
521
522       Val = DAG.getNode(ISD::BUILD_VECTOR, DL, PartVT, Ops);
523
524       // FIXME: Use CONCAT for 2x -> 4x.
525
526       //SDValue UndefElts = DAG.getUNDEF(VectorTy);
527       //Val = DAG.getNode(ISD::CONCAT_VECTORS, DL, PartVT, Val, UndefElts);
528     } else if (PartVT.isVector() &&
529                PartEVT.getVectorElementType().bitsGE(
530                  ValueVT.getVectorElementType()) &&
531                PartEVT.getVectorNumElements() == ValueVT.getVectorNumElements()) {
532
533       // Promoted vector extract
534       Val = DAG.getAnyExtOrTrunc(Val, DL, PartVT);
535     } else{
536       // Vector -> scalar conversion.
537       assert(ValueVT.getVectorNumElements() == 1 &&
538              "Only trivial vector-to-scalar conversions should get here!");
539       Val = DAG.getNode(
540           ISD::EXTRACT_VECTOR_ELT, DL, PartVT, Val,
541           DAG.getConstant(0, DL, TLI.getVectorIdxTy(DAG.getDataLayout())));
542
543       Val = DAG.getAnyExtOrTrunc(Val, DL, PartVT);
544     }
545
546     Parts[0] = Val;
547     return;
548   }
549
550   // Handle a multi-element vector.
551   EVT IntermediateVT;
552   MVT RegisterVT;
553   unsigned NumIntermediates;
554   unsigned NumRegs = TLI.getVectorTypeBreakdown(*DAG.getContext(), ValueVT,
555                                                 IntermediateVT,
556                                                 NumIntermediates, RegisterVT);
557   unsigned NumElements = ValueVT.getVectorNumElements();
558
559   assert(NumRegs == NumParts && "Part count doesn't match vector breakdown!");
560   NumParts = NumRegs; // Silence a compiler warning.
561   assert(RegisterVT == PartVT && "Part type doesn't match vector breakdown!");
562
563   // Split the vector into intermediate operands.
564   SmallVector<SDValue, 8> Ops(NumIntermediates);
565   for (unsigned i = 0; i != NumIntermediates; ++i) {
566     if (IntermediateVT.isVector())
567       Ops[i] =
568           DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, IntermediateVT, Val,
569                       DAG.getConstant(i * (NumElements / NumIntermediates), DL,
570                                       TLI.getVectorIdxTy(DAG.getDataLayout())));
571     else
572       Ops[i] = DAG.getNode(
573           ISD::EXTRACT_VECTOR_ELT, DL, IntermediateVT, Val,
574           DAG.getConstant(i, DL, TLI.getVectorIdxTy(DAG.getDataLayout())));
575   }
576
577   // Split the intermediate operands into legal parts.
578   if (NumParts == NumIntermediates) {
579     // If the register was not expanded, promote or copy the value,
580     // as appropriate.
581     for (unsigned i = 0; i != NumParts; ++i)
582       getCopyToParts(DAG, DL, Ops[i], &Parts[i], 1, PartVT, V);
583   } else if (NumParts > 0) {
584     // If the intermediate type was expanded, split each the value into
585     // legal parts.
586     assert(NumIntermediates != 0 && "division by zero");
587     assert(NumParts % NumIntermediates == 0 &&
588            "Must expand into a divisible number of parts!");
589     unsigned Factor = NumParts / NumIntermediates;
590     for (unsigned i = 0; i != NumIntermediates; ++i)
591       getCopyToParts(DAG, DL, Ops[i], &Parts[i*Factor], Factor, PartVT, V);
592   }
593 }
594
595 RegsForValue::RegsForValue() {}
596
597 RegsForValue::RegsForValue(const SmallVector<unsigned, 4> &regs, MVT regvt,
598                            EVT valuevt)
599     : ValueVTs(1, valuevt), RegVTs(1, regvt), Regs(regs) {}
600
601 RegsForValue::RegsForValue(LLVMContext &Context, const TargetLowering &TLI,
602                            const DataLayout &DL, unsigned Reg, Type *Ty) {
603   ComputeValueVTs(TLI, DL, Ty, ValueVTs);
604
605   for (EVT ValueVT : ValueVTs) {
606     unsigned NumRegs = TLI.getNumRegisters(Context, ValueVT);
607     MVT RegisterVT = TLI.getRegisterType(Context, ValueVT);
608     for (unsigned i = 0; i != NumRegs; ++i)
609       Regs.push_back(Reg + i);
610     RegVTs.push_back(RegisterVT);
611     Reg += NumRegs;
612   }
613 }
614
615 /// getCopyFromRegs - Emit a series of CopyFromReg nodes that copies from
616 /// this value and returns the result as a ValueVT value.  This uses
617 /// Chain/Flag as the input and updates them for the output Chain/Flag.
618 /// If the Flag pointer is NULL, no flag is used.
619 SDValue RegsForValue::getCopyFromRegs(SelectionDAG &DAG,
620                                       FunctionLoweringInfo &FuncInfo,
621                                       SDLoc dl,
622                                       SDValue &Chain, SDValue *Flag,
623                                       const Value *V) const {
624   // A Value with type {} or [0 x %t] needs no registers.
625   if (ValueVTs.empty())
626     return SDValue();
627
628   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
629
630   // Assemble the legal parts into the final values.
631   SmallVector<SDValue, 4> Values(ValueVTs.size());
632   SmallVector<SDValue, 8> Parts;
633   for (unsigned Value = 0, Part = 0, e = ValueVTs.size(); Value != e; ++Value) {
634     // Copy the legal parts from the registers.
635     EVT ValueVT = ValueVTs[Value];
636     unsigned NumRegs = TLI.getNumRegisters(*DAG.getContext(), ValueVT);
637     MVT RegisterVT = RegVTs[Value];
638
639     Parts.resize(NumRegs);
640     for (unsigned i = 0; i != NumRegs; ++i) {
641       SDValue P;
642       if (!Flag) {
643         P = DAG.getCopyFromReg(Chain, dl, Regs[Part+i], RegisterVT);
644       } else {
645         P = DAG.getCopyFromReg(Chain, dl, Regs[Part+i], RegisterVT, *Flag);
646         *Flag = P.getValue(2);
647       }
648
649       Chain = P.getValue(1);
650       Parts[i] = P;
651
652       // If the source register was virtual and if we know something about it,
653       // add an assert node.
654       if (!TargetRegisterInfo::isVirtualRegister(Regs[Part+i]) ||
655           !RegisterVT.isInteger() || RegisterVT.isVector())
656         continue;
657
658       const FunctionLoweringInfo::LiveOutInfo *LOI =
659         FuncInfo.GetLiveOutRegInfo(Regs[Part+i]);
660       if (!LOI)
661         continue;
662
663       unsigned RegSize = RegisterVT.getSizeInBits();
664       unsigned NumSignBits = LOI->NumSignBits;
665       unsigned NumZeroBits = LOI->KnownZero.countLeadingOnes();
666
667       if (NumZeroBits == RegSize) {
668         // The current value is a zero.
669         // Explicitly express that as it would be easier for
670         // optimizations to kick in.
671         Parts[i] = DAG.getConstant(0, dl, RegisterVT);
672         continue;
673       }
674
675       // FIXME: We capture more information than the dag can represent.  For
676       // now, just use the tightest assertzext/assertsext possible.
677       bool isSExt = true;
678       EVT FromVT(MVT::Other);
679       if (NumSignBits == RegSize)
680         isSExt = true, FromVT = MVT::i1;   // ASSERT SEXT 1
681       else if (NumZeroBits >= RegSize-1)
682         isSExt = false, FromVT = MVT::i1;  // ASSERT ZEXT 1
683       else if (NumSignBits > RegSize-8)
684         isSExt = true, FromVT = MVT::i8;   // ASSERT SEXT 8
685       else if (NumZeroBits >= RegSize-8)
686         isSExt = false, FromVT = MVT::i8;  // ASSERT ZEXT 8
687       else if (NumSignBits > RegSize-16)
688         isSExt = true, FromVT = MVT::i16;  // ASSERT SEXT 16
689       else if (NumZeroBits >= RegSize-16)
690         isSExt = false, FromVT = MVT::i16; // ASSERT ZEXT 16
691       else if (NumSignBits > RegSize-32)
692         isSExt = true, FromVT = MVT::i32;  // ASSERT SEXT 32
693       else if (NumZeroBits >= RegSize-32)
694         isSExt = false, FromVT = MVT::i32; // ASSERT ZEXT 32
695       else
696         continue;
697
698       // Add an assertion node.
699       assert(FromVT != MVT::Other);
700       Parts[i] = DAG.getNode(isSExt ? ISD::AssertSext : ISD::AssertZext, dl,
701                              RegisterVT, P, DAG.getValueType(FromVT));
702     }
703
704     Values[Value] = getCopyFromParts(DAG, dl, Parts.begin(),
705                                      NumRegs, RegisterVT, ValueVT, V);
706     Part += NumRegs;
707     Parts.clear();
708   }
709
710   return DAG.getNode(ISD::MERGE_VALUES, dl, DAG.getVTList(ValueVTs), Values);
711 }
712
713 /// getCopyToRegs - Emit a series of CopyToReg nodes that copies the
714 /// specified value into the registers specified by this object.  This uses
715 /// Chain/Flag as the input and updates them for the output Chain/Flag.
716 /// If the Flag pointer is NULL, no flag is used.
717 void RegsForValue::getCopyToRegs(SDValue Val, SelectionDAG &DAG, SDLoc dl,
718                                  SDValue &Chain, SDValue *Flag, const Value *V,
719                                  ISD::NodeType PreferredExtendType) const {
720   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
721   ISD::NodeType ExtendKind = PreferredExtendType;
722
723   // Get the list of the values's legal parts.
724   unsigned NumRegs = Regs.size();
725   SmallVector<SDValue, 8> Parts(NumRegs);
726   for (unsigned Value = 0, Part = 0, e = ValueVTs.size(); Value != e; ++Value) {
727     EVT ValueVT = ValueVTs[Value];
728     unsigned NumParts = TLI.getNumRegisters(*DAG.getContext(), ValueVT);
729     MVT RegisterVT = RegVTs[Value];
730
731     if (ExtendKind == ISD::ANY_EXTEND && TLI.isZExtFree(Val, RegisterVT))
732       ExtendKind = ISD::ZERO_EXTEND;
733
734     getCopyToParts(DAG, dl, Val.getValue(Val.getResNo() + Value),
735                    &Parts[Part], NumParts, RegisterVT, V, ExtendKind);
736     Part += NumParts;
737   }
738
739   // Copy the parts into the registers.
740   SmallVector<SDValue, 8> Chains(NumRegs);
741   for (unsigned i = 0; i != NumRegs; ++i) {
742     SDValue Part;
743     if (!Flag) {
744       Part = DAG.getCopyToReg(Chain, dl, Regs[i], Parts[i]);
745     } else {
746       Part = DAG.getCopyToReg(Chain, dl, Regs[i], Parts[i], *Flag);
747       *Flag = Part.getValue(1);
748     }
749
750     Chains[i] = Part.getValue(0);
751   }
752
753   if (NumRegs == 1 || Flag)
754     // If NumRegs > 1 && Flag is used then the use of the last CopyToReg is
755     // flagged to it. That is the CopyToReg nodes and the user are considered
756     // a single scheduling unit. If we create a TokenFactor and return it as
757     // chain, then the TokenFactor is both a predecessor (operand) of the
758     // user as well as a successor (the TF operands are flagged to the user).
759     // c1, f1 = CopyToReg
760     // c2, f2 = CopyToReg
761     // c3     = TokenFactor c1, c2
762     // ...
763     //        = op c3, ..., f2
764     Chain = Chains[NumRegs-1];
765   else
766     Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Chains);
767 }
768
769 /// AddInlineAsmOperands - Add this value to the specified inlineasm node
770 /// operand list.  This adds the code marker and includes the number of
771 /// values added into it.
772 void RegsForValue::AddInlineAsmOperands(unsigned Code, bool HasMatching,
773                                         unsigned MatchingIdx, SDLoc dl,
774                                         SelectionDAG &DAG,
775                                         std::vector<SDValue> &Ops) const {
776   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
777
778   unsigned Flag = InlineAsm::getFlagWord(Code, Regs.size());
779   if (HasMatching)
780     Flag = InlineAsm::getFlagWordForMatchingOp(Flag, MatchingIdx);
781   else if (!Regs.empty() &&
782            TargetRegisterInfo::isVirtualRegister(Regs.front())) {
783     // Put the register class of the virtual registers in the flag word.  That
784     // way, later passes can recompute register class constraints for inline
785     // assembly as well as normal instructions.
786     // Don't do this for tied operands that can use the regclass information
787     // from the def.
788     const MachineRegisterInfo &MRI = DAG.getMachineFunction().getRegInfo();
789     const TargetRegisterClass *RC = MRI.getRegClass(Regs.front());
790     Flag = InlineAsm::getFlagWordForRegClass(Flag, RC->getID());
791   }
792
793   SDValue Res = DAG.getTargetConstant(Flag, dl, MVT::i32);
794   Ops.push_back(Res);
795
796   unsigned SP = TLI.getStackPointerRegisterToSaveRestore();
797   for (unsigned Value = 0, Reg = 0, e = ValueVTs.size(); Value != e; ++Value) {
798     unsigned NumRegs = TLI.getNumRegisters(*DAG.getContext(), ValueVTs[Value]);
799     MVT RegisterVT = RegVTs[Value];
800     for (unsigned i = 0; i != NumRegs; ++i) {
801       assert(Reg < Regs.size() && "Mismatch in # registers expected");
802       unsigned TheReg = Regs[Reg++];
803       Ops.push_back(DAG.getRegister(TheReg, RegisterVT));
804
805       if (TheReg == SP && Code == InlineAsm::Kind_Clobber) {
806         // If we clobbered the stack pointer, MFI should know about it.
807         assert(DAG.getMachineFunction().getFrameInfo()->
808             hasOpaqueSPAdjustment());
809       }
810     }
811   }
812 }
813
814 void SelectionDAGBuilder::init(GCFunctionInfo *gfi, AliasAnalysis &aa,
815                                const TargetLibraryInfo *li) {
816   AA = &aa;
817   GFI = gfi;
818   LibInfo = li;
819   DL = &DAG.getDataLayout();
820   Context = DAG.getContext();
821   LPadToCallSiteMap.clear();
822 }
823
824 /// clear - Clear out the current SelectionDAG and the associated
825 /// state and prepare this SelectionDAGBuilder object to be used
826 /// for a new block. This doesn't clear out information about
827 /// additional blocks that are needed to complete switch lowering
828 /// or PHI node updating; that information is cleared out as it is
829 /// consumed.
830 void SelectionDAGBuilder::clear() {
831   NodeMap.clear();
832   UnusedArgNodeMap.clear();
833   PendingLoads.clear();
834   PendingExports.clear();
835   CurInst = nullptr;
836   HasTailCall = false;
837   SDNodeOrder = LowestSDNodeOrder;
838   StatepointLowering.clear();
839 }
840
841 /// clearDanglingDebugInfo - Clear the dangling debug information
842 /// map. This function is separated from the clear so that debug
843 /// information that is dangling in a basic block can be properly
844 /// resolved in a different basic block. This allows the
845 /// SelectionDAG to resolve dangling debug information attached
846 /// to PHI nodes.
847 void SelectionDAGBuilder::clearDanglingDebugInfo() {
848   DanglingDebugInfoMap.clear();
849 }
850
851 /// getRoot - Return the current virtual root of the Selection DAG,
852 /// flushing any PendingLoad items. This must be done before emitting
853 /// a store or any other node that may need to be ordered after any
854 /// prior load instructions.
855 ///
856 SDValue SelectionDAGBuilder::getRoot() {
857   if (PendingLoads.empty())
858     return DAG.getRoot();
859
860   if (PendingLoads.size() == 1) {
861     SDValue Root = PendingLoads[0];
862     DAG.setRoot(Root);
863     PendingLoads.clear();
864     return Root;
865   }
866
867   // Otherwise, we have to make a token factor node.
868   SDValue Root = DAG.getNode(ISD::TokenFactor, getCurSDLoc(), MVT::Other,
869                              PendingLoads);
870   PendingLoads.clear();
871   DAG.setRoot(Root);
872   return Root;
873 }
874
875 /// getControlRoot - Similar to getRoot, but instead of flushing all the
876 /// PendingLoad items, flush all the PendingExports items. It is necessary
877 /// to do this before emitting a terminator instruction.
878 ///
879 SDValue SelectionDAGBuilder::getControlRoot() {
880   SDValue Root = DAG.getRoot();
881
882   if (PendingExports.empty())
883     return Root;
884
885   // Turn all of the CopyToReg chains into one factored node.
886   if (Root.getOpcode() != ISD::EntryToken) {
887     unsigned i = 0, e = PendingExports.size();
888     for (; i != e; ++i) {
889       assert(PendingExports[i].getNode()->getNumOperands() > 1);
890       if (PendingExports[i].getNode()->getOperand(0) == Root)
891         break;  // Don't add the root if we already indirectly depend on it.
892     }
893
894     if (i == e)
895       PendingExports.push_back(Root);
896   }
897
898   Root = DAG.getNode(ISD::TokenFactor, getCurSDLoc(), MVT::Other,
899                      PendingExports);
900   PendingExports.clear();
901   DAG.setRoot(Root);
902   return Root;
903 }
904
905 void SelectionDAGBuilder::visit(const Instruction &I) {
906   // Set up outgoing PHI node register values before emitting the terminator.
907   if (isa<TerminatorInst>(&I))
908     HandlePHINodesInSuccessorBlocks(I.getParent());
909
910   ++SDNodeOrder;
911
912   CurInst = &I;
913
914   visit(I.getOpcode(), I);
915
916   if (!isa<TerminatorInst>(&I) && !HasTailCall &&
917       !isStatepoint(&I)) // statepoints handle their exports internally
918     CopyToExportRegsIfNeeded(&I);
919
920   CurInst = nullptr;
921 }
922
923 void SelectionDAGBuilder::visitPHI(const PHINode &) {
924   llvm_unreachable("SelectionDAGBuilder shouldn't visit PHI nodes!");
925 }
926
927 void SelectionDAGBuilder::visit(unsigned Opcode, const User &I) {
928   // Note: this doesn't use InstVisitor, because it has to work with
929   // ConstantExpr's in addition to instructions.
930   switch (Opcode) {
931   default: llvm_unreachable("Unknown instruction type encountered!");
932     // Build the switch statement using the Instruction.def file.
933 #define HANDLE_INST(NUM, OPCODE, CLASS) \
934     case Instruction::OPCODE: visit##OPCODE((const CLASS&)I); break;
935 #include "llvm/IR/Instruction.def"
936   }
937 }
938
939 // resolveDanglingDebugInfo - if we saw an earlier dbg_value referring to V,
940 // generate the debug data structures now that we've seen its definition.
941 void SelectionDAGBuilder::resolveDanglingDebugInfo(const Value *V,
942                                                    SDValue Val) {
943   DanglingDebugInfo &DDI = DanglingDebugInfoMap[V];
944   if (DDI.getDI()) {
945     const DbgValueInst *DI = DDI.getDI();
946     DebugLoc dl = DDI.getdl();
947     unsigned DbgSDNodeOrder = DDI.getSDNodeOrder();
948     DILocalVariable *Variable = DI->getVariable();
949     DIExpression *Expr = DI->getExpression();
950     assert(Variable->isValidLocationForIntrinsic(dl) &&
951            "Expected inlined-at fields to agree");
952     uint64_t Offset = DI->getOffset();
953     // A dbg.value for an alloca is always indirect.
954     bool IsIndirect = isa<AllocaInst>(V) || Offset != 0;
955     SDDbgValue *SDV;
956     if (Val.getNode()) {
957       if (!EmitFuncArgumentDbgValue(V, Variable, Expr, dl, Offset, IsIndirect,
958                                     Val)) {
959         SDV = DAG.getDbgValue(Variable, Expr, Val.getNode(), Val.getResNo(),
960                               IsIndirect, Offset, dl, DbgSDNodeOrder);
961         DAG.AddDbgValue(SDV, Val.getNode(), false);
962       }
963     } else
964       DEBUG(dbgs() << "Dropping debug info for " << *DI << "\n");
965     DanglingDebugInfoMap[V] = DanglingDebugInfo();
966   }
967 }
968
969 /// getCopyFromRegs - If there was virtual register allocated for the value V
970 /// emit CopyFromReg of the specified type Ty. Return empty SDValue() otherwise.
971 SDValue SelectionDAGBuilder::getCopyFromRegs(const Value *V, Type *Ty) {
972   DenseMap<const Value *, unsigned>::iterator It = FuncInfo.ValueMap.find(V);
973   SDValue Result;
974
975   if (It != FuncInfo.ValueMap.end()) {
976     unsigned InReg = It->second;
977     RegsForValue RFV(*DAG.getContext(), DAG.getTargetLoweringInfo(),
978                      DAG.getDataLayout(), InReg, Ty);
979     SDValue Chain = DAG.getEntryNode();
980     Result = RFV.getCopyFromRegs(DAG, FuncInfo, getCurSDLoc(), Chain, nullptr, V);
981     resolveDanglingDebugInfo(V, Result);
982   }
983
984   return Result;
985 }
986
987 /// getValue - Return an SDValue for the given Value.
988 SDValue SelectionDAGBuilder::getValue(const Value *V) {
989   // If we already have an SDValue for this value, use it. It's important
990   // to do this first, so that we don't create a CopyFromReg if we already
991   // have a regular SDValue.
992   SDValue &N = NodeMap[V];
993   if (N.getNode()) return N;
994
995   // If there's a virtual register allocated and initialized for this
996   // value, use it.
997   SDValue copyFromReg = getCopyFromRegs(V, V->getType());
998   if (copyFromReg.getNode()) {
999     return copyFromReg;
1000   }
1001
1002   // Otherwise create a new SDValue and remember it.
1003   SDValue Val = getValueImpl(V);
1004   NodeMap[V] = Val;
1005   resolveDanglingDebugInfo(V, Val);
1006   return Val;
1007 }
1008
1009 // Return true if SDValue exists for the given Value
1010 bool SelectionDAGBuilder::findValue(const Value *V) const {
1011   return (NodeMap.find(V) != NodeMap.end()) ||
1012     (FuncInfo.ValueMap.find(V) != FuncInfo.ValueMap.end());
1013 }
1014
1015 /// getNonRegisterValue - Return an SDValue for the given Value, but
1016 /// don't look in FuncInfo.ValueMap for a virtual register.
1017 SDValue SelectionDAGBuilder::getNonRegisterValue(const Value *V) {
1018   // If we already have an SDValue for this value, use it.
1019   SDValue &N = NodeMap[V];
1020   if (N.getNode()) {
1021     if (isa<ConstantSDNode>(N) || isa<ConstantFPSDNode>(N)) {
1022       // Remove the debug location from the node as the node is about to be used
1023       // in a location which may differ from the original debug location.  This
1024       // is relevant to Constant and ConstantFP nodes because they can appear
1025       // as constant expressions inside PHI nodes.
1026       N->setDebugLoc(DebugLoc());
1027     }
1028     return N;
1029   }
1030
1031   // Otherwise create a new SDValue and remember it.
1032   SDValue Val = getValueImpl(V);
1033   NodeMap[V] = Val;
1034   resolveDanglingDebugInfo(V, Val);
1035   return Val;
1036 }
1037
1038 /// getValueImpl - Helper function for getValue and getNonRegisterValue.
1039 /// Create an SDValue for the given value.
1040 SDValue SelectionDAGBuilder::getValueImpl(const Value *V) {
1041   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
1042
1043   if (const Constant *C = dyn_cast<Constant>(V)) {
1044     EVT VT = TLI.getValueType(DAG.getDataLayout(), V->getType(), true);
1045
1046     if (const ConstantInt *CI = dyn_cast<ConstantInt>(C))
1047       return DAG.getConstant(*CI, getCurSDLoc(), VT);
1048
1049     if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
1050       return DAG.getGlobalAddress(GV, getCurSDLoc(), VT);
1051
1052     if (isa<ConstantPointerNull>(C)) {
1053       unsigned AS = V->getType()->getPointerAddressSpace();
1054       return DAG.getConstant(0, getCurSDLoc(),
1055                              TLI.getPointerTy(DAG.getDataLayout(), AS));
1056     }
1057
1058     if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C))
1059       return DAG.getConstantFP(*CFP, getCurSDLoc(), VT);
1060
1061     if (isa<UndefValue>(C) && !V->getType()->isAggregateType())
1062       return DAG.getUNDEF(VT);
1063
1064     if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
1065       visit(CE->getOpcode(), *CE);
1066       SDValue N1 = NodeMap[V];
1067       assert(N1.getNode() && "visit didn't populate the NodeMap!");
1068       return N1;
1069     }
1070
1071     if (isa<ConstantStruct>(C) || isa<ConstantArray>(C)) {
1072       SmallVector<SDValue, 4> Constants;
1073       for (User::const_op_iterator OI = C->op_begin(), OE = C->op_end();
1074            OI != OE; ++OI) {
1075         SDNode *Val = getValue(*OI).getNode();
1076         // If the operand is an empty aggregate, there are no values.
1077         if (!Val) continue;
1078         // Add each leaf value from the operand to the Constants list
1079         // to form a flattened list of all the values.
1080         for (unsigned i = 0, e = Val->getNumValues(); i != e; ++i)
1081           Constants.push_back(SDValue(Val, i));
1082       }
1083
1084       return DAG.getMergeValues(Constants, getCurSDLoc());
1085     }
1086
1087     if (const ConstantDataSequential *CDS =
1088           dyn_cast<ConstantDataSequential>(C)) {
1089       SmallVector<SDValue, 4> Ops;
1090       for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i) {
1091         SDNode *Val = getValue(CDS->getElementAsConstant(i)).getNode();
1092         // Add each leaf value from the operand to the Constants list
1093         // to form a flattened list of all the values.
1094         for (unsigned i = 0, e = Val->getNumValues(); i != e; ++i)
1095           Ops.push_back(SDValue(Val, i));
1096       }
1097
1098       if (isa<ArrayType>(CDS->getType()))
1099         return DAG.getMergeValues(Ops, getCurSDLoc());
1100       return NodeMap[V] = DAG.getNode(ISD::BUILD_VECTOR, getCurSDLoc(),
1101                                       VT, Ops);
1102     }
1103
1104     if (C->getType()->isStructTy() || C->getType()->isArrayTy()) {
1105       assert((isa<ConstantAggregateZero>(C) || isa<UndefValue>(C)) &&
1106              "Unknown struct or array constant!");
1107
1108       SmallVector<EVT, 4> ValueVTs;
1109       ComputeValueVTs(TLI, DAG.getDataLayout(), C->getType(), ValueVTs);
1110       unsigned NumElts = ValueVTs.size();
1111       if (NumElts == 0)
1112         return SDValue(); // empty struct
1113       SmallVector<SDValue, 4> Constants(NumElts);
1114       for (unsigned i = 0; i != NumElts; ++i) {
1115         EVT EltVT = ValueVTs[i];
1116         if (isa<UndefValue>(C))
1117           Constants[i] = DAG.getUNDEF(EltVT);
1118         else if (EltVT.isFloatingPoint())
1119           Constants[i] = DAG.getConstantFP(0, getCurSDLoc(), EltVT);
1120         else
1121           Constants[i] = DAG.getConstant(0, getCurSDLoc(), EltVT);
1122       }
1123
1124       return DAG.getMergeValues(Constants, getCurSDLoc());
1125     }
1126
1127     if (const BlockAddress *BA = dyn_cast<BlockAddress>(C))
1128       return DAG.getBlockAddress(BA, VT);
1129
1130     VectorType *VecTy = cast<VectorType>(V->getType());
1131     unsigned NumElements = VecTy->getNumElements();
1132
1133     // Now that we know the number and type of the elements, get that number of
1134     // elements into the Ops array based on what kind of constant it is.
1135     SmallVector<SDValue, 16> Ops;
1136     if (const ConstantVector *CV = dyn_cast<ConstantVector>(C)) {
1137       for (unsigned i = 0; i != NumElements; ++i)
1138         Ops.push_back(getValue(CV->getOperand(i)));
1139     } else {
1140       assert(isa<ConstantAggregateZero>(C) && "Unknown vector constant!");
1141       EVT EltVT =
1142           TLI.getValueType(DAG.getDataLayout(), VecTy->getElementType());
1143
1144       SDValue Op;
1145       if (EltVT.isFloatingPoint())
1146         Op = DAG.getConstantFP(0, getCurSDLoc(), EltVT);
1147       else
1148         Op = DAG.getConstant(0, getCurSDLoc(), EltVT);
1149       Ops.assign(NumElements, Op);
1150     }
1151
1152     // Create a BUILD_VECTOR node.
1153     return NodeMap[V] = DAG.getNode(ISD::BUILD_VECTOR, getCurSDLoc(), VT, Ops);
1154   }
1155
1156   // If this is a static alloca, generate it as the frameindex instead of
1157   // computation.
1158   if (const AllocaInst *AI = dyn_cast<AllocaInst>(V)) {
1159     DenseMap<const AllocaInst*, int>::iterator SI =
1160       FuncInfo.StaticAllocaMap.find(AI);
1161     if (SI != FuncInfo.StaticAllocaMap.end())
1162       return DAG.getFrameIndex(SI->second,
1163                                TLI.getPointerTy(DAG.getDataLayout()));
1164   }
1165
1166   // If this is an instruction which fast-isel has deferred, select it now.
1167   if (const Instruction *Inst = dyn_cast<Instruction>(V)) {
1168     unsigned InReg = FuncInfo.InitializeRegForValue(Inst);
1169     RegsForValue RFV(*DAG.getContext(), TLI, DAG.getDataLayout(), InReg,
1170                      Inst->getType());
1171     SDValue Chain = DAG.getEntryNode();
1172     return RFV.getCopyFromRegs(DAG, FuncInfo, getCurSDLoc(), Chain, nullptr, V);
1173   }
1174
1175   llvm_unreachable("Can't get register for value!");
1176 }
1177
1178 void SelectionDAGBuilder::visitCatchPad(const CatchPadInst &I) {
1179   auto Pers = classifyEHPersonality(FuncInfo.Fn->getPersonalityFn());
1180   bool IsMSVCCXX = Pers == EHPersonality::MSVC_CXX;
1181   bool IsCoreCLR = Pers == EHPersonality::CoreCLR;
1182   MachineBasicBlock *CatchPadMBB = FuncInfo.MBB;
1183   // In MSVC C++ and CoreCLR, catchblocks are funclets and need prologues.
1184   if (IsMSVCCXX || IsCoreCLR)
1185     CatchPadMBB->setIsEHFuncletEntry();
1186
1187   DAG.setRoot(DAG.getNode(ISD::CATCHPAD, getCurSDLoc(), MVT::Other, getControlRoot()));
1188 }
1189
1190 void SelectionDAGBuilder::visitCatchRet(const CatchReturnInst &I) {
1191   // Update machine-CFG edge.
1192   MachineBasicBlock *TargetMBB = FuncInfo.MBBMap[I.getSuccessor()];
1193   FuncInfo.MBB->addSuccessor(TargetMBB);
1194
1195   auto Pers = classifyEHPersonality(FuncInfo.Fn->getPersonalityFn());
1196   bool IsSEH = isAsynchronousEHPersonality(Pers);
1197   if (IsSEH) {
1198     // If this is not a fall-through branch or optimizations are switched off,
1199     // emit the branch.
1200     if (TargetMBB != NextBlock(FuncInfo.MBB) ||
1201         TM.getOptLevel() == CodeGenOpt::None)
1202       DAG.setRoot(DAG.getNode(ISD::BR, getCurSDLoc(), MVT::Other,
1203                               getControlRoot(), DAG.getBasicBlock(TargetMBB)));
1204     return;
1205   }
1206
1207   // Figure out the funclet membership for the catchret's successor.
1208   // This will be used by the FuncletLayout pass to determine how to order the
1209   // BB's.
1210   WinEHFuncInfo *EHInfo = DAG.getMachineFunction().getWinEHFuncInfo();
1211   const BasicBlock *SuccessorColor = EHInfo->CatchRetSuccessorColorMap[&I];
1212   assert(SuccessorColor && "No parent funclet for catchret!");
1213   MachineBasicBlock *SuccessorColorMBB = FuncInfo.MBBMap[SuccessorColor];
1214   assert(SuccessorColorMBB && "No MBB for SuccessorColor!");
1215
1216   // Create the terminator node.
1217   SDValue Ret = DAG.getNode(ISD::CATCHRET, getCurSDLoc(), MVT::Other,
1218                             getControlRoot(), DAG.getBasicBlock(TargetMBB),
1219                             DAG.getBasicBlock(SuccessorColorMBB));
1220   DAG.setRoot(Ret);
1221 }
1222
1223 void SelectionDAGBuilder::visitCleanupPad(const CleanupPadInst &CPI) {
1224   // Don't emit any special code for the cleanuppad instruction. It just marks
1225   // the start of a funclet.
1226   FuncInfo.MBB->setIsEHFuncletEntry();
1227   FuncInfo.MBB->setIsCleanupFuncletEntry();
1228 }
1229
1230 /// When an invoke or a cleanupret unwinds to the next EH pad, there are
1231 /// many places it could ultimately go. In the IR, we have a single unwind
1232 /// destination, but in the machine CFG, we enumerate all the possible blocks.
1233 /// This function skips over imaginary basic blocks that hold catchswitch
1234 /// instructions, and finds all the "real" machine
1235 /// basic block destinations. As those destinations may not be successors of
1236 /// EHPadBB, here we also calculate the edge probability to those destinations.
1237 /// The passed-in Prob is the edge probability to EHPadBB.
1238 static void findUnwindDestinations(
1239     FunctionLoweringInfo &FuncInfo, const BasicBlock *EHPadBB,
1240     BranchProbability Prob,
1241     SmallVectorImpl<std::pair<MachineBasicBlock *, BranchProbability>>
1242         &UnwindDests) {
1243   EHPersonality Personality =
1244     classifyEHPersonality(FuncInfo.Fn->getPersonalityFn());
1245   bool IsMSVCCXX = Personality == EHPersonality::MSVC_CXX;
1246   bool IsCoreCLR = Personality == EHPersonality::CoreCLR;
1247
1248   while (EHPadBB) {
1249     const Instruction *Pad = EHPadBB->getFirstNonPHI();
1250     BasicBlock *NewEHPadBB = nullptr;
1251     if (isa<LandingPadInst>(Pad)) {
1252       // Stop on landingpads. They are not funclets.
1253       UnwindDests.emplace_back(FuncInfo.MBBMap[EHPadBB], Prob);
1254       break;
1255     } else if (isa<CleanupPadInst>(Pad)) {
1256       // Stop on cleanup pads. Cleanups are always funclet entries for all known
1257       // personalities.
1258       UnwindDests.emplace_back(FuncInfo.MBBMap[EHPadBB], Prob);
1259       UnwindDests.back().first->setIsEHFuncletEntry();
1260       break;
1261     } else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(Pad)) {
1262       // Add the catchpad handlers to the possible destinations.
1263       for (const BasicBlock *CatchPadBB : CatchSwitch->handlers()) {
1264         UnwindDests.emplace_back(FuncInfo.MBBMap[CatchPadBB], Prob);
1265         // For MSVC++ and the CLR, catchblocks are funclets and need prologues.
1266         if (IsMSVCCXX || IsCoreCLR)
1267           UnwindDests.back().first->setIsEHFuncletEntry();
1268       }
1269       NewEHPadBB = CatchSwitch->getUnwindDest();
1270     } else {
1271       continue;
1272     }
1273
1274     BranchProbabilityInfo *BPI = FuncInfo.BPI;
1275     if (BPI && NewEHPadBB)
1276       Prob *= BPI->getEdgeProbability(EHPadBB, NewEHPadBB);
1277     EHPadBB = NewEHPadBB;
1278   }
1279 }
1280
1281 void SelectionDAGBuilder::visitCleanupRet(const CleanupReturnInst &I) {
1282   // Update successor info.
1283   SmallVector<std::pair<MachineBasicBlock *, BranchProbability>, 1> UnwindDests;
1284   auto UnwindDest = I.getUnwindDest();
1285   BranchProbabilityInfo *BPI = FuncInfo.BPI;
1286   BranchProbability UnwindDestProb =
1287       (BPI && UnwindDest)
1288           ? BPI->getEdgeProbability(FuncInfo.MBB->getBasicBlock(), UnwindDest)
1289           : BranchProbability::getZero();
1290   findUnwindDestinations(FuncInfo, UnwindDest, UnwindDestProb, UnwindDests);
1291   for (auto &UnwindDest : UnwindDests) {
1292     UnwindDest.first->setIsEHPad();
1293     addSuccessorWithProb(FuncInfo.MBB, UnwindDest.first, UnwindDest.second);
1294   }
1295   FuncInfo.MBB->normalizeSuccProbs();
1296
1297   // Create the terminator node.
1298   SDValue Ret =
1299       DAG.getNode(ISD::CLEANUPRET, getCurSDLoc(), MVT::Other, getControlRoot());
1300   DAG.setRoot(Ret);
1301 }
1302
1303 void SelectionDAGBuilder::visitCatchSwitch(const CatchSwitchInst &CSI) {
1304   report_fatal_error("visitCatchSwitch not yet implemented!");
1305 }
1306
1307 void SelectionDAGBuilder::visitRet(const ReturnInst &I) {
1308   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
1309   auto &DL = DAG.getDataLayout();
1310   SDValue Chain = getControlRoot();
1311   SmallVector<ISD::OutputArg, 8> Outs;
1312   SmallVector<SDValue, 8> OutVals;
1313
1314   if (!FuncInfo.CanLowerReturn) {
1315     unsigned DemoteReg = FuncInfo.DemoteRegister;
1316     const Function *F = I.getParent()->getParent();
1317
1318     // Emit a store of the return value through the virtual register.
1319     // Leave Outs empty so that LowerReturn won't try to load return
1320     // registers the usual way.
1321     SmallVector<EVT, 1> PtrValueVTs;
1322     ComputeValueVTs(TLI, DL, PointerType::getUnqual(F->getReturnType()),
1323                     PtrValueVTs);
1324
1325     SDValue RetPtr = DAG.getCopyFromReg(DAG.getEntryNode(), getCurSDLoc(),
1326                                         DemoteReg, PtrValueVTs[0]);
1327     SDValue RetOp = getValue(I.getOperand(0));
1328
1329     SmallVector<EVT, 4> ValueVTs;
1330     SmallVector<uint64_t, 4> Offsets;
1331     ComputeValueVTs(TLI, DL, I.getOperand(0)->getType(), ValueVTs, &Offsets);
1332     unsigned NumValues = ValueVTs.size();
1333
1334     SmallVector<SDValue, 4> Chains(NumValues);
1335     for (unsigned i = 0; i != NumValues; ++i) {
1336       SDValue Add = DAG.getNode(ISD::ADD, getCurSDLoc(),
1337                                 RetPtr.getValueType(), RetPtr,
1338                                 DAG.getIntPtrConstant(Offsets[i],
1339                                                       getCurSDLoc()));
1340       Chains[i] =
1341         DAG.getStore(Chain, getCurSDLoc(),
1342                      SDValue(RetOp.getNode(), RetOp.getResNo() + i),
1343                      // FIXME: better loc info would be nice.
1344                      Add, MachinePointerInfo(), false, false, 0);
1345     }
1346
1347     Chain = DAG.getNode(ISD::TokenFactor, getCurSDLoc(),
1348                         MVT::Other, Chains);
1349   } else if (I.getNumOperands() != 0) {
1350     SmallVector<EVT, 4> ValueVTs;
1351     ComputeValueVTs(TLI, DL, I.getOperand(0)->getType(), ValueVTs);
1352     unsigned NumValues = ValueVTs.size();
1353     if (NumValues) {
1354       SDValue RetOp = getValue(I.getOperand(0));
1355
1356       const Function *F = I.getParent()->getParent();
1357
1358       ISD::NodeType ExtendKind = ISD::ANY_EXTEND;
1359       if (F->getAttributes().hasAttribute(AttributeSet::ReturnIndex,
1360                                           Attribute::SExt))
1361         ExtendKind = ISD::SIGN_EXTEND;
1362       else if (F->getAttributes().hasAttribute(AttributeSet::ReturnIndex,
1363                                                Attribute::ZExt))
1364         ExtendKind = ISD::ZERO_EXTEND;
1365
1366       LLVMContext &Context = F->getContext();
1367       bool RetInReg = F->getAttributes().hasAttribute(AttributeSet::ReturnIndex,
1368                                                       Attribute::InReg);
1369
1370       for (unsigned j = 0; j != NumValues; ++j) {
1371         EVT VT = ValueVTs[j];
1372
1373         if (ExtendKind != ISD::ANY_EXTEND && VT.isInteger())
1374           VT = TLI.getTypeForExtArgOrReturn(Context, VT, ExtendKind);
1375
1376         unsigned NumParts = TLI.getNumRegisters(Context, VT);
1377         MVT PartVT = TLI.getRegisterType(Context, VT);
1378         SmallVector<SDValue, 4> Parts(NumParts);
1379         getCopyToParts(DAG, getCurSDLoc(),
1380                        SDValue(RetOp.getNode(), RetOp.getResNo() + j),
1381                        &Parts[0], NumParts, PartVT, &I, ExtendKind);
1382
1383         // 'inreg' on function refers to return value
1384         ISD::ArgFlagsTy Flags = ISD::ArgFlagsTy();
1385         if (RetInReg)
1386           Flags.setInReg();
1387
1388         // Propagate extension type if any
1389         if (ExtendKind == ISD::SIGN_EXTEND)
1390           Flags.setSExt();
1391         else if (ExtendKind == ISD::ZERO_EXTEND)
1392           Flags.setZExt();
1393
1394         for (unsigned i = 0; i < NumParts; ++i) {
1395           Outs.push_back(ISD::OutputArg(Flags, Parts[i].getValueType(),
1396                                         VT, /*isfixed=*/true, 0, 0));
1397           OutVals.push_back(Parts[i]);
1398         }
1399       }
1400     }
1401   }
1402
1403   bool isVarArg = DAG.getMachineFunction().getFunction()->isVarArg();
1404   CallingConv::ID CallConv =
1405     DAG.getMachineFunction().getFunction()->getCallingConv();
1406   Chain = DAG.getTargetLoweringInfo().LowerReturn(
1407       Chain, CallConv, isVarArg, Outs, OutVals, getCurSDLoc(), DAG);
1408
1409   // Verify that the target's LowerReturn behaved as expected.
1410   assert(Chain.getNode() && Chain.getValueType() == MVT::Other &&
1411          "LowerReturn didn't return a valid chain!");
1412
1413   // Update the DAG with the new chain value resulting from return lowering.
1414   DAG.setRoot(Chain);
1415 }
1416
1417 /// CopyToExportRegsIfNeeded - If the given value has virtual registers
1418 /// created for it, emit nodes to copy the value into the virtual
1419 /// registers.
1420 void SelectionDAGBuilder::CopyToExportRegsIfNeeded(const Value *V) {
1421   // Skip empty types
1422   if (V->getType()->isEmptyTy())
1423     return;
1424
1425   DenseMap<const Value *, unsigned>::iterator VMI = FuncInfo.ValueMap.find(V);
1426   if (VMI != FuncInfo.ValueMap.end()) {
1427     assert(!V->use_empty() && "Unused value assigned virtual registers!");
1428     CopyValueToVirtualRegister(V, VMI->second);
1429   }
1430 }
1431
1432 /// ExportFromCurrentBlock - If this condition isn't known to be exported from
1433 /// the current basic block, add it to ValueMap now so that we'll get a
1434 /// CopyTo/FromReg.
1435 void SelectionDAGBuilder::ExportFromCurrentBlock(const Value *V) {
1436   // No need to export constants.
1437   if (!isa<Instruction>(V) && !isa<Argument>(V)) return;
1438
1439   // Already exported?
1440   if (FuncInfo.isExportedInst(V)) return;
1441
1442   unsigned Reg = FuncInfo.InitializeRegForValue(V);
1443   CopyValueToVirtualRegister(V, Reg);
1444 }
1445
1446 bool SelectionDAGBuilder::isExportableFromCurrentBlock(const Value *V,
1447                                                      const BasicBlock *FromBB) {
1448   // The operands of the setcc have to be in this block.  We don't know
1449   // how to export them from some other block.
1450   if (const Instruction *VI = dyn_cast<Instruction>(V)) {
1451     // Can export from current BB.
1452     if (VI->getParent() == FromBB)
1453       return true;
1454
1455     // Is already exported, noop.
1456     return FuncInfo.isExportedInst(V);
1457   }
1458
1459   // If this is an argument, we can export it if the BB is the entry block or
1460   // if it is already exported.
1461   if (isa<Argument>(V)) {
1462     if (FromBB == &FromBB->getParent()->getEntryBlock())
1463       return true;
1464
1465     // Otherwise, can only export this if it is already exported.
1466     return FuncInfo.isExportedInst(V);
1467   }
1468
1469   // Otherwise, constants can always be exported.
1470   return true;
1471 }
1472
1473 /// Return branch probability calculated by BranchProbabilityInfo for IR blocks.
1474 BranchProbability
1475 SelectionDAGBuilder::getEdgeProbability(const MachineBasicBlock *Src,
1476                                         const MachineBasicBlock *Dst) const {
1477   BranchProbabilityInfo *BPI = FuncInfo.BPI;
1478   const BasicBlock *SrcBB = Src->getBasicBlock();
1479   const BasicBlock *DstBB = Dst->getBasicBlock();
1480   if (!BPI) {
1481     // If BPI is not available, set the default probability as 1 / N, where N is
1482     // the number of successors.
1483     auto SuccSize = std::max<uint32_t>(
1484         std::distance(succ_begin(SrcBB), succ_end(SrcBB)), 1);
1485     return BranchProbability(1, SuccSize);
1486   }
1487   return BPI->getEdgeProbability(SrcBB, DstBB);
1488 }
1489
1490 void SelectionDAGBuilder::addSuccessorWithProb(MachineBasicBlock *Src,
1491                                                MachineBasicBlock *Dst,
1492                                                BranchProbability Prob) {
1493   if (!FuncInfo.BPI)
1494     Src->addSuccessorWithoutProb(Dst);
1495   else {
1496     if (Prob.isUnknown())
1497       Prob = getEdgeProbability(Src, Dst);
1498     Src->addSuccessor(Dst, Prob);
1499   }
1500 }
1501
1502 static bool InBlock(const Value *V, const BasicBlock *BB) {
1503   if (const Instruction *I = dyn_cast<Instruction>(V))
1504     return I->getParent() == BB;
1505   return true;
1506 }
1507
1508 /// EmitBranchForMergedCondition - Helper method for FindMergedConditions.
1509 /// This function emits a branch and is used at the leaves of an OR or an
1510 /// AND operator tree.
1511 ///
1512 void
1513 SelectionDAGBuilder::EmitBranchForMergedCondition(const Value *Cond,
1514                                                   MachineBasicBlock *TBB,
1515                                                   MachineBasicBlock *FBB,
1516                                                   MachineBasicBlock *CurBB,
1517                                                   MachineBasicBlock *SwitchBB,
1518                                                   BranchProbability TProb,
1519                                                   BranchProbability FProb) {
1520   const BasicBlock *BB = CurBB->getBasicBlock();
1521
1522   // If the leaf of the tree is a comparison, merge the condition into
1523   // the caseblock.
1524   if (const CmpInst *BOp = dyn_cast<CmpInst>(Cond)) {
1525     // The operands of the cmp have to be in this block.  We don't know
1526     // how to export them from some other block.  If this is the first block
1527     // of the sequence, no exporting is needed.
1528     if (CurBB == SwitchBB ||
1529         (isExportableFromCurrentBlock(BOp->getOperand(0), BB) &&
1530          isExportableFromCurrentBlock(BOp->getOperand(1), BB))) {
1531       ISD::CondCode Condition;
1532       if (const ICmpInst *IC = dyn_cast<ICmpInst>(Cond)) {
1533         Condition = getICmpCondCode(IC->getPredicate());
1534       } else {
1535         const FCmpInst *FC = cast<FCmpInst>(Cond);
1536         Condition = getFCmpCondCode(FC->getPredicate());
1537         if (TM.Options.NoNaNsFPMath)
1538           Condition = getFCmpCodeWithoutNaN(Condition);
1539       }
1540
1541       CaseBlock CB(Condition, BOp->getOperand(0), BOp->getOperand(1), nullptr,
1542                    TBB, FBB, CurBB, TProb, FProb);
1543       SwitchCases.push_back(CB);
1544       return;
1545     }
1546   }
1547
1548   // Create a CaseBlock record representing this branch.
1549   CaseBlock CB(ISD::SETEQ, Cond, ConstantInt::getTrue(*DAG.getContext()),
1550                nullptr, TBB, FBB, CurBB, TProb, FProb);
1551   SwitchCases.push_back(CB);
1552 }
1553
1554 /// FindMergedConditions - If Cond is an expression like
1555 void SelectionDAGBuilder::FindMergedConditions(const Value *Cond,
1556                                                MachineBasicBlock *TBB,
1557                                                MachineBasicBlock *FBB,
1558                                                MachineBasicBlock *CurBB,
1559                                                MachineBasicBlock *SwitchBB,
1560                                                Instruction::BinaryOps Opc,
1561                                                BranchProbability TProb,
1562                                                BranchProbability FProb) {
1563   // If this node is not part of the or/and tree, emit it as a branch.
1564   const Instruction *BOp = dyn_cast<Instruction>(Cond);
1565   if (!BOp || !(isa<BinaryOperator>(BOp) || isa<CmpInst>(BOp)) ||
1566       (unsigned)BOp->getOpcode() != Opc || !BOp->hasOneUse() ||
1567       BOp->getParent() != CurBB->getBasicBlock() ||
1568       !InBlock(BOp->getOperand(0), CurBB->getBasicBlock()) ||
1569       !InBlock(BOp->getOperand(1), CurBB->getBasicBlock())) {
1570     EmitBranchForMergedCondition(Cond, TBB, FBB, CurBB, SwitchBB,
1571                                  TProb, FProb);
1572     return;
1573   }
1574
1575   //  Create TmpBB after CurBB.
1576   MachineFunction::iterator BBI(CurBB);
1577   MachineFunction &MF = DAG.getMachineFunction();
1578   MachineBasicBlock *TmpBB = MF.CreateMachineBasicBlock(CurBB->getBasicBlock());
1579   CurBB->getParent()->insert(++BBI, TmpBB);
1580
1581   if (Opc == Instruction::Or) {
1582     // Codegen X | Y as:
1583     // BB1:
1584     //   jmp_if_X TBB
1585     //   jmp TmpBB
1586     // TmpBB:
1587     //   jmp_if_Y TBB
1588     //   jmp FBB
1589     //
1590
1591     // We have flexibility in setting Prob for BB1 and Prob for TmpBB.
1592     // The requirement is that
1593     //   TrueProb for BB1 + (FalseProb for BB1 * TrueProb for TmpBB)
1594     //     = TrueProb for original BB.
1595     // Assuming the original probabilities are A and B, one choice is to set
1596     // BB1's probabilities to A/2 and A/2+B, and set TmpBB's probabilities to
1597     // A/(1+B) and 2B/(1+B). This choice assumes that
1598     //   TrueProb for BB1 == FalseProb for BB1 * TrueProb for TmpBB.
1599     // Another choice is to assume TrueProb for BB1 equals to TrueProb for
1600     // TmpBB, but the math is more complicated.
1601
1602     auto NewTrueProb = TProb / 2;
1603     auto NewFalseProb = TProb / 2 + FProb;
1604     // Emit the LHS condition.
1605     FindMergedConditions(BOp->getOperand(0), TBB, TmpBB, CurBB, SwitchBB, Opc,
1606                          NewTrueProb, NewFalseProb);
1607
1608     // Normalize A/2 and B to get A/(1+B) and 2B/(1+B).
1609     SmallVector<BranchProbability, 2> Probs{TProb / 2, FProb};
1610     BranchProbability::normalizeProbabilities(Probs.begin(), Probs.end());
1611     // Emit the RHS condition into TmpBB.
1612     FindMergedConditions(BOp->getOperand(1), TBB, FBB, TmpBB, SwitchBB, Opc,
1613                          Probs[0], Probs[1]);
1614   } else {
1615     assert(Opc == Instruction::And && "Unknown merge op!");
1616     // Codegen X & Y as:
1617     // BB1:
1618     //   jmp_if_X TmpBB
1619     //   jmp FBB
1620     // TmpBB:
1621     //   jmp_if_Y TBB
1622     //   jmp FBB
1623     //
1624     //  This requires creation of TmpBB after CurBB.
1625
1626     // We have flexibility in setting Prob for BB1 and Prob for TmpBB.
1627     // The requirement is that
1628     //   FalseProb for BB1 + (TrueProb for BB1 * FalseProb for TmpBB)
1629     //     = FalseProb for original BB.
1630     // Assuming the original probabilities are A and B, one choice is to set
1631     // BB1's probabilities to A+B/2 and B/2, and set TmpBB's probabilities to
1632     // 2A/(1+A) and B/(1+A). This choice assumes that FalseProb for BB1 ==
1633     // TrueProb for BB1 * FalseProb for TmpBB.
1634
1635     auto NewTrueProb = TProb + FProb / 2;
1636     auto NewFalseProb = FProb / 2;
1637     // Emit the LHS condition.
1638     FindMergedConditions(BOp->getOperand(0), TmpBB, FBB, CurBB, SwitchBB, Opc,
1639                          NewTrueProb, NewFalseProb);
1640
1641     // Normalize A and B/2 to get 2A/(1+A) and B/(1+A).
1642     SmallVector<BranchProbability, 2> Probs{TProb, FProb / 2};
1643     BranchProbability::normalizeProbabilities(Probs.begin(), Probs.end());
1644     // Emit the RHS condition into TmpBB.
1645     FindMergedConditions(BOp->getOperand(1), TBB, FBB, TmpBB, SwitchBB, Opc,
1646                          Probs[0], Probs[1]);
1647   }
1648 }
1649
1650 /// If the set of cases should be emitted as a series of branches, return true.
1651 /// If we should emit this as a bunch of and/or'd together conditions, return
1652 /// false.
1653 bool
1654 SelectionDAGBuilder::ShouldEmitAsBranches(const std::vector<CaseBlock> &Cases) {
1655   if (Cases.size() != 2) return true;
1656
1657   // If this is two comparisons of the same values or'd or and'd together, they
1658   // will get folded into a single comparison, so don't emit two blocks.
1659   if ((Cases[0].CmpLHS == Cases[1].CmpLHS &&
1660        Cases[0].CmpRHS == Cases[1].CmpRHS) ||
1661       (Cases[0].CmpRHS == Cases[1].CmpLHS &&
1662        Cases[0].CmpLHS == Cases[1].CmpRHS)) {
1663     return false;
1664   }
1665
1666   // Handle: (X != null) | (Y != null) --> (X|Y) != 0
1667   // Handle: (X == null) & (Y == null) --> (X|Y) == 0
1668   if (Cases[0].CmpRHS == Cases[1].CmpRHS &&
1669       Cases[0].CC == Cases[1].CC &&
1670       isa<Constant>(Cases[0].CmpRHS) &&
1671       cast<Constant>(Cases[0].CmpRHS)->isNullValue()) {
1672     if (Cases[0].CC == ISD::SETEQ && Cases[0].TrueBB == Cases[1].ThisBB)
1673       return false;
1674     if (Cases[0].CC == ISD::SETNE && Cases[0].FalseBB == Cases[1].ThisBB)
1675       return false;
1676   }
1677
1678   return true;
1679 }
1680
1681 void SelectionDAGBuilder::visitBr(const BranchInst &I) {
1682   MachineBasicBlock *BrMBB = FuncInfo.MBB;
1683
1684   // Update machine-CFG edges.
1685   MachineBasicBlock *Succ0MBB = FuncInfo.MBBMap[I.getSuccessor(0)];
1686
1687   if (I.isUnconditional()) {
1688     // Update machine-CFG edges.
1689     BrMBB->addSuccessor(Succ0MBB);
1690
1691     // If this is not a fall-through branch or optimizations are switched off,
1692     // emit the branch.
1693     if (Succ0MBB != NextBlock(BrMBB) || TM.getOptLevel() == CodeGenOpt::None)
1694       DAG.setRoot(DAG.getNode(ISD::BR, getCurSDLoc(),
1695                               MVT::Other, getControlRoot(),
1696                               DAG.getBasicBlock(Succ0MBB)));
1697
1698     return;
1699   }
1700
1701   // If this condition is one of the special cases we handle, do special stuff
1702   // now.
1703   const Value *CondVal = I.getCondition();
1704   MachineBasicBlock *Succ1MBB = FuncInfo.MBBMap[I.getSuccessor(1)];
1705
1706   // If this is a series of conditions that are or'd or and'd together, emit
1707   // this as a sequence of branches instead of setcc's with and/or operations.
1708   // As long as jumps are not expensive, this should improve performance.
1709   // For example, instead of something like:
1710   //     cmp A, B
1711   //     C = seteq
1712   //     cmp D, E
1713   //     F = setle
1714   //     or C, F
1715   //     jnz foo
1716   // Emit:
1717   //     cmp A, B
1718   //     je foo
1719   //     cmp D, E
1720   //     jle foo
1721   //
1722   if (const BinaryOperator *BOp = dyn_cast<BinaryOperator>(CondVal)) {
1723     Instruction::BinaryOps Opcode = BOp->getOpcode();
1724     if (!DAG.getTargetLoweringInfo().isJumpExpensive() && BOp->hasOneUse() &&
1725         !I.getMetadata(LLVMContext::MD_unpredictable) &&
1726         (Opcode == Instruction::And || Opcode == Instruction::Or)) {
1727       FindMergedConditions(BOp, Succ0MBB, Succ1MBB, BrMBB, BrMBB,
1728                            Opcode,
1729                            getEdgeProbability(BrMBB, Succ0MBB),
1730                            getEdgeProbability(BrMBB, Succ1MBB));
1731       // If the compares in later blocks need to use values not currently
1732       // exported from this block, export them now.  This block should always
1733       // be the first entry.
1734       assert(SwitchCases[0].ThisBB == BrMBB && "Unexpected lowering!");
1735
1736       // Allow some cases to be rejected.
1737       if (ShouldEmitAsBranches(SwitchCases)) {
1738         for (unsigned i = 1, e = SwitchCases.size(); i != e; ++i) {
1739           ExportFromCurrentBlock(SwitchCases[i].CmpLHS);
1740           ExportFromCurrentBlock(SwitchCases[i].CmpRHS);
1741         }
1742
1743         // Emit the branch for this block.
1744         visitSwitchCase(SwitchCases[0], BrMBB);
1745         SwitchCases.erase(SwitchCases.begin());
1746         return;
1747       }
1748
1749       // Okay, we decided not to do this, remove any inserted MBB's and clear
1750       // SwitchCases.
1751       for (unsigned i = 1, e = SwitchCases.size(); i != e; ++i)
1752         FuncInfo.MF->erase(SwitchCases[i].ThisBB);
1753
1754       SwitchCases.clear();
1755     }
1756   }
1757
1758   // Create a CaseBlock record representing this branch.
1759   CaseBlock CB(ISD::SETEQ, CondVal, ConstantInt::getTrue(*DAG.getContext()),
1760                nullptr, Succ0MBB, Succ1MBB, BrMBB);
1761
1762   // Use visitSwitchCase to actually insert the fast branch sequence for this
1763   // cond branch.
1764   visitSwitchCase(CB, BrMBB);
1765 }
1766
1767 /// visitSwitchCase - Emits the necessary code to represent a single node in
1768 /// the binary search tree resulting from lowering a switch instruction.
1769 void SelectionDAGBuilder::visitSwitchCase(CaseBlock &CB,
1770                                           MachineBasicBlock *SwitchBB) {
1771   SDValue Cond;
1772   SDValue CondLHS = getValue(CB.CmpLHS);
1773   SDLoc dl = getCurSDLoc();
1774
1775   // Build the setcc now.
1776   if (!CB.CmpMHS) {
1777     // Fold "(X == true)" to X and "(X == false)" to !X to
1778     // handle common cases produced by branch lowering.
1779     if (CB.CmpRHS == ConstantInt::getTrue(*DAG.getContext()) &&
1780         CB.CC == ISD::SETEQ)
1781       Cond = CondLHS;
1782     else if (CB.CmpRHS == ConstantInt::getFalse(*DAG.getContext()) &&
1783              CB.CC == ISD::SETEQ) {
1784       SDValue True = DAG.getConstant(1, dl, CondLHS.getValueType());
1785       Cond = DAG.getNode(ISD::XOR, dl, CondLHS.getValueType(), CondLHS, True);
1786     } else
1787       Cond = DAG.getSetCC(dl, MVT::i1, CondLHS, getValue(CB.CmpRHS), CB.CC);
1788   } else {
1789     assert(CB.CC == ISD::SETLE && "Can handle only LE ranges now");
1790
1791     const APInt& Low = cast<ConstantInt>(CB.CmpLHS)->getValue();
1792     const APInt& High = cast<ConstantInt>(CB.CmpRHS)->getValue();
1793
1794     SDValue CmpOp = getValue(CB.CmpMHS);
1795     EVT VT = CmpOp.getValueType();
1796
1797     if (cast<ConstantInt>(CB.CmpLHS)->isMinValue(true)) {
1798       Cond = DAG.getSetCC(dl, MVT::i1, CmpOp, DAG.getConstant(High, dl, VT),
1799                           ISD::SETLE);
1800     } else {
1801       SDValue SUB = DAG.getNode(ISD::SUB, dl,
1802                                 VT, CmpOp, DAG.getConstant(Low, dl, VT));
1803       Cond = DAG.getSetCC(dl, MVT::i1, SUB,
1804                           DAG.getConstant(High-Low, dl, VT), ISD::SETULE);
1805     }
1806   }
1807
1808   // Update successor info
1809   addSuccessorWithProb(SwitchBB, CB.TrueBB, CB.TrueProb);
1810   // TrueBB and FalseBB are always different unless the incoming IR is
1811   // degenerate. This only happens when running llc on weird IR.
1812   if (CB.TrueBB != CB.FalseBB)
1813     addSuccessorWithProb(SwitchBB, CB.FalseBB, CB.FalseProb);
1814   SwitchBB->normalizeSuccProbs();
1815
1816   // If the lhs block is the next block, invert the condition so that we can
1817   // fall through to the lhs instead of the rhs block.
1818   if (CB.TrueBB == NextBlock(SwitchBB)) {
1819     std::swap(CB.TrueBB, CB.FalseBB);
1820     SDValue True = DAG.getConstant(1, dl, Cond.getValueType());
1821     Cond = DAG.getNode(ISD::XOR, dl, Cond.getValueType(), Cond, True);
1822   }
1823
1824   SDValue BrCond = DAG.getNode(ISD::BRCOND, dl,
1825                                MVT::Other, getControlRoot(), Cond,
1826                                DAG.getBasicBlock(CB.TrueBB));
1827
1828   // Insert the false branch. Do this even if it's a fall through branch,
1829   // this makes it easier to do DAG optimizations which require inverting
1830   // the branch condition.
1831   BrCond = DAG.getNode(ISD::BR, dl, MVT::Other, BrCond,
1832                        DAG.getBasicBlock(CB.FalseBB));
1833
1834   DAG.setRoot(BrCond);
1835 }
1836
1837 /// visitJumpTable - Emit JumpTable node in the current MBB
1838 void SelectionDAGBuilder::visitJumpTable(JumpTable &JT) {
1839   // Emit the code for the jump table
1840   assert(JT.Reg != -1U && "Should lower JT Header first!");
1841   EVT PTy = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
1842   SDValue Index = DAG.getCopyFromReg(getControlRoot(), getCurSDLoc(),
1843                                      JT.Reg, PTy);
1844   SDValue Table = DAG.getJumpTable(JT.JTI, PTy);
1845   SDValue BrJumpTable = DAG.getNode(ISD::BR_JT, getCurSDLoc(),
1846                                     MVT::Other, Index.getValue(1),
1847                                     Table, Index);
1848   DAG.setRoot(BrJumpTable);
1849 }
1850
1851 /// visitJumpTableHeader - This function emits necessary code to produce index
1852 /// in the JumpTable from switch case.
1853 void SelectionDAGBuilder::visitJumpTableHeader(JumpTable &JT,
1854                                                JumpTableHeader &JTH,
1855                                                MachineBasicBlock *SwitchBB) {
1856   SDLoc dl = getCurSDLoc();
1857
1858   // Subtract the lowest switch case value from the value being switched on and
1859   // conditional branch to default mbb if the result is greater than the
1860   // difference between smallest and largest cases.
1861   SDValue SwitchOp = getValue(JTH.SValue);
1862   EVT VT = SwitchOp.getValueType();
1863   SDValue Sub = DAG.getNode(ISD::SUB, dl, VT, SwitchOp,
1864                             DAG.getConstant(JTH.First, dl, VT));
1865
1866   // The SDNode we just created, which holds the value being switched on minus
1867   // the smallest case value, needs to be copied to a virtual register so it
1868   // can be used as an index into the jump table in a subsequent basic block.
1869   // This value may be smaller or larger than the target's pointer type, and
1870   // therefore require extension or truncating.
1871   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
1872   SwitchOp = DAG.getZExtOrTrunc(Sub, dl, TLI.getPointerTy(DAG.getDataLayout()));
1873
1874   unsigned JumpTableReg =
1875       FuncInfo.CreateReg(TLI.getPointerTy(DAG.getDataLayout()));
1876   SDValue CopyTo = DAG.getCopyToReg(getControlRoot(), dl,
1877                                     JumpTableReg, SwitchOp);
1878   JT.Reg = JumpTableReg;
1879
1880   // Emit the range check for the jump table, and branch to the default block
1881   // for the switch statement if the value being switched on exceeds the largest
1882   // case in the switch.
1883   SDValue CMP = DAG.getSetCC(
1884       dl, TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(),
1885                                  Sub.getValueType()),
1886       Sub, DAG.getConstant(JTH.Last - JTH.First, dl, VT), ISD::SETUGT);
1887
1888   SDValue BrCond = DAG.getNode(ISD::BRCOND, dl,
1889                                MVT::Other, CopyTo, CMP,
1890                                DAG.getBasicBlock(JT.Default));
1891
1892   // Avoid emitting unnecessary branches to the next block.
1893   if (JT.MBB != NextBlock(SwitchBB))
1894     BrCond = DAG.getNode(ISD::BR, dl, MVT::Other, BrCond,
1895                          DAG.getBasicBlock(JT.MBB));
1896
1897   DAG.setRoot(BrCond);
1898 }
1899
1900 /// Codegen a new tail for a stack protector check ParentMBB which has had its
1901 /// tail spliced into a stack protector check success bb.
1902 ///
1903 /// For a high level explanation of how this fits into the stack protector
1904 /// generation see the comment on the declaration of class
1905 /// StackProtectorDescriptor.
1906 void SelectionDAGBuilder::visitSPDescriptorParent(StackProtectorDescriptor &SPD,
1907                                                   MachineBasicBlock *ParentBB) {
1908
1909   // First create the loads to the guard/stack slot for the comparison.
1910   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
1911   EVT PtrTy = TLI.getPointerTy(DAG.getDataLayout());
1912
1913   MachineFrameInfo *MFI = ParentBB->getParent()->getFrameInfo();
1914   int FI = MFI->getStackProtectorIndex();
1915
1916   const Value *IRGuard = SPD.getGuard();
1917   SDValue GuardPtr = getValue(IRGuard);
1918   SDValue StackSlotPtr = DAG.getFrameIndex(FI, PtrTy);
1919
1920   unsigned Align = DL->getPrefTypeAlignment(IRGuard->getType());
1921
1922   SDValue Guard;
1923   SDLoc dl = getCurSDLoc();
1924
1925   // If GuardReg is set and useLoadStackGuardNode returns true, retrieve the
1926   // guard value from the virtual register holding the value. Otherwise, emit a
1927   // volatile load to retrieve the stack guard value.
1928   unsigned GuardReg = SPD.getGuardReg();
1929
1930   if (GuardReg && TLI.useLoadStackGuardNode())
1931     Guard = DAG.getCopyFromReg(DAG.getEntryNode(), dl, GuardReg,
1932                                PtrTy);
1933   else
1934     Guard = DAG.getLoad(PtrTy, dl, DAG.getEntryNode(),
1935                         GuardPtr, MachinePointerInfo(IRGuard, 0),
1936                         true, false, false, Align);
1937
1938   SDValue StackSlot = DAG.getLoad(
1939       PtrTy, dl, DAG.getEntryNode(), StackSlotPtr,
1940       MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), true,
1941       false, false, Align);
1942
1943   // Perform the comparison via a subtract/getsetcc.
1944   EVT VT = Guard.getValueType();
1945   SDValue Sub = DAG.getNode(ISD::SUB, dl, VT, Guard, StackSlot);
1946
1947   SDValue Cmp = DAG.getSetCC(dl, TLI.getSetCCResultType(DAG.getDataLayout(),
1948                                                         *DAG.getContext(),
1949                                                         Sub.getValueType()),
1950                              Sub, DAG.getConstant(0, dl, VT), ISD::SETNE);
1951
1952   // If the sub is not 0, then we know the guard/stackslot do not equal, so
1953   // branch to failure MBB.
1954   SDValue BrCond = DAG.getNode(ISD::BRCOND, dl,
1955                                MVT::Other, StackSlot.getOperand(0),
1956                                Cmp, DAG.getBasicBlock(SPD.getFailureMBB()));
1957   // Otherwise branch to success MBB.
1958   SDValue Br = DAG.getNode(ISD::BR, dl,
1959                            MVT::Other, BrCond,
1960                            DAG.getBasicBlock(SPD.getSuccessMBB()));
1961
1962   DAG.setRoot(Br);
1963 }
1964
1965 /// Codegen the failure basic block for a stack protector check.
1966 ///
1967 /// A failure stack protector machine basic block consists simply of a call to
1968 /// __stack_chk_fail().
1969 ///
1970 /// For a high level explanation of how this fits into the stack protector
1971 /// generation see the comment on the declaration of class
1972 /// StackProtectorDescriptor.
1973 void
1974 SelectionDAGBuilder::visitSPDescriptorFailure(StackProtectorDescriptor &SPD) {
1975   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
1976   SDValue Chain =
1977       TLI.makeLibCall(DAG, RTLIB::STACKPROTECTOR_CHECK_FAIL, MVT::isVoid,
1978                       None, false, getCurSDLoc(), false, false).second;
1979   DAG.setRoot(Chain);
1980 }
1981
1982 /// visitBitTestHeader - This function emits necessary code to produce value
1983 /// suitable for "bit tests"
1984 void SelectionDAGBuilder::visitBitTestHeader(BitTestBlock &B,
1985                                              MachineBasicBlock *SwitchBB) {
1986   SDLoc dl = getCurSDLoc();
1987
1988   // Subtract the minimum value
1989   SDValue SwitchOp = getValue(B.SValue);
1990   EVT VT = SwitchOp.getValueType();
1991   SDValue Sub = DAG.getNode(ISD::SUB, dl, VT, SwitchOp,
1992                             DAG.getConstant(B.First, dl, VT));
1993
1994   // Check range
1995   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
1996   SDValue RangeCmp = DAG.getSetCC(
1997       dl, TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(),
1998                                  Sub.getValueType()),
1999       Sub, DAG.getConstant(B.Range, dl, VT), ISD::SETUGT);
2000
2001   // Determine the type of the test operands.
2002   bool UsePtrType = false;
2003   if (!TLI.isTypeLegal(VT))
2004     UsePtrType = true;
2005   else {
2006     for (unsigned i = 0, e = B.Cases.size(); i != e; ++i)
2007       if (!isUIntN(VT.getSizeInBits(), B.Cases[i].Mask)) {
2008         // Switch table case range are encoded into series of masks.
2009         // Just use pointer type, it's guaranteed to fit.
2010         UsePtrType = true;
2011         break;
2012       }
2013   }
2014   if (UsePtrType) {
2015     VT = TLI.getPointerTy(DAG.getDataLayout());
2016     Sub = DAG.getZExtOrTrunc(Sub, dl, VT);
2017   }
2018
2019   B.RegVT = VT.getSimpleVT();
2020   B.Reg = FuncInfo.CreateReg(B.RegVT);
2021   SDValue CopyTo = DAG.getCopyToReg(getControlRoot(), dl, B.Reg, Sub);
2022
2023   MachineBasicBlock* MBB = B.Cases[0].ThisBB;
2024
2025   addSuccessorWithProb(SwitchBB, B.Default, B.DefaultProb);
2026   addSuccessorWithProb(SwitchBB, MBB, B.Prob);
2027   SwitchBB->normalizeSuccProbs();
2028
2029   SDValue BrRange = DAG.getNode(ISD::BRCOND, dl,
2030                                 MVT::Other, CopyTo, RangeCmp,
2031                                 DAG.getBasicBlock(B.Default));
2032
2033   // Avoid emitting unnecessary branches to the next block.
2034   if (MBB != NextBlock(SwitchBB))
2035     BrRange = DAG.getNode(ISD::BR, dl, MVT::Other, BrRange,
2036                           DAG.getBasicBlock(MBB));
2037
2038   DAG.setRoot(BrRange);
2039 }
2040
2041 /// visitBitTestCase - this function produces one "bit test"
2042 void SelectionDAGBuilder::visitBitTestCase(BitTestBlock &BB,
2043                                            MachineBasicBlock* NextMBB,
2044                                            BranchProbability BranchProbToNext,
2045                                            unsigned Reg,
2046                                            BitTestCase &B,
2047                                            MachineBasicBlock *SwitchBB) {
2048   SDLoc dl = getCurSDLoc();
2049   MVT VT = BB.RegVT;
2050   SDValue ShiftOp = DAG.getCopyFromReg(getControlRoot(), dl, Reg, VT);
2051   SDValue Cmp;
2052   unsigned PopCount = countPopulation(B.Mask);
2053   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2054   if (PopCount == 1) {
2055     // Testing for a single bit; just compare the shift count with what it
2056     // would need to be to shift a 1 bit in that position.
2057     Cmp = DAG.getSetCC(
2058         dl, TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT),
2059         ShiftOp, DAG.getConstant(countTrailingZeros(B.Mask), dl, VT),
2060         ISD::SETEQ);
2061   } else if (PopCount == BB.Range) {
2062     // There is only one zero bit in the range, test for it directly.
2063     Cmp = DAG.getSetCC(
2064         dl, TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT),
2065         ShiftOp, DAG.getConstant(countTrailingOnes(B.Mask), dl, VT),
2066         ISD::SETNE);
2067   } else {
2068     // Make desired shift
2069     SDValue SwitchVal = DAG.getNode(ISD::SHL, dl, VT,
2070                                     DAG.getConstant(1, dl, VT), ShiftOp);
2071
2072     // Emit bit tests and jumps
2073     SDValue AndOp = DAG.getNode(ISD::AND, dl,
2074                                 VT, SwitchVal, DAG.getConstant(B.Mask, dl, VT));
2075     Cmp = DAG.getSetCC(
2076         dl, TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT),
2077         AndOp, DAG.getConstant(0, dl, VT), ISD::SETNE);
2078   }
2079
2080   // The branch probability from SwitchBB to B.TargetBB is B.ExtraProb.
2081   addSuccessorWithProb(SwitchBB, B.TargetBB, B.ExtraProb);
2082   // The branch probability from SwitchBB to NextMBB is BranchProbToNext.
2083   addSuccessorWithProb(SwitchBB, NextMBB, BranchProbToNext);
2084   // It is not guaranteed that the sum of B.ExtraProb and BranchProbToNext is
2085   // one as they are relative probabilities (and thus work more like weights),
2086   // and hence we need to normalize them to let the sum of them become one.
2087   SwitchBB->normalizeSuccProbs();
2088
2089   SDValue BrAnd = DAG.getNode(ISD::BRCOND, dl,
2090                               MVT::Other, getControlRoot(),
2091                               Cmp, DAG.getBasicBlock(B.TargetBB));
2092
2093   // Avoid emitting unnecessary branches to the next block.
2094   if (NextMBB != NextBlock(SwitchBB))
2095     BrAnd = DAG.getNode(ISD::BR, dl, MVT::Other, BrAnd,
2096                         DAG.getBasicBlock(NextMBB));
2097
2098   DAG.setRoot(BrAnd);
2099 }
2100
2101 void SelectionDAGBuilder::visitInvoke(const InvokeInst &I) {
2102   MachineBasicBlock *InvokeMBB = FuncInfo.MBB;
2103
2104   // Retrieve successors. Look through artificial IR level blocks like
2105   // catchswitch for successors.
2106   MachineBasicBlock *Return = FuncInfo.MBBMap[I.getSuccessor(0)];
2107   const BasicBlock *EHPadBB = I.getSuccessor(1);
2108
2109   const Value *Callee(I.getCalledValue());
2110   const Function *Fn = dyn_cast<Function>(Callee);
2111   if (isa<InlineAsm>(Callee))
2112     visitInlineAsm(&I);
2113   else if (Fn && Fn->isIntrinsic()) {
2114     switch (Fn->getIntrinsicID()) {
2115     default:
2116       llvm_unreachable("Cannot invoke this intrinsic");
2117     case Intrinsic::donothing:
2118       // Ignore invokes to @llvm.donothing: jump directly to the next BB.
2119       break;
2120     case Intrinsic::experimental_patchpoint_void:
2121     case Intrinsic::experimental_patchpoint_i64:
2122       visitPatchpoint(&I, EHPadBB);
2123       break;
2124     case Intrinsic::experimental_gc_statepoint:
2125       LowerStatepoint(ImmutableStatepoint(&I), EHPadBB);
2126       break;
2127     }
2128   } else
2129     LowerCallTo(&I, getValue(Callee), false, EHPadBB);
2130
2131   // If the value of the invoke is used outside of its defining block, make it
2132   // available as a virtual register.
2133   // We already took care of the exported value for the statepoint instruction
2134   // during call to the LowerStatepoint.
2135   if (!isStatepoint(I)) {
2136     CopyToExportRegsIfNeeded(&I);
2137   }
2138
2139   SmallVector<std::pair<MachineBasicBlock *, BranchProbability>, 1> UnwindDests;
2140   BranchProbabilityInfo *BPI = FuncInfo.BPI;
2141   BranchProbability EHPadBBProb =
2142       BPI ? BPI->getEdgeProbability(InvokeMBB->getBasicBlock(), EHPadBB)
2143           : BranchProbability::getZero();
2144   findUnwindDestinations(FuncInfo, EHPadBB, EHPadBBProb, UnwindDests);
2145
2146   // Update successor info.
2147   addSuccessorWithProb(InvokeMBB, Return);
2148   for (auto &UnwindDest : UnwindDests) {
2149     UnwindDest.first->setIsEHPad();
2150     addSuccessorWithProb(InvokeMBB, UnwindDest.first, UnwindDest.second);
2151   }
2152   InvokeMBB->normalizeSuccProbs();
2153
2154   // Drop into normal successor.
2155   DAG.setRoot(DAG.getNode(ISD::BR, getCurSDLoc(),
2156                           MVT::Other, getControlRoot(),
2157                           DAG.getBasicBlock(Return)));
2158 }
2159
2160 void SelectionDAGBuilder::visitResume(const ResumeInst &RI) {
2161   llvm_unreachable("SelectionDAGBuilder shouldn't visit resume instructions!");
2162 }
2163
2164 void SelectionDAGBuilder::visitLandingPad(const LandingPadInst &LP) {
2165   assert(FuncInfo.MBB->isEHPad() &&
2166          "Call to landingpad not in landing pad!");
2167
2168   MachineBasicBlock *MBB = FuncInfo.MBB;
2169   MachineModuleInfo &MMI = DAG.getMachineFunction().getMMI();
2170   AddLandingPadInfo(LP, MMI, MBB);
2171
2172   // If there aren't registers to copy the values into (e.g., during SjLj
2173   // exceptions), then don't bother to create these DAG nodes.
2174   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2175   const Constant *PersonalityFn = FuncInfo.Fn->getPersonalityFn();
2176   if (TLI.getExceptionPointerRegister(PersonalityFn) == 0 &&
2177       TLI.getExceptionSelectorRegister(PersonalityFn) == 0)
2178     return;
2179
2180   // If landingpad's return type is token type, we don't create DAG nodes
2181   // for its exception pointer and selector value. The extraction of exception
2182   // pointer or selector value from token type landingpads is not currently
2183   // supported.
2184   if (LP.getType()->isTokenTy())
2185     return;
2186
2187   SmallVector<EVT, 2> ValueVTs;
2188   SDLoc dl = getCurSDLoc();
2189   ComputeValueVTs(TLI, DAG.getDataLayout(), LP.getType(), ValueVTs);
2190   assert(ValueVTs.size() == 2 && "Only two-valued landingpads are supported");
2191
2192   // Get the two live-in registers as SDValues. The physregs have already been
2193   // copied into virtual registers.
2194   SDValue Ops[2];
2195   if (FuncInfo.ExceptionPointerVirtReg) {
2196     Ops[0] = DAG.getZExtOrTrunc(
2197         DAG.getCopyFromReg(DAG.getEntryNode(), dl,
2198                            FuncInfo.ExceptionPointerVirtReg,
2199                            TLI.getPointerTy(DAG.getDataLayout())),
2200         dl, ValueVTs[0]);
2201   } else {
2202     Ops[0] = DAG.getConstant(0, dl, TLI.getPointerTy(DAG.getDataLayout()));
2203   }
2204   Ops[1] = DAG.getZExtOrTrunc(
2205       DAG.getCopyFromReg(DAG.getEntryNode(), dl,
2206                          FuncInfo.ExceptionSelectorVirtReg,
2207                          TLI.getPointerTy(DAG.getDataLayout())),
2208       dl, ValueVTs[1]);
2209
2210   // Merge into one.
2211   SDValue Res = DAG.getNode(ISD::MERGE_VALUES, dl,
2212                             DAG.getVTList(ValueVTs), Ops);
2213   setValue(&LP, Res);
2214 }
2215
2216 void SelectionDAGBuilder::sortAndRangeify(CaseClusterVector &Clusters) {
2217 #ifndef NDEBUG
2218   for (const CaseCluster &CC : Clusters)
2219     assert(CC.Low == CC.High && "Input clusters must be single-case");
2220 #endif
2221
2222   std::sort(Clusters.begin(), Clusters.end(),
2223             [](const CaseCluster &a, const CaseCluster &b) {
2224     return a.Low->getValue().slt(b.Low->getValue());
2225   });
2226
2227   // Merge adjacent clusters with the same destination.
2228   const unsigned N = Clusters.size();
2229   unsigned DstIndex = 0;
2230   for (unsigned SrcIndex = 0; SrcIndex < N; ++SrcIndex) {
2231     CaseCluster &CC = Clusters[SrcIndex];
2232     const ConstantInt *CaseVal = CC.Low;
2233     MachineBasicBlock *Succ = CC.MBB;
2234
2235     if (DstIndex != 0 && Clusters[DstIndex - 1].MBB == Succ &&
2236         (CaseVal->getValue() - Clusters[DstIndex - 1].High->getValue()) == 1) {
2237       // If this case has the same successor and is a neighbour, merge it into
2238       // the previous cluster.
2239       Clusters[DstIndex - 1].High = CaseVal;
2240       Clusters[DstIndex - 1].Prob += CC.Prob;
2241     } else {
2242       std::memmove(&Clusters[DstIndex++], &Clusters[SrcIndex],
2243                    sizeof(Clusters[SrcIndex]));
2244     }
2245   }
2246   Clusters.resize(DstIndex);
2247 }
2248
2249 void SelectionDAGBuilder::UpdateSplitBlock(MachineBasicBlock *First,
2250                                            MachineBasicBlock *Last) {
2251   // Update JTCases.
2252   for (unsigned i = 0, e = JTCases.size(); i != e; ++i)
2253     if (JTCases[i].first.HeaderBB == First)
2254       JTCases[i].first.HeaderBB = Last;
2255
2256   // Update BitTestCases.
2257   for (unsigned i = 0, e = BitTestCases.size(); i != e; ++i)
2258     if (BitTestCases[i].Parent == First)
2259       BitTestCases[i].Parent = Last;
2260 }
2261
2262 void SelectionDAGBuilder::visitIndirectBr(const IndirectBrInst &I) {
2263   MachineBasicBlock *IndirectBrMBB = FuncInfo.MBB;
2264
2265   // Update machine-CFG edges with unique successors.
2266   SmallSet<BasicBlock*, 32> Done;
2267   for (unsigned i = 0, e = I.getNumSuccessors(); i != e; ++i) {
2268     BasicBlock *BB = I.getSuccessor(i);
2269     bool Inserted = Done.insert(BB).second;
2270     if (!Inserted)
2271         continue;
2272
2273     MachineBasicBlock *Succ = FuncInfo.MBBMap[BB];
2274     addSuccessorWithProb(IndirectBrMBB, Succ);
2275   }
2276   IndirectBrMBB->normalizeSuccProbs();
2277
2278   DAG.setRoot(DAG.getNode(ISD::BRIND, getCurSDLoc(),
2279                           MVT::Other, getControlRoot(),
2280                           getValue(I.getAddress())));
2281 }
2282
2283 void SelectionDAGBuilder::visitUnreachable(const UnreachableInst &I) {
2284   if (DAG.getTarget().Options.TrapUnreachable)
2285     DAG.setRoot(
2286         DAG.getNode(ISD::TRAP, getCurSDLoc(), MVT::Other, DAG.getRoot()));
2287 }
2288
2289 void SelectionDAGBuilder::visitFSub(const User &I) {
2290   // -0.0 - X --> fneg
2291   Type *Ty = I.getType();
2292   if (isa<Constant>(I.getOperand(0)) &&
2293       I.getOperand(0) == ConstantFP::getZeroValueForNegation(Ty)) {
2294     SDValue Op2 = getValue(I.getOperand(1));
2295     setValue(&I, DAG.getNode(ISD::FNEG, getCurSDLoc(),
2296                              Op2.getValueType(), Op2));
2297     return;
2298   }
2299
2300   visitBinary(I, ISD::FSUB);
2301 }
2302
2303 void SelectionDAGBuilder::visitBinary(const User &I, unsigned OpCode) {
2304   SDValue Op1 = getValue(I.getOperand(0));
2305   SDValue Op2 = getValue(I.getOperand(1));
2306
2307   bool nuw = false;
2308   bool nsw = false;
2309   bool exact = false;
2310   FastMathFlags FMF;
2311
2312   if (const OverflowingBinaryOperator *OFBinOp =
2313           dyn_cast<const OverflowingBinaryOperator>(&I)) {
2314     nuw = OFBinOp->hasNoUnsignedWrap();
2315     nsw = OFBinOp->hasNoSignedWrap();
2316   }
2317   if (const PossiblyExactOperator *ExactOp =
2318           dyn_cast<const PossiblyExactOperator>(&I))
2319     exact = ExactOp->isExact();
2320   if (const FPMathOperator *FPOp = dyn_cast<const FPMathOperator>(&I))
2321     FMF = FPOp->getFastMathFlags();
2322
2323   SDNodeFlags Flags;
2324   Flags.setExact(exact);
2325   Flags.setNoSignedWrap(nsw);
2326   Flags.setNoUnsignedWrap(nuw);
2327   if (EnableFMFInDAG) {
2328     Flags.setAllowReciprocal(FMF.allowReciprocal());
2329     Flags.setNoInfs(FMF.noInfs());
2330     Flags.setNoNaNs(FMF.noNaNs());
2331     Flags.setNoSignedZeros(FMF.noSignedZeros());
2332     Flags.setUnsafeAlgebra(FMF.unsafeAlgebra());
2333   }
2334   SDValue BinNodeValue = DAG.getNode(OpCode, getCurSDLoc(), Op1.getValueType(),
2335                                      Op1, Op2, &Flags);
2336   setValue(&I, BinNodeValue);
2337 }
2338
2339 void SelectionDAGBuilder::visitShift(const User &I, unsigned Opcode) {
2340   SDValue Op1 = getValue(I.getOperand(0));
2341   SDValue Op2 = getValue(I.getOperand(1));
2342
2343   EVT ShiftTy = DAG.getTargetLoweringInfo().getShiftAmountTy(
2344       Op2.getValueType(), DAG.getDataLayout());
2345
2346   // Coerce the shift amount to the right type if we can.
2347   if (!I.getType()->isVectorTy() && Op2.getValueType() != ShiftTy) {
2348     unsigned ShiftSize = ShiftTy.getSizeInBits();
2349     unsigned Op2Size = Op2.getValueType().getSizeInBits();
2350     SDLoc DL = getCurSDLoc();
2351
2352     // If the operand is smaller than the shift count type, promote it.
2353     if (ShiftSize > Op2Size)
2354       Op2 = DAG.getNode(ISD::ZERO_EXTEND, DL, ShiftTy, Op2);
2355
2356     // If the operand is larger than the shift count type but the shift
2357     // count type has enough bits to represent any shift value, truncate
2358     // it now. This is a common case and it exposes the truncate to
2359     // optimization early.
2360     else if (ShiftSize >= Log2_32_Ceil(Op2.getValueType().getSizeInBits()))
2361       Op2 = DAG.getNode(ISD::TRUNCATE, DL, ShiftTy, Op2);
2362     // Otherwise we'll need to temporarily settle for some other convenient
2363     // type.  Type legalization will make adjustments once the shiftee is split.
2364     else
2365       Op2 = DAG.getZExtOrTrunc(Op2, DL, MVT::i32);
2366   }
2367
2368   bool nuw = false;
2369   bool nsw = false;
2370   bool exact = false;
2371
2372   if (Opcode == ISD::SRL || Opcode == ISD::SRA || Opcode == ISD::SHL) {
2373
2374     if (const OverflowingBinaryOperator *OFBinOp =
2375             dyn_cast<const OverflowingBinaryOperator>(&I)) {
2376       nuw = OFBinOp->hasNoUnsignedWrap();
2377       nsw = OFBinOp->hasNoSignedWrap();
2378     }
2379     if (const PossiblyExactOperator *ExactOp =
2380             dyn_cast<const PossiblyExactOperator>(&I))
2381       exact = ExactOp->isExact();
2382   }
2383   SDNodeFlags Flags;
2384   Flags.setExact(exact);
2385   Flags.setNoSignedWrap(nsw);
2386   Flags.setNoUnsignedWrap(nuw);
2387   SDValue Res = DAG.getNode(Opcode, getCurSDLoc(), Op1.getValueType(), Op1, Op2,
2388                             &Flags);
2389   setValue(&I, Res);
2390 }
2391
2392 void SelectionDAGBuilder::visitSDiv(const User &I) {
2393   SDValue Op1 = getValue(I.getOperand(0));
2394   SDValue Op2 = getValue(I.getOperand(1));
2395
2396   SDNodeFlags Flags;
2397   Flags.setExact(isa<PossiblyExactOperator>(&I) &&
2398                  cast<PossiblyExactOperator>(&I)->isExact());
2399   setValue(&I, DAG.getNode(ISD::SDIV, getCurSDLoc(), Op1.getValueType(), Op1,
2400                            Op2, &Flags));
2401 }
2402
2403 void SelectionDAGBuilder::visitICmp(const User &I) {
2404   ICmpInst::Predicate predicate = ICmpInst::BAD_ICMP_PREDICATE;
2405   if (const ICmpInst *IC = dyn_cast<ICmpInst>(&I))
2406     predicate = IC->getPredicate();
2407   else if (const ConstantExpr *IC = dyn_cast<ConstantExpr>(&I))
2408     predicate = ICmpInst::Predicate(IC->getPredicate());
2409   SDValue Op1 = getValue(I.getOperand(0));
2410   SDValue Op2 = getValue(I.getOperand(1));
2411   ISD::CondCode Opcode = getICmpCondCode(predicate);
2412
2413   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2414                                                         I.getType());
2415   setValue(&I, DAG.getSetCC(getCurSDLoc(), DestVT, Op1, Op2, Opcode));
2416 }
2417
2418 void SelectionDAGBuilder::visitFCmp(const User &I) {
2419   FCmpInst::Predicate predicate = FCmpInst::BAD_FCMP_PREDICATE;
2420   if (const FCmpInst *FC = dyn_cast<FCmpInst>(&I))
2421     predicate = FC->getPredicate();
2422   else if (const ConstantExpr *FC = dyn_cast<ConstantExpr>(&I))
2423     predicate = FCmpInst::Predicate(FC->getPredicate());
2424   SDValue Op1 = getValue(I.getOperand(0));
2425   SDValue Op2 = getValue(I.getOperand(1));
2426   ISD::CondCode Condition = getFCmpCondCode(predicate);
2427   
2428   // FIXME: Fcmp instructions have fast-math-flags in IR, so we should use them.
2429   // FIXME: We should propagate the fast-math-flags to the DAG node itself for
2430   // further optimization, but currently FMF is only applicable to binary nodes.
2431   if (TM.Options.NoNaNsFPMath)
2432     Condition = getFCmpCodeWithoutNaN(Condition);
2433   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2434                                                         I.getType());
2435   setValue(&I, DAG.getSetCC(getCurSDLoc(), DestVT, Op1, Op2, Condition));
2436 }
2437
2438 void SelectionDAGBuilder::visitSelect(const User &I) {
2439   SmallVector<EVT, 4> ValueVTs;
2440   ComputeValueVTs(DAG.getTargetLoweringInfo(), DAG.getDataLayout(), I.getType(),
2441                   ValueVTs);
2442   unsigned NumValues = ValueVTs.size();
2443   if (NumValues == 0) return;
2444
2445   SmallVector<SDValue, 4> Values(NumValues);
2446   SDValue Cond     = getValue(I.getOperand(0));
2447   SDValue LHSVal   = getValue(I.getOperand(1));
2448   SDValue RHSVal   = getValue(I.getOperand(2));
2449   auto BaseOps = {Cond};
2450   ISD::NodeType OpCode = Cond.getValueType().isVector() ?
2451     ISD::VSELECT : ISD::SELECT;
2452
2453   // Min/max matching is only viable if all output VTs are the same.
2454   if (std::equal(ValueVTs.begin(), ValueVTs.end(), ValueVTs.begin())) {
2455     EVT VT = ValueVTs[0];
2456     LLVMContext &Ctx = *DAG.getContext();
2457     auto &TLI = DAG.getTargetLoweringInfo();
2458
2459     // We care about the legality of the operation after it has been type
2460     // legalized.
2461     while (TLI.getTypeAction(Ctx, VT) != TargetLoweringBase::TypeLegal &&
2462            VT != TLI.getTypeToTransformTo(Ctx, VT))
2463       VT = TLI.getTypeToTransformTo(Ctx, VT);
2464
2465     // If the vselect is legal, assume we want to leave this as a vector setcc +
2466     // vselect. Otherwise, if this is going to be scalarized, we want to see if
2467     // min/max is legal on the scalar type.
2468     bool UseScalarMinMax = VT.isVector() &&
2469       !TLI.isOperationLegalOrCustom(ISD::VSELECT, VT);
2470
2471     Value *LHS, *RHS;
2472     auto SPR = matchSelectPattern(const_cast<User*>(&I), LHS, RHS);
2473     ISD::NodeType Opc = ISD::DELETED_NODE;
2474     switch (SPR.Flavor) {
2475     case SPF_UMAX:    Opc = ISD::UMAX; break;
2476     case SPF_UMIN:    Opc = ISD::UMIN; break;
2477     case SPF_SMAX:    Opc = ISD::SMAX; break;
2478     case SPF_SMIN:    Opc = ISD::SMIN; break;
2479     case SPF_FMINNUM:
2480       switch (SPR.NaNBehavior) {
2481       case SPNB_NA: llvm_unreachable("No NaN behavior for FP op?");
2482       case SPNB_RETURNS_NAN:   Opc = ISD::FMINNAN; break;
2483       case SPNB_RETURNS_OTHER: Opc = ISD::FMINNUM; break;
2484       case SPNB_RETURNS_ANY: {
2485         if (TLI.isOperationLegalOrCustom(ISD::FMINNUM, VT))
2486           Opc = ISD::FMINNUM;
2487         else if (TLI.isOperationLegalOrCustom(ISD::FMINNAN, VT))
2488           Opc = ISD::FMINNAN;
2489         else if (UseScalarMinMax)
2490           Opc = TLI.isOperationLegalOrCustom(ISD::FMINNUM, VT.getScalarType()) ?
2491             ISD::FMINNUM : ISD::FMINNAN;
2492         break;
2493       }
2494       }
2495       break;
2496     case SPF_FMAXNUM:
2497       switch (SPR.NaNBehavior) {
2498       case SPNB_NA: llvm_unreachable("No NaN behavior for FP op?");
2499       case SPNB_RETURNS_NAN:   Opc = ISD::FMAXNAN; break;
2500       case SPNB_RETURNS_OTHER: Opc = ISD::FMAXNUM; break;
2501       case SPNB_RETURNS_ANY:
2502
2503         if (TLI.isOperationLegalOrCustom(ISD::FMAXNUM, VT))
2504           Opc = ISD::FMAXNUM;
2505         else if (TLI.isOperationLegalOrCustom(ISD::FMAXNAN, VT))
2506           Opc = ISD::FMAXNAN;
2507         else if (UseScalarMinMax)
2508           Opc = TLI.isOperationLegalOrCustom(ISD::FMAXNUM, VT.getScalarType()) ?
2509             ISD::FMAXNUM : ISD::FMAXNAN;
2510         break;
2511       }
2512       break;
2513     default: break;
2514     }
2515
2516     if (Opc != ISD::DELETED_NODE &&
2517         (TLI.isOperationLegalOrCustom(Opc, VT) ||
2518          (UseScalarMinMax &&
2519           TLI.isOperationLegalOrCustom(Opc, VT.getScalarType()))) &&
2520         // If the underlying comparison instruction is used by any other
2521         // instruction, the consumed instructions won't be destroyed, so it is
2522         // not profitable to convert to a min/max.
2523         cast<SelectInst>(&I)->getCondition()->hasOneUse()) {
2524       OpCode = Opc;
2525       LHSVal = getValue(LHS);
2526       RHSVal = getValue(RHS);
2527       BaseOps = {};
2528     }
2529   }
2530
2531   for (unsigned i = 0; i != NumValues; ++i) {
2532     SmallVector<SDValue, 3> Ops(BaseOps.begin(), BaseOps.end());
2533     Ops.push_back(SDValue(LHSVal.getNode(), LHSVal.getResNo() + i));
2534     Ops.push_back(SDValue(RHSVal.getNode(), RHSVal.getResNo() + i));
2535     Values[i] = DAG.getNode(OpCode, getCurSDLoc(),
2536                             LHSVal.getNode()->getValueType(LHSVal.getResNo()+i),
2537                             Ops);
2538   }
2539
2540   setValue(&I, DAG.getNode(ISD::MERGE_VALUES, getCurSDLoc(),
2541                            DAG.getVTList(ValueVTs), Values));
2542 }
2543
2544 void SelectionDAGBuilder::visitTrunc(const User &I) {
2545   // TruncInst cannot be a no-op cast because sizeof(src) > sizeof(dest).
2546   SDValue N = getValue(I.getOperand(0));
2547   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2548                                                         I.getType());
2549   setValue(&I, DAG.getNode(ISD::TRUNCATE, getCurSDLoc(), DestVT, N));
2550 }
2551
2552 void SelectionDAGBuilder::visitZExt(const User &I) {
2553   // ZExt cannot be a no-op cast because sizeof(src) < sizeof(dest).
2554   // ZExt also can't be a cast to bool for same reason. So, nothing much to do
2555   SDValue N = getValue(I.getOperand(0));
2556   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2557                                                         I.getType());
2558   setValue(&I, DAG.getNode(ISD::ZERO_EXTEND, getCurSDLoc(), DestVT, N));
2559 }
2560
2561 void SelectionDAGBuilder::visitSExt(const User &I) {
2562   // SExt cannot be a no-op cast because sizeof(src) < sizeof(dest).
2563   // SExt also can't be a cast to bool for same reason. So, nothing much to do
2564   SDValue N = getValue(I.getOperand(0));
2565   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2566                                                         I.getType());
2567   setValue(&I, DAG.getNode(ISD::SIGN_EXTEND, getCurSDLoc(), DestVT, N));
2568 }
2569
2570 void SelectionDAGBuilder::visitFPTrunc(const User &I) {
2571   // FPTrunc is never a no-op cast, no need to check
2572   SDValue N = getValue(I.getOperand(0));
2573   SDLoc dl = getCurSDLoc();
2574   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2575   EVT DestVT = TLI.getValueType(DAG.getDataLayout(), I.getType());
2576   setValue(&I, DAG.getNode(ISD::FP_ROUND, dl, DestVT, N,
2577                            DAG.getTargetConstant(
2578                                0, dl, TLI.getPointerTy(DAG.getDataLayout()))));
2579 }
2580
2581 void SelectionDAGBuilder::visitFPExt(const User &I) {
2582   // FPExt is never a no-op cast, no need to check
2583   SDValue N = getValue(I.getOperand(0));
2584   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2585                                                         I.getType());
2586   setValue(&I, DAG.getNode(ISD::FP_EXTEND, getCurSDLoc(), DestVT, N));
2587 }
2588
2589 void SelectionDAGBuilder::visitFPToUI(const User &I) {
2590   // FPToUI is never a no-op cast, no need to check
2591   SDValue N = getValue(I.getOperand(0));
2592   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2593                                                         I.getType());
2594   setValue(&I, DAG.getNode(ISD::FP_TO_UINT, getCurSDLoc(), DestVT, N));
2595 }
2596
2597 void SelectionDAGBuilder::visitFPToSI(const User &I) {
2598   // FPToSI is never a no-op cast, no need to check
2599   SDValue N = getValue(I.getOperand(0));
2600   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2601                                                         I.getType());
2602   setValue(&I, DAG.getNode(ISD::FP_TO_SINT, getCurSDLoc(), DestVT, N));
2603 }
2604
2605 void SelectionDAGBuilder::visitUIToFP(const User &I) {
2606   // UIToFP is never a no-op cast, no need to check
2607   SDValue N = getValue(I.getOperand(0));
2608   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2609                                                         I.getType());
2610   setValue(&I, DAG.getNode(ISD::UINT_TO_FP, getCurSDLoc(), DestVT, N));
2611 }
2612
2613 void SelectionDAGBuilder::visitSIToFP(const User &I) {
2614   // SIToFP is never a no-op cast, no need to check
2615   SDValue N = getValue(I.getOperand(0));
2616   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2617                                                         I.getType());
2618   setValue(&I, DAG.getNode(ISD::SINT_TO_FP, getCurSDLoc(), DestVT, N));
2619 }
2620
2621 void SelectionDAGBuilder::visitPtrToInt(const User &I) {
2622   // What to do depends on the size of the integer and the size of the pointer.
2623   // We can either truncate, zero extend, or no-op, accordingly.
2624   SDValue N = getValue(I.getOperand(0));
2625   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2626                                                         I.getType());
2627   setValue(&I, DAG.getZExtOrTrunc(N, getCurSDLoc(), DestVT));
2628 }
2629
2630 void SelectionDAGBuilder::visitIntToPtr(const User &I) {
2631   // What to do depends on the size of the integer and the size of the pointer.
2632   // We can either truncate, zero extend, or no-op, accordingly.
2633   SDValue N = getValue(I.getOperand(0));
2634   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2635                                                         I.getType());
2636   setValue(&I, DAG.getZExtOrTrunc(N, getCurSDLoc(), DestVT));
2637 }
2638
2639 void SelectionDAGBuilder::visitBitCast(const User &I) {
2640   SDValue N = getValue(I.getOperand(0));
2641   SDLoc dl = getCurSDLoc();
2642   EVT DestVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
2643                                                         I.getType());
2644
2645   // BitCast assures us that source and destination are the same size so this is
2646   // either a BITCAST or a no-op.
2647   if (DestVT != N.getValueType())
2648     setValue(&I, DAG.getNode(ISD::BITCAST, dl,
2649                              DestVT, N)); // convert types.
2650   // Check if the original LLVM IR Operand was a ConstantInt, because getValue()
2651   // might fold any kind of constant expression to an integer constant and that
2652   // is not what we are looking for. Only regcognize a bitcast of a genuine
2653   // constant integer as an opaque constant.
2654   else if(ConstantInt *C = dyn_cast<ConstantInt>(I.getOperand(0)))
2655     setValue(&I, DAG.getConstant(C->getValue(), dl, DestVT, /*isTarget=*/false,
2656                                  /*isOpaque*/true));
2657   else
2658     setValue(&I, N);            // noop cast.
2659 }
2660
2661 void SelectionDAGBuilder::visitAddrSpaceCast(const User &I) {
2662   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2663   const Value *SV = I.getOperand(0);
2664   SDValue N = getValue(SV);
2665   EVT DestVT = TLI.getValueType(DAG.getDataLayout(), I.getType());
2666
2667   unsigned SrcAS = SV->getType()->getPointerAddressSpace();
2668   unsigned DestAS = I.getType()->getPointerAddressSpace();
2669
2670   if (!TLI.isNoopAddrSpaceCast(SrcAS, DestAS))
2671     N = DAG.getAddrSpaceCast(getCurSDLoc(), DestVT, N, SrcAS, DestAS);
2672
2673   setValue(&I, N);
2674 }
2675
2676 void SelectionDAGBuilder::visitInsertElement(const User &I) {
2677   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2678   SDValue InVec = getValue(I.getOperand(0));
2679   SDValue InVal = getValue(I.getOperand(1));
2680   SDValue InIdx = DAG.getSExtOrTrunc(getValue(I.getOperand(2)), getCurSDLoc(),
2681                                      TLI.getVectorIdxTy(DAG.getDataLayout()));
2682   setValue(&I, DAG.getNode(ISD::INSERT_VECTOR_ELT, getCurSDLoc(),
2683                            TLI.getValueType(DAG.getDataLayout(), I.getType()),
2684                            InVec, InVal, InIdx));
2685 }
2686
2687 void SelectionDAGBuilder::visitExtractElement(const User &I) {
2688   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2689   SDValue InVec = getValue(I.getOperand(0));
2690   SDValue InIdx = DAG.getSExtOrTrunc(getValue(I.getOperand(1)), getCurSDLoc(),
2691                                      TLI.getVectorIdxTy(DAG.getDataLayout()));
2692   setValue(&I, DAG.getNode(ISD::EXTRACT_VECTOR_ELT, getCurSDLoc(),
2693                            TLI.getValueType(DAG.getDataLayout(), I.getType()),
2694                            InVec, InIdx));
2695 }
2696
2697 // Utility for visitShuffleVector - Return true if every element in Mask,
2698 // beginning from position Pos and ending in Pos+Size, falls within the
2699 // specified sequential range [L, L+Pos). or is undef.
2700 static bool isSequentialInRange(const SmallVectorImpl<int> &Mask,
2701                                 unsigned Pos, unsigned Size, int Low) {
2702   for (unsigned i = Pos, e = Pos+Size; i != e; ++i, ++Low)
2703     if (Mask[i] >= 0 && Mask[i] != Low)
2704       return false;
2705   return true;
2706 }
2707
2708 void SelectionDAGBuilder::visitShuffleVector(const User &I) {
2709   SDValue Src1 = getValue(I.getOperand(0));
2710   SDValue Src2 = getValue(I.getOperand(1));
2711
2712   SmallVector<int, 8> Mask;
2713   ShuffleVectorInst::getShuffleMask(cast<Constant>(I.getOperand(2)), Mask);
2714   unsigned MaskNumElts = Mask.size();
2715
2716   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2717   EVT VT = TLI.getValueType(DAG.getDataLayout(), I.getType());
2718   EVT SrcVT = Src1.getValueType();
2719   unsigned SrcNumElts = SrcVT.getVectorNumElements();
2720
2721   if (SrcNumElts == MaskNumElts) {
2722     setValue(&I, DAG.getVectorShuffle(VT, getCurSDLoc(), Src1, Src2,
2723                                       &Mask[0]));
2724     return;
2725   }
2726
2727   // Normalize the shuffle vector since mask and vector length don't match.
2728   if (SrcNumElts < MaskNumElts && MaskNumElts % SrcNumElts == 0) {
2729     // Mask is longer than the source vectors and is a multiple of the source
2730     // vectors.  We can use concatenate vector to make the mask and vectors
2731     // lengths match.
2732     if (SrcNumElts*2 == MaskNumElts) {
2733       // First check for Src1 in low and Src2 in high
2734       if (isSequentialInRange(Mask, 0, SrcNumElts, 0) &&
2735           isSequentialInRange(Mask, SrcNumElts, SrcNumElts, SrcNumElts)) {
2736         // The shuffle is concatenating two vectors together.
2737         setValue(&I, DAG.getNode(ISD::CONCAT_VECTORS, getCurSDLoc(),
2738                                  VT, Src1, Src2));
2739         return;
2740       }
2741       // Then check for Src2 in low and Src1 in high
2742       if (isSequentialInRange(Mask, 0, SrcNumElts, SrcNumElts) &&
2743           isSequentialInRange(Mask, SrcNumElts, SrcNumElts, 0)) {
2744         // The shuffle is concatenating two vectors together.
2745         setValue(&I, DAG.getNode(ISD::CONCAT_VECTORS, getCurSDLoc(),
2746                                  VT, Src2, Src1));
2747         return;
2748       }
2749     }
2750
2751     // Pad both vectors with undefs to make them the same length as the mask.
2752     unsigned NumConcat = MaskNumElts / SrcNumElts;
2753     bool Src1U = Src1.getOpcode() == ISD::UNDEF;
2754     bool Src2U = Src2.getOpcode() == ISD::UNDEF;
2755     SDValue UndefVal = DAG.getUNDEF(SrcVT);
2756
2757     SmallVector<SDValue, 8> MOps1(NumConcat, UndefVal);
2758     SmallVector<SDValue, 8> MOps2(NumConcat, UndefVal);
2759     MOps1[0] = Src1;
2760     MOps2[0] = Src2;
2761
2762     Src1 = Src1U ? DAG.getUNDEF(VT) : DAG.getNode(ISD::CONCAT_VECTORS,
2763                                                   getCurSDLoc(), VT, MOps1);
2764     Src2 = Src2U ? DAG.getUNDEF(VT) : DAG.getNode(ISD::CONCAT_VECTORS,
2765                                                   getCurSDLoc(), VT, MOps2);
2766
2767     // Readjust mask for new input vector length.
2768     SmallVector<int, 8> MappedOps;
2769     for (unsigned i = 0; i != MaskNumElts; ++i) {
2770       int Idx = Mask[i];
2771       if (Idx >= (int)SrcNumElts)
2772         Idx -= SrcNumElts - MaskNumElts;
2773       MappedOps.push_back(Idx);
2774     }
2775
2776     setValue(&I, DAG.getVectorShuffle(VT, getCurSDLoc(), Src1, Src2,
2777                                       &MappedOps[0]));
2778     return;
2779   }
2780
2781   if (SrcNumElts > MaskNumElts) {
2782     // Analyze the access pattern of the vector to see if we can extract
2783     // two subvectors and do the shuffle. The analysis is done by calculating
2784     // the range of elements the mask access on both vectors.
2785     int MinRange[2] = { static_cast<int>(SrcNumElts),
2786                         static_cast<int>(SrcNumElts)};
2787     int MaxRange[2] = {-1, -1};
2788
2789     for (unsigned i = 0; i != MaskNumElts; ++i) {
2790       int Idx = Mask[i];
2791       unsigned Input = 0;
2792       if (Idx < 0)
2793         continue;
2794
2795       if (Idx >= (int)SrcNumElts) {
2796         Input = 1;
2797         Idx -= SrcNumElts;
2798       }
2799       if (Idx > MaxRange[Input])
2800         MaxRange[Input] = Idx;
2801       if (Idx < MinRange[Input])
2802         MinRange[Input] = Idx;
2803     }
2804
2805     // Check if the access is smaller than the vector size and can we find
2806     // a reasonable extract index.
2807     int RangeUse[2] = { -1, -1 };  // 0 = Unused, 1 = Extract, -1 = Can not
2808                                    // Extract.
2809     int StartIdx[2];  // StartIdx to extract from
2810     for (unsigned Input = 0; Input < 2; ++Input) {
2811       if (MinRange[Input] >= (int)SrcNumElts && MaxRange[Input] < 0) {
2812         RangeUse[Input] = 0; // Unused
2813         StartIdx[Input] = 0;
2814         continue;
2815       }
2816
2817       // Find a good start index that is a multiple of the mask length. Then
2818       // see if the rest of the elements are in range.
2819       StartIdx[Input] = (MinRange[Input]/MaskNumElts)*MaskNumElts;
2820       if (MaxRange[Input] - StartIdx[Input] < (int)MaskNumElts &&
2821           StartIdx[Input] + MaskNumElts <= SrcNumElts)
2822         RangeUse[Input] = 1; // Extract from a multiple of the mask length.
2823     }
2824
2825     if (RangeUse[0] == 0 && RangeUse[1] == 0) {
2826       setValue(&I, DAG.getUNDEF(VT)); // Vectors are not used.
2827       return;
2828     }
2829     if (RangeUse[0] >= 0 && RangeUse[1] >= 0) {
2830       // Extract appropriate subvector and generate a vector shuffle
2831       for (unsigned Input = 0; Input < 2; ++Input) {
2832         SDValue &Src = Input == 0 ? Src1 : Src2;
2833         if (RangeUse[Input] == 0)
2834           Src = DAG.getUNDEF(VT);
2835         else {
2836           SDLoc dl = getCurSDLoc();
2837           Src = DAG.getNode(
2838               ISD::EXTRACT_SUBVECTOR, dl, VT, Src,
2839               DAG.getConstant(StartIdx[Input], dl,
2840                               TLI.getVectorIdxTy(DAG.getDataLayout())));
2841         }
2842       }
2843
2844       // Calculate new mask.
2845       SmallVector<int, 8> MappedOps;
2846       for (unsigned i = 0; i != MaskNumElts; ++i) {
2847         int Idx = Mask[i];
2848         if (Idx >= 0) {
2849           if (Idx < (int)SrcNumElts)
2850             Idx -= StartIdx[0];
2851           else
2852             Idx -= SrcNumElts + StartIdx[1] - MaskNumElts;
2853         }
2854         MappedOps.push_back(Idx);
2855       }
2856
2857       setValue(&I, DAG.getVectorShuffle(VT, getCurSDLoc(), Src1, Src2,
2858                                         &MappedOps[0]));
2859       return;
2860     }
2861   }
2862
2863   // We can't use either concat vectors or extract subvectors so fall back to
2864   // replacing the shuffle with extract and build vector.
2865   // to insert and build vector.
2866   EVT EltVT = VT.getVectorElementType();
2867   EVT IdxVT = TLI.getVectorIdxTy(DAG.getDataLayout());
2868   SDLoc dl = getCurSDLoc();
2869   SmallVector<SDValue,8> Ops;
2870   for (unsigned i = 0; i != MaskNumElts; ++i) {
2871     int Idx = Mask[i];
2872     SDValue Res;
2873
2874     if (Idx < 0) {
2875       Res = DAG.getUNDEF(EltVT);
2876     } else {
2877       SDValue &Src = Idx < (int)SrcNumElts ? Src1 : Src2;
2878       if (Idx >= (int)SrcNumElts) Idx -= SrcNumElts;
2879
2880       Res = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl,
2881                         EltVT, Src, DAG.getConstant(Idx, dl, IdxVT));
2882     }
2883
2884     Ops.push_back(Res);
2885   }
2886
2887   setValue(&I, DAG.getNode(ISD::BUILD_VECTOR, dl, VT, Ops));
2888 }
2889
2890 void SelectionDAGBuilder::visitInsertValue(const InsertValueInst &I) {
2891   const Value *Op0 = I.getOperand(0);
2892   const Value *Op1 = I.getOperand(1);
2893   Type *AggTy = I.getType();
2894   Type *ValTy = Op1->getType();
2895   bool IntoUndef = isa<UndefValue>(Op0);
2896   bool FromUndef = isa<UndefValue>(Op1);
2897
2898   unsigned LinearIndex = ComputeLinearIndex(AggTy, I.getIndices());
2899
2900   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2901   SmallVector<EVT, 4> AggValueVTs;
2902   ComputeValueVTs(TLI, DAG.getDataLayout(), AggTy, AggValueVTs);
2903   SmallVector<EVT, 4> ValValueVTs;
2904   ComputeValueVTs(TLI, DAG.getDataLayout(), ValTy, ValValueVTs);
2905
2906   unsigned NumAggValues = AggValueVTs.size();
2907   unsigned NumValValues = ValValueVTs.size();
2908   SmallVector<SDValue, 4> Values(NumAggValues);
2909
2910   // Ignore an insertvalue that produces an empty object
2911   if (!NumAggValues) {
2912     setValue(&I, DAG.getUNDEF(MVT(MVT::Other)));
2913     return;
2914   }
2915
2916   SDValue Agg = getValue(Op0);
2917   unsigned i = 0;
2918   // Copy the beginning value(s) from the original aggregate.
2919   for (; i != LinearIndex; ++i)
2920     Values[i] = IntoUndef ? DAG.getUNDEF(AggValueVTs[i]) :
2921                 SDValue(Agg.getNode(), Agg.getResNo() + i);
2922   // Copy values from the inserted value(s).
2923   if (NumValValues) {
2924     SDValue Val = getValue(Op1);
2925     for (; i != LinearIndex + NumValValues; ++i)
2926       Values[i] = FromUndef ? DAG.getUNDEF(AggValueVTs[i]) :
2927                   SDValue(Val.getNode(), Val.getResNo() + i - LinearIndex);
2928   }
2929   // Copy remaining value(s) from the original aggregate.
2930   for (; i != NumAggValues; ++i)
2931     Values[i] = IntoUndef ? DAG.getUNDEF(AggValueVTs[i]) :
2932                 SDValue(Agg.getNode(), Agg.getResNo() + i);
2933
2934   setValue(&I, DAG.getNode(ISD::MERGE_VALUES, getCurSDLoc(),
2935                            DAG.getVTList(AggValueVTs), Values));
2936 }
2937
2938 void SelectionDAGBuilder::visitExtractValue(const ExtractValueInst &I) {
2939   const Value *Op0 = I.getOperand(0);
2940   Type *AggTy = Op0->getType();
2941   Type *ValTy = I.getType();
2942   bool OutOfUndef = isa<UndefValue>(Op0);
2943
2944   unsigned LinearIndex = ComputeLinearIndex(AggTy, I.getIndices());
2945
2946   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2947   SmallVector<EVT, 4> ValValueVTs;
2948   ComputeValueVTs(TLI, DAG.getDataLayout(), ValTy, ValValueVTs);
2949
2950   unsigned NumValValues = ValValueVTs.size();
2951
2952   // Ignore a extractvalue that produces an empty object
2953   if (!NumValValues) {
2954     setValue(&I, DAG.getUNDEF(MVT(MVT::Other)));
2955     return;
2956   }
2957
2958   SmallVector<SDValue, 4> Values(NumValValues);
2959
2960   SDValue Agg = getValue(Op0);
2961   // Copy out the selected value(s).
2962   for (unsigned i = LinearIndex; i != LinearIndex + NumValValues; ++i)
2963     Values[i - LinearIndex] =
2964       OutOfUndef ?
2965         DAG.getUNDEF(Agg.getNode()->getValueType(Agg.getResNo() + i)) :
2966         SDValue(Agg.getNode(), Agg.getResNo() + i);
2967
2968   setValue(&I, DAG.getNode(ISD::MERGE_VALUES, getCurSDLoc(),
2969                            DAG.getVTList(ValValueVTs), Values));
2970 }
2971
2972 void SelectionDAGBuilder::visitGetElementPtr(const User &I) {
2973   Value *Op0 = I.getOperand(0);
2974   // Note that the pointer operand may be a vector of pointers. Take the scalar
2975   // element which holds a pointer.
2976   Type *Ty = Op0->getType()->getScalarType();
2977   unsigned AS = Ty->getPointerAddressSpace();
2978   SDValue N = getValue(Op0);
2979   SDLoc dl = getCurSDLoc();
2980
2981   // Normalize Vector GEP - all scalar operands should be converted to the
2982   // splat vector.
2983   unsigned VectorWidth = I.getType()->isVectorTy() ?
2984     cast<VectorType>(I.getType())->getVectorNumElements() : 0;
2985
2986   if (VectorWidth && !N.getValueType().isVector()) {
2987     MVT VT = MVT::getVectorVT(N.getValueType().getSimpleVT(), VectorWidth);
2988     SmallVector<SDValue, 16> Ops(VectorWidth, N);
2989     N = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, Ops);
2990   }
2991   for (GetElementPtrInst::const_op_iterator OI = I.op_begin()+1, E = I.op_end();
2992        OI != E; ++OI) {
2993     const Value *Idx = *OI;
2994     if (StructType *StTy = dyn_cast<StructType>(Ty)) {
2995       unsigned Field = cast<Constant>(Idx)->getUniqueInteger().getZExtValue();
2996       if (Field) {
2997         // N = N + Offset
2998         uint64_t Offset = DL->getStructLayout(StTy)->getElementOffset(Field);
2999         N = DAG.getNode(ISD::ADD, dl, N.getValueType(), N,
3000                         DAG.getConstant(Offset, dl, N.getValueType()));
3001       }
3002
3003       Ty = StTy->getElementType(Field);
3004     } else {
3005       Ty = cast<SequentialType>(Ty)->getElementType();
3006       MVT PtrTy =
3007           DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout(), AS);
3008       unsigned PtrSize = PtrTy.getSizeInBits();
3009       APInt ElementSize(PtrSize, DL->getTypeAllocSize(Ty));
3010
3011       // If this is a scalar constant or a splat vector of constants,
3012       // handle it quickly.
3013       const auto *CI = dyn_cast<ConstantInt>(Idx);
3014       if (!CI && isa<ConstantDataVector>(Idx) &&
3015           cast<ConstantDataVector>(Idx)->getSplatValue())
3016         CI = cast<ConstantInt>(cast<ConstantDataVector>(Idx)->getSplatValue());
3017
3018       if (CI) {
3019         if (CI->isZero())
3020           continue;
3021         APInt Offs = ElementSize * CI->getValue().sextOrTrunc(PtrSize);
3022         SDValue OffsVal = VectorWidth ?
3023           DAG.getConstant(Offs, dl, MVT::getVectorVT(PtrTy, VectorWidth)) :
3024           DAG.getConstant(Offs, dl, PtrTy);
3025         N = DAG.getNode(ISD::ADD, dl, N.getValueType(), N, OffsVal);
3026         continue;
3027       }
3028
3029       // N = N + Idx * ElementSize;
3030       SDValue IdxN = getValue(Idx);
3031
3032       if (!IdxN.getValueType().isVector() && VectorWidth) {
3033         MVT VT = MVT::getVectorVT(IdxN.getValueType().getSimpleVT(), VectorWidth);
3034         SmallVector<SDValue, 16> Ops(VectorWidth, IdxN);
3035         IdxN = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, Ops);      
3036       }
3037       // If the index is smaller or larger than intptr_t, truncate or extend
3038       // it.
3039       IdxN = DAG.getSExtOrTrunc(IdxN, dl, N.getValueType());
3040
3041       // If this is a multiply by a power of two, turn it into a shl
3042       // immediately.  This is a very common case.
3043       if (ElementSize != 1) {
3044         if (ElementSize.isPowerOf2()) {
3045           unsigned Amt = ElementSize.logBase2();
3046           IdxN = DAG.getNode(ISD::SHL, dl,
3047                              N.getValueType(), IdxN,
3048                              DAG.getConstant(Amt, dl, IdxN.getValueType()));
3049         } else {
3050           SDValue Scale = DAG.getConstant(ElementSize, dl, IdxN.getValueType());
3051           IdxN = DAG.getNode(ISD::MUL, dl,
3052                              N.getValueType(), IdxN, Scale);
3053         }
3054       }
3055
3056       N = DAG.getNode(ISD::ADD, dl,
3057                       N.getValueType(), N, IdxN);
3058     }
3059   }
3060
3061   setValue(&I, N);
3062 }
3063
3064 void SelectionDAGBuilder::visitAlloca(const AllocaInst &I) {
3065   // If this is a fixed sized alloca in the entry block of the function,
3066   // allocate it statically on the stack.
3067   if (FuncInfo.StaticAllocaMap.count(&I))
3068     return;   // getValue will auto-populate this.
3069
3070   SDLoc dl = getCurSDLoc();
3071   Type *Ty = I.getAllocatedType();
3072   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3073   auto &DL = DAG.getDataLayout();
3074   uint64_t TySize = DL.getTypeAllocSize(Ty);
3075   unsigned Align =
3076       std::max((unsigned)DL.getPrefTypeAlignment(Ty), I.getAlignment());
3077
3078   SDValue AllocSize = getValue(I.getArraySize());
3079
3080   EVT IntPtr = TLI.getPointerTy(DAG.getDataLayout());
3081   if (AllocSize.getValueType() != IntPtr)
3082     AllocSize = DAG.getZExtOrTrunc(AllocSize, dl, IntPtr);
3083
3084   AllocSize = DAG.getNode(ISD::MUL, dl, IntPtr,
3085                           AllocSize,
3086                           DAG.getConstant(TySize, dl, IntPtr));
3087
3088   // Handle alignment.  If the requested alignment is less than or equal to
3089   // the stack alignment, ignore it.  If the size is greater than or equal to
3090   // the stack alignment, we note this in the DYNAMIC_STACKALLOC node.
3091   unsigned StackAlign =
3092       DAG.getSubtarget().getFrameLowering()->getStackAlignment();
3093   if (Align <= StackAlign)
3094     Align = 0;
3095
3096   // Round the size of the allocation up to the stack alignment size
3097   // by add SA-1 to the size.
3098   AllocSize = DAG.getNode(ISD::ADD, dl,
3099                           AllocSize.getValueType(), AllocSize,
3100                           DAG.getIntPtrConstant(StackAlign - 1, dl));
3101
3102   // Mask out the low bits for alignment purposes.
3103   AllocSize = DAG.getNode(ISD::AND, dl,
3104                           AllocSize.getValueType(), AllocSize,
3105                           DAG.getIntPtrConstant(~(uint64_t)(StackAlign - 1),
3106                                                 dl));
3107
3108   SDValue Ops[] = { getRoot(), AllocSize, DAG.getIntPtrConstant(Align, dl) };
3109   SDVTList VTs = DAG.getVTList(AllocSize.getValueType(), MVT::Other);
3110   SDValue DSA = DAG.getNode(ISD::DYNAMIC_STACKALLOC, dl, VTs, Ops);
3111   setValue(&I, DSA);
3112   DAG.setRoot(DSA.getValue(1));
3113
3114   assert(FuncInfo.MF->getFrameInfo()->hasVarSizedObjects());
3115 }
3116
3117 void SelectionDAGBuilder::visitLoad(const LoadInst &I) {
3118   if (I.isAtomic())
3119     return visitAtomicLoad(I);
3120
3121   const Value *SV = I.getOperand(0);
3122   SDValue Ptr = getValue(SV);
3123
3124   Type *Ty = I.getType();
3125
3126   bool isVolatile = I.isVolatile();
3127   bool isNonTemporal = I.getMetadata(LLVMContext::MD_nontemporal) != nullptr;
3128
3129   // The IR notion of invariant_load only guarantees that all *non-faulting*
3130   // invariant loads result in the same value.  The MI notion of invariant load
3131   // guarantees that the load can be legally moved to any location within its
3132   // containing function.  The MI notion of invariant_load is stronger than the
3133   // IR notion of invariant_load -- an MI invariant_load is an IR invariant_load
3134   // with a guarantee that the location being loaded from is dereferenceable
3135   // throughout the function's lifetime.
3136
3137   bool isInvariant = I.getMetadata(LLVMContext::MD_invariant_load) != nullptr &&
3138                      isDereferenceablePointer(SV, DAG.getDataLayout());
3139   unsigned Alignment = I.getAlignment();
3140
3141   AAMDNodes AAInfo;
3142   I.getAAMetadata(AAInfo);
3143   const MDNode *Ranges = I.getMetadata(LLVMContext::MD_range);
3144
3145   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3146   SmallVector<EVT, 4> ValueVTs;
3147   SmallVector<uint64_t, 4> Offsets;
3148   ComputeValueVTs(TLI, DAG.getDataLayout(), Ty, ValueVTs, &Offsets);
3149   unsigned NumValues = ValueVTs.size();
3150   if (NumValues == 0)
3151     return;
3152
3153   SDValue Root;
3154   bool ConstantMemory = false;
3155   if (isVolatile || NumValues > MaxParallelChains)
3156     // Serialize volatile loads with other side effects.
3157     Root = getRoot();
3158   else if (AA->pointsToConstantMemory(MemoryLocation(
3159                SV, DAG.getDataLayout().getTypeStoreSize(Ty), AAInfo))) {
3160     // Do not serialize (non-volatile) loads of constant memory with anything.
3161     Root = DAG.getEntryNode();
3162     ConstantMemory = true;
3163   } else {
3164     // Do not serialize non-volatile loads against each other.
3165     Root = DAG.getRoot();
3166   }
3167
3168   SDLoc dl = getCurSDLoc();
3169
3170   if (isVolatile)
3171     Root = TLI.prepareVolatileOrAtomicLoad(Root, dl, DAG);
3172
3173   SmallVector<SDValue, 4> Values(NumValues);
3174   SmallVector<SDValue, 4> Chains(std::min(MaxParallelChains, NumValues));
3175   EVT PtrVT = Ptr.getValueType();
3176   unsigned ChainI = 0;
3177   for (unsigned i = 0; i != NumValues; ++i, ++ChainI) {
3178     // Serializing loads here may result in excessive register pressure, and
3179     // TokenFactor places arbitrary choke points on the scheduler. SD scheduling
3180     // could recover a bit by hoisting nodes upward in the chain by recognizing
3181     // they are side-effect free or do not alias. The optimizer should really
3182     // avoid this case by converting large object/array copies to llvm.memcpy
3183     // (MaxParallelChains should always remain as failsafe).
3184     if (ChainI == MaxParallelChains) {
3185       assert(PendingLoads.empty() && "PendingLoads must be serialized first");
3186       SDValue Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
3187                                   makeArrayRef(Chains.data(), ChainI));
3188       Root = Chain;
3189       ChainI = 0;
3190     }
3191     SDValue A = DAG.getNode(ISD::ADD, dl,
3192                             PtrVT, Ptr,
3193                             DAG.getConstant(Offsets[i], dl, PtrVT));
3194     SDValue L = DAG.getLoad(ValueVTs[i], dl, Root,
3195                             A, MachinePointerInfo(SV, Offsets[i]), isVolatile,
3196                             isNonTemporal, isInvariant, Alignment, AAInfo,
3197                             Ranges);
3198
3199     Values[i] = L;
3200     Chains[ChainI] = L.getValue(1);
3201   }
3202
3203   if (!ConstantMemory) {
3204     SDValue Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
3205                                 makeArrayRef(Chains.data(), ChainI));
3206     if (isVolatile)
3207       DAG.setRoot(Chain);
3208     else
3209       PendingLoads.push_back(Chain);
3210   }
3211
3212   setValue(&I, DAG.getNode(ISD::MERGE_VALUES, dl,
3213                            DAG.getVTList(ValueVTs), Values));
3214 }
3215
3216 void SelectionDAGBuilder::visitStore(const StoreInst &I) {
3217   if (I.isAtomic())
3218     return visitAtomicStore(I);
3219
3220   const Value *SrcV = I.getOperand(0);
3221   const Value *PtrV = I.getOperand(1);
3222
3223   SmallVector<EVT, 4> ValueVTs;
3224   SmallVector<uint64_t, 4> Offsets;
3225   ComputeValueVTs(DAG.getTargetLoweringInfo(), DAG.getDataLayout(),
3226                   SrcV->getType(), ValueVTs, &Offsets);
3227   unsigned NumValues = ValueVTs.size();
3228   if (NumValues == 0)
3229     return;
3230
3231   // Get the lowered operands. Note that we do this after
3232   // checking if NumResults is zero, because with zero results
3233   // the operands won't have values in the map.
3234   SDValue Src = getValue(SrcV);
3235   SDValue Ptr = getValue(PtrV);
3236
3237   SDValue Root = getRoot();
3238   SmallVector<SDValue, 4> Chains(std::min(MaxParallelChains, NumValues));
3239   EVT PtrVT = Ptr.getValueType();
3240   bool isVolatile = I.isVolatile();
3241   bool isNonTemporal = I.getMetadata(LLVMContext::MD_nontemporal) != nullptr;
3242   unsigned Alignment = I.getAlignment();
3243   SDLoc dl = getCurSDLoc();
3244
3245   AAMDNodes AAInfo;
3246   I.getAAMetadata(AAInfo);
3247
3248   unsigned ChainI = 0;
3249   for (unsigned i = 0; i != NumValues; ++i, ++ChainI) {
3250     // See visitLoad comments.
3251     if (ChainI == MaxParallelChains) {
3252       SDValue Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
3253                                   makeArrayRef(Chains.data(), ChainI));
3254       Root = Chain;
3255       ChainI = 0;
3256     }
3257     SDValue Add = DAG.getNode(ISD::ADD, dl, PtrVT, Ptr,
3258                               DAG.getConstant(Offsets[i], dl, PtrVT));
3259     SDValue St = DAG.getStore(Root, dl,
3260                               SDValue(Src.getNode(), Src.getResNo() + i),
3261                               Add, MachinePointerInfo(PtrV, Offsets[i]),
3262                               isVolatile, isNonTemporal, Alignment, AAInfo);
3263     Chains[ChainI] = St;
3264   }
3265
3266   SDValue StoreNode = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
3267                                   makeArrayRef(Chains.data(), ChainI));
3268   DAG.setRoot(StoreNode);
3269 }
3270
3271 void SelectionDAGBuilder::visitMaskedStore(const CallInst &I) {
3272   SDLoc sdl = getCurSDLoc();
3273
3274   // llvm.masked.store.*(Src0, Ptr, alignment, Mask)
3275   Value  *PtrOperand = I.getArgOperand(1);
3276   SDValue Ptr = getValue(PtrOperand);
3277   SDValue Src0 = getValue(I.getArgOperand(0));
3278   SDValue Mask = getValue(I.getArgOperand(3));
3279   EVT VT = Src0.getValueType();
3280   unsigned Alignment = (cast<ConstantInt>(I.getArgOperand(2)))->getZExtValue();
3281   if (!Alignment)
3282     Alignment = DAG.getEVTAlignment(VT);
3283
3284   AAMDNodes AAInfo;
3285   I.getAAMetadata(AAInfo);
3286
3287   MachineMemOperand *MMO =
3288     DAG.getMachineFunction().
3289     getMachineMemOperand(MachinePointerInfo(PtrOperand),
3290                           MachineMemOperand::MOStore,  VT.getStoreSize(),
3291                           Alignment, AAInfo);
3292   SDValue StoreNode = DAG.getMaskedStore(getRoot(), sdl, Src0, Ptr, Mask, VT,
3293                                          MMO, false);
3294   DAG.setRoot(StoreNode);
3295   setValue(&I, StoreNode);
3296 }
3297
3298 // Get a uniform base for the Gather/Scatter intrinsic.
3299 // The first argument of the Gather/Scatter intrinsic is a vector of pointers.
3300 // We try to represent it as a base pointer + vector of indices.
3301 // Usually, the vector of pointers comes from a 'getelementptr' instruction.
3302 // The first operand of the GEP may be a single pointer or a vector of pointers
3303 // Example:
3304 //   %gep.ptr = getelementptr i32, <8 x i32*> %vptr, <8 x i32> %ind
3305 //  or
3306 //   %gep.ptr = getelementptr i32, i32* %ptr,        <8 x i32> %ind
3307 // %res = call <8 x i32> @llvm.masked.gather.v8i32(<8 x i32*> %gep.ptr, ..
3308 //
3309 // When the first GEP operand is a single pointer - it is the uniform base we
3310 // are looking for. If first operand of the GEP is a splat vector - we
3311 // extract the spalt value and use it as a uniform base.
3312 // In all other cases the function returns 'false'.
3313 //
3314 static bool getUniformBase(const Value *& Ptr, SDValue& Base, SDValue& Index,
3315                            SelectionDAGBuilder* SDB) {
3316
3317   SelectionDAG& DAG = SDB->DAG;
3318   LLVMContext &Context = *DAG.getContext();
3319
3320   assert(Ptr->getType()->isVectorTy() && "Uexpected pointer type");
3321   const GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Ptr);
3322   if (!GEP || GEP->getNumOperands() > 2)
3323     return false;
3324
3325   const Value *GEPPtr = GEP->getPointerOperand();
3326   if (!GEPPtr->getType()->isVectorTy())
3327     Ptr = GEPPtr;
3328   else if (!(Ptr = getSplatValue(GEPPtr)))
3329     return false;
3330
3331   Value *IndexVal = GEP->getOperand(1);
3332
3333   // The operands of the GEP may be defined in another basic block.
3334   // In this case we'll not find nodes for the operands.
3335   if (!SDB->findValue(Ptr) || !SDB->findValue(IndexVal))
3336     return false;
3337
3338   Base = SDB->getValue(Ptr);
3339   Index = SDB->getValue(IndexVal);
3340
3341   // Suppress sign extension.
3342   if (SExtInst* Sext = dyn_cast<SExtInst>(IndexVal)) {
3343     if (SDB->findValue(Sext->getOperand(0))) {
3344       IndexVal = Sext->getOperand(0);
3345       Index = SDB->getValue(IndexVal);
3346     }
3347   }
3348   if (!Index.getValueType().isVector()) {
3349     unsigned GEPWidth = GEP->getType()->getVectorNumElements();
3350     EVT VT = EVT::getVectorVT(Context, Index.getValueType(), GEPWidth);
3351     SmallVector<SDValue, 16> Ops(GEPWidth, Index);
3352     Index = DAG.getNode(ISD::BUILD_VECTOR, SDLoc(Index), VT, Ops);
3353   }
3354   return true;
3355 }
3356
3357 void SelectionDAGBuilder::visitMaskedScatter(const CallInst &I) {
3358   SDLoc sdl = getCurSDLoc();
3359
3360   // llvm.masked.scatter.*(Src0, Ptrs, alignemt, Mask)
3361   const Value *Ptr = I.getArgOperand(1);
3362   SDValue Src0 = getValue(I.getArgOperand(0));
3363   SDValue Mask = getValue(I.getArgOperand(3));
3364   EVT VT = Src0.getValueType();
3365   unsigned Alignment = (cast<ConstantInt>(I.getArgOperand(2)))->getZExtValue();
3366   if (!Alignment)
3367     Alignment = DAG.getEVTAlignment(VT);
3368   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3369
3370   AAMDNodes AAInfo;
3371   I.getAAMetadata(AAInfo);
3372
3373   SDValue Base;
3374   SDValue Index;
3375   const Value *BasePtr = Ptr;
3376   bool UniformBase = getUniformBase(BasePtr, Base, Index, this);
3377
3378   const Value *MemOpBasePtr = UniformBase ? BasePtr : nullptr;
3379   MachineMemOperand *MMO = DAG.getMachineFunction().
3380     getMachineMemOperand(MachinePointerInfo(MemOpBasePtr),
3381                          MachineMemOperand::MOStore,  VT.getStoreSize(),
3382                          Alignment, AAInfo);
3383   if (!UniformBase) {
3384     Base = DAG.getTargetConstant(0, sdl, TLI.getPointerTy(DAG.getDataLayout()));
3385     Index = getValue(Ptr);
3386   }
3387   SDValue Ops[] = { getRoot(), Src0, Mask, Base, Index };
3388   SDValue Scatter = DAG.getMaskedScatter(DAG.getVTList(MVT::Other), VT, sdl,
3389                                          Ops, MMO);
3390   DAG.setRoot(Scatter);
3391   setValue(&I, Scatter);
3392 }
3393
3394 void SelectionDAGBuilder::visitMaskedLoad(const CallInst &I) {
3395   SDLoc sdl = getCurSDLoc();
3396
3397   // @llvm.masked.load.*(Ptr, alignment, Mask, Src0)
3398   Value  *PtrOperand = I.getArgOperand(0);
3399   SDValue Ptr = getValue(PtrOperand);
3400   SDValue Src0 = getValue(I.getArgOperand(3));
3401   SDValue Mask = getValue(I.getArgOperand(2));
3402
3403   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3404   EVT VT = TLI.getValueType(DAG.getDataLayout(), I.getType());
3405   unsigned Alignment = (cast<ConstantInt>(I.getArgOperand(1)))->getZExtValue();
3406   if (!Alignment)
3407     Alignment = DAG.getEVTAlignment(VT);
3408
3409   AAMDNodes AAInfo;
3410   I.getAAMetadata(AAInfo);
3411   const MDNode *Ranges = I.getMetadata(LLVMContext::MD_range);
3412
3413   SDValue InChain = DAG.getRoot();
3414   if (AA->pointsToConstantMemory(MemoryLocation(
3415           PtrOperand, DAG.getDataLayout().getTypeStoreSize(I.getType()),
3416           AAInfo))) {
3417     // Do not serialize (non-volatile) loads of constant memory with anything.
3418     InChain = DAG.getEntryNode();
3419   }
3420
3421   MachineMemOperand *MMO =
3422     DAG.getMachineFunction().
3423     getMachineMemOperand(MachinePointerInfo(PtrOperand),
3424                           MachineMemOperand::MOLoad,  VT.getStoreSize(),
3425                           Alignment, AAInfo, Ranges);
3426
3427   SDValue Load = DAG.getMaskedLoad(VT, sdl, InChain, Ptr, Mask, Src0, VT, MMO,
3428                                    ISD::NON_EXTLOAD);
3429   SDValue OutChain = Load.getValue(1);
3430   DAG.setRoot(OutChain);
3431   setValue(&I, Load);
3432 }
3433
3434 void SelectionDAGBuilder::visitMaskedGather(const CallInst &I) {
3435   SDLoc sdl = getCurSDLoc();
3436
3437   // @llvm.masked.gather.*(Ptrs, alignment, Mask, Src0)
3438   const Value *Ptr = I.getArgOperand(0);
3439   SDValue Src0 = getValue(I.getArgOperand(3));
3440   SDValue Mask = getValue(I.getArgOperand(2));
3441
3442   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3443   EVT VT = TLI.getValueType(DAG.getDataLayout(), I.getType());
3444   unsigned Alignment = (cast<ConstantInt>(I.getArgOperand(1)))->getZExtValue();
3445   if (!Alignment)
3446     Alignment = DAG.getEVTAlignment(VT);
3447
3448   AAMDNodes AAInfo;
3449   I.getAAMetadata(AAInfo);
3450   const MDNode *Ranges = I.getMetadata(LLVMContext::MD_range);
3451
3452   SDValue Root = DAG.getRoot();
3453   SDValue Base;
3454   SDValue Index;
3455   const Value *BasePtr = Ptr;
3456   bool UniformBase = getUniformBase(BasePtr, Base, Index, this);
3457   bool ConstantMemory = false;
3458   if (UniformBase &&
3459       AA->pointsToConstantMemory(MemoryLocation(
3460           BasePtr, DAG.getDataLayout().getTypeStoreSize(I.getType()),
3461           AAInfo))) {
3462     // Do not serialize (non-volatile) loads of constant memory with anything.
3463     Root = DAG.getEntryNode();
3464     ConstantMemory = true;
3465   }
3466
3467   MachineMemOperand *MMO =
3468     DAG.getMachineFunction().
3469     getMachineMemOperand(MachinePointerInfo(UniformBase ? BasePtr : nullptr),
3470                          MachineMemOperand::MOLoad,  VT.getStoreSize(),
3471                          Alignment, AAInfo, Ranges);
3472
3473   if (!UniformBase) {
3474     Base = DAG.getTargetConstant(0, sdl, TLI.getPointerTy(DAG.getDataLayout()));
3475     Index = getValue(Ptr);
3476   }
3477   SDValue Ops[] = { Root, Src0, Mask, Base, Index };
3478   SDValue Gather = DAG.getMaskedGather(DAG.getVTList(VT, MVT::Other), VT, sdl,
3479                                        Ops, MMO);
3480
3481   SDValue OutChain = Gather.getValue(1);
3482   if (!ConstantMemory)
3483     PendingLoads.push_back(OutChain);
3484   setValue(&I, Gather);
3485 }
3486
3487 void SelectionDAGBuilder::visitAtomicCmpXchg(const AtomicCmpXchgInst &I) {
3488   SDLoc dl = getCurSDLoc();
3489   AtomicOrdering SuccessOrder = I.getSuccessOrdering();
3490   AtomicOrdering FailureOrder = I.getFailureOrdering();
3491   SynchronizationScope Scope = I.getSynchScope();
3492
3493   SDValue InChain = getRoot();
3494
3495   MVT MemVT = getValue(I.getCompareOperand()).getSimpleValueType();
3496   SDVTList VTs = DAG.getVTList(MemVT, MVT::i1, MVT::Other);
3497   SDValue L = DAG.getAtomicCmpSwap(
3498       ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS, dl, MemVT, VTs, InChain,
3499       getValue(I.getPointerOperand()), getValue(I.getCompareOperand()),
3500       getValue(I.getNewValOperand()), MachinePointerInfo(I.getPointerOperand()),
3501       /*Alignment=*/ 0, SuccessOrder, FailureOrder, Scope);
3502
3503   SDValue OutChain = L.getValue(2);
3504
3505   setValue(&I, L);
3506   DAG.setRoot(OutChain);
3507 }
3508
3509 void SelectionDAGBuilder::visitAtomicRMW(const AtomicRMWInst &I) {
3510   SDLoc dl = getCurSDLoc();
3511   ISD::NodeType NT;
3512   switch (I.getOperation()) {
3513   default: llvm_unreachable("Unknown atomicrmw operation");
3514   case AtomicRMWInst::Xchg: NT = ISD::ATOMIC_SWAP; break;
3515   case AtomicRMWInst::Add:  NT = ISD::ATOMIC_LOAD_ADD; break;
3516   case AtomicRMWInst::Sub:  NT = ISD::ATOMIC_LOAD_SUB; break;
3517   case AtomicRMWInst::And:  NT = ISD::ATOMIC_LOAD_AND; break;
3518   case AtomicRMWInst::Nand: NT = ISD::ATOMIC_LOAD_NAND; break;
3519   case AtomicRMWInst::Or:   NT = ISD::ATOMIC_LOAD_OR; break;
3520   case AtomicRMWInst::Xor:  NT = ISD::ATOMIC_LOAD_XOR; break;
3521   case AtomicRMWInst::Max:  NT = ISD::ATOMIC_LOAD_MAX; break;
3522   case AtomicRMWInst::Min:  NT = ISD::ATOMIC_LOAD_MIN; break;
3523   case AtomicRMWInst::UMax: NT = ISD::ATOMIC_LOAD_UMAX; break;
3524   case AtomicRMWInst::UMin: NT = ISD::ATOMIC_LOAD_UMIN; break;
3525   }
3526   AtomicOrdering Order = I.getOrdering();
3527   SynchronizationScope Scope = I.getSynchScope();
3528
3529   SDValue InChain = getRoot();
3530
3531   SDValue L =
3532     DAG.getAtomic(NT, dl,
3533                   getValue(I.getValOperand()).getSimpleValueType(),
3534                   InChain,
3535                   getValue(I.getPointerOperand()),
3536                   getValue(I.getValOperand()),
3537                   I.getPointerOperand(),
3538                   /* Alignment=*/ 0, Order, Scope);
3539
3540   SDValue OutChain = L.getValue(1);
3541
3542   setValue(&I, L);
3543   DAG.setRoot(OutChain);
3544 }
3545
3546 void SelectionDAGBuilder::visitFence(const FenceInst &I) {
3547   SDLoc dl = getCurSDLoc();
3548   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3549   SDValue Ops[3];
3550   Ops[0] = getRoot();
3551   Ops[1] = DAG.getConstant(I.getOrdering(), dl,
3552                            TLI.getPointerTy(DAG.getDataLayout()));
3553   Ops[2] = DAG.getConstant(I.getSynchScope(), dl,
3554                            TLI.getPointerTy(DAG.getDataLayout()));
3555   DAG.setRoot(DAG.getNode(ISD::ATOMIC_FENCE, dl, MVT::Other, Ops));
3556 }
3557
3558 void SelectionDAGBuilder::visitAtomicLoad(const LoadInst &I) {
3559   SDLoc dl = getCurSDLoc();
3560   AtomicOrdering Order = I.getOrdering();
3561   SynchronizationScope Scope = I.getSynchScope();
3562
3563   SDValue InChain = getRoot();
3564
3565   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3566   EVT VT = TLI.getValueType(DAG.getDataLayout(), I.getType());
3567
3568   if (I.getAlignment() < VT.getSizeInBits() / 8)
3569     report_fatal_error("Cannot generate unaligned atomic load");
3570
3571   MachineMemOperand *MMO =
3572       DAG.getMachineFunction().
3573       getMachineMemOperand(MachinePointerInfo(I.getPointerOperand()),
3574                            MachineMemOperand::MOVolatile |
3575                            MachineMemOperand::MOLoad,
3576                            VT.getStoreSize(),
3577                            I.getAlignment() ? I.getAlignment() :
3578                                               DAG.getEVTAlignment(VT));
3579
3580   InChain = TLI.prepareVolatileOrAtomicLoad(InChain, dl, DAG);
3581   SDValue L =
3582       DAG.getAtomic(ISD::ATOMIC_LOAD, dl, VT, VT, InChain,
3583                     getValue(I.getPointerOperand()), MMO,
3584                     Order, Scope);
3585
3586   SDValue OutChain = L.getValue(1);
3587
3588   setValue(&I, L);
3589   DAG.setRoot(OutChain);
3590 }
3591
3592 void SelectionDAGBuilder::visitAtomicStore(const StoreInst &I) {
3593   SDLoc dl = getCurSDLoc();
3594
3595   AtomicOrdering Order = I.getOrdering();
3596   SynchronizationScope Scope = I.getSynchScope();
3597
3598   SDValue InChain = getRoot();
3599
3600   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3601   EVT VT =
3602       TLI.getValueType(DAG.getDataLayout(), I.getValueOperand()->getType());
3603
3604   if (I.getAlignment() < VT.getSizeInBits() / 8)
3605     report_fatal_error("Cannot generate unaligned atomic store");
3606
3607   SDValue OutChain =
3608     DAG.getAtomic(ISD::ATOMIC_STORE, dl, VT,
3609                   InChain,
3610                   getValue(I.getPointerOperand()),
3611                   getValue(I.getValueOperand()),
3612                   I.getPointerOperand(), I.getAlignment(),
3613                   Order, Scope);
3614
3615   DAG.setRoot(OutChain);
3616 }
3617
3618 /// visitTargetIntrinsic - Lower a call of a target intrinsic to an INTRINSIC
3619 /// node.
3620 void SelectionDAGBuilder::visitTargetIntrinsic(const CallInst &I,
3621                                                unsigned Intrinsic) {
3622   bool HasChain = !I.doesNotAccessMemory();
3623   bool OnlyLoad = HasChain && I.onlyReadsMemory();
3624
3625   // Build the operand list.
3626   SmallVector<SDValue, 8> Ops;
3627   if (HasChain) {  // If this intrinsic has side-effects, chainify it.
3628     if (OnlyLoad) {
3629       // We don't need to serialize loads against other loads.
3630       Ops.push_back(DAG.getRoot());
3631     } else {
3632       Ops.push_back(getRoot());
3633     }
3634   }
3635
3636   // Info is set by getTgtMemInstrinsic
3637   TargetLowering::IntrinsicInfo Info;
3638   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
3639   bool IsTgtIntrinsic = TLI.getTgtMemIntrinsic(Info, I, Intrinsic);
3640
3641   // Add the intrinsic ID as an integer operand if it's not a target intrinsic.
3642   if (!IsTgtIntrinsic || Info.opc == ISD::INTRINSIC_VOID ||
3643       Info.opc == ISD::INTRINSIC_W_CHAIN)
3644     Ops.push_back(DAG.getTargetConstant(Intrinsic, getCurSDLoc(),
3645                                         TLI.getPointerTy(DAG.getDataLayout())));
3646
3647   // Add all operands of the call to the operand list.
3648   for (unsigned i = 0, e = I.getNumArgOperands(); i != e; ++i) {
3649     SDValue Op = getValue(I.getArgOperand(i));
3650     Ops.push_back(Op);
3651   }
3652
3653   SmallVector<EVT, 4> ValueVTs;
3654   ComputeValueVTs(TLI, DAG.getDataLayout(), I.getType(), ValueVTs);
3655
3656   if (HasChain)
3657     ValueVTs.push_back(MVT::Other);
3658
3659   SDVTList VTs = DAG.getVTList(ValueVTs);
3660
3661   // Create the node.
3662   SDValue Result;
3663   if (IsTgtIntrinsic) {
3664     // This is target intrinsic that touches memory
3665     Result = DAG.getMemIntrinsicNode(Info.opc, getCurSDLoc(),
3666                                      VTs, Ops, Info.memVT,
3667                                    MachinePointerInfo(Info.ptrVal, Info.offset),
3668                                      Info.align, Info.vol,
3669                                      Info.readMem, Info.writeMem, Info.size);
3670   } else if (!HasChain) {
3671     Result = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, getCurSDLoc(), VTs, Ops);
3672   } else if (!I.getType()->isVoidTy()) {
3673     Result = DAG.getNode(ISD::INTRINSIC_W_CHAIN, getCurSDLoc(), VTs, Ops);
3674   } else {
3675     Result = DAG.getNode(ISD::INTRINSIC_VOID, getCurSDLoc(), VTs, Ops);
3676   }
3677
3678   if (HasChain) {
3679     SDValue Chain = Result.getValue(Result.getNode()->getNumValues()-1);
3680     if (OnlyLoad)
3681       PendingLoads.push_back(Chain);
3682     else
3683       DAG.setRoot(Chain);
3684   }
3685
3686   if (!I.getType()->isVoidTy()) {
3687     if (VectorType *PTy = dyn_cast<VectorType>(I.getType())) {
3688       EVT VT = TLI.getValueType(DAG.getDataLayout(), PTy);
3689       Result = DAG.getNode(ISD::BITCAST, getCurSDLoc(), VT, Result);
3690     }
3691
3692     setValue(&I, Result);
3693   }
3694 }
3695
3696 /// GetSignificand - Get the significand and build it into a floating-point
3697 /// number with exponent of 1:
3698 ///
3699 ///   Op = (Op & 0x007fffff) | 0x3f800000;
3700 ///
3701 /// where Op is the hexadecimal representation of floating point value.
3702 static SDValue
3703 GetSignificand(SelectionDAG &DAG, SDValue Op, SDLoc dl) {
3704   SDValue t1 = DAG.getNode(ISD::AND, dl, MVT::i32, Op,
3705                            DAG.getConstant(0x007fffff, dl, MVT::i32));
3706   SDValue t2 = DAG.getNode(ISD::OR, dl, MVT::i32, t1,
3707                            DAG.getConstant(0x3f800000, dl, MVT::i32));
3708   return DAG.getNode(ISD::BITCAST, dl, MVT::f32, t2);
3709 }
3710
3711 /// GetExponent - Get the exponent:
3712 ///
3713 ///   (float)(int)(((Op & 0x7f800000) >> 23) - 127);
3714 ///
3715 /// where Op is the hexadecimal representation of floating point value.
3716 static SDValue
3717 GetExponent(SelectionDAG &DAG, SDValue Op, const TargetLowering &TLI,
3718             SDLoc dl) {
3719   SDValue t0 = DAG.getNode(ISD::AND, dl, MVT::i32, Op,
3720                            DAG.getConstant(0x7f800000, dl, MVT::i32));
3721   SDValue t1 = DAG.getNode(
3722       ISD::SRL, dl, MVT::i32, t0,
3723       DAG.getConstant(23, dl, TLI.getPointerTy(DAG.getDataLayout())));
3724   SDValue t2 = DAG.getNode(ISD::SUB, dl, MVT::i32, t1,
3725                            DAG.getConstant(127, dl, MVT::i32));
3726   return DAG.getNode(ISD::SINT_TO_FP, dl, MVT::f32, t2);
3727 }
3728
3729 /// getF32Constant - Get 32-bit floating point constant.
3730 static SDValue
3731 getF32Constant(SelectionDAG &DAG, unsigned Flt, SDLoc dl) {
3732   return DAG.getConstantFP(APFloat(APFloat::IEEEsingle, APInt(32, Flt)), dl,
3733                            MVT::f32);
3734 }
3735
3736 static SDValue getLimitedPrecisionExp2(SDValue t0, SDLoc dl,
3737                                        SelectionDAG &DAG) {
3738   // TODO: What fast-math-flags should be set on the floating-point nodes?
3739
3740   //   IntegerPartOfX = ((int32_t)(t0);
3741   SDValue IntegerPartOfX = DAG.getNode(ISD::FP_TO_SINT, dl, MVT::i32, t0);
3742
3743   //   FractionalPartOfX = t0 - (float)IntegerPartOfX;
3744   SDValue t1 = DAG.getNode(ISD::SINT_TO_FP, dl, MVT::f32, IntegerPartOfX);
3745   SDValue X = DAG.getNode(ISD::FSUB, dl, MVT::f32, t0, t1);
3746
3747   //   IntegerPartOfX <<= 23;
3748   IntegerPartOfX = DAG.getNode(
3749       ISD::SHL, dl, MVT::i32, IntegerPartOfX,
3750       DAG.getConstant(23, dl, DAG.getTargetLoweringInfo().getPointerTy(
3751                                   DAG.getDataLayout())));
3752
3753   SDValue TwoToFractionalPartOfX;
3754   if (LimitFloatPrecision <= 6) {
3755     // For floating-point precision of 6:
3756     //
3757     //   TwoToFractionalPartOfX =
3758     //     0.997535578f +
3759     //       (0.735607626f + 0.252464424f * x) * x;
3760     //
3761     // error 0.0144103317, which is 6 bits
3762     SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
3763                              getF32Constant(DAG, 0x3e814304, dl));
3764     SDValue t3 = DAG.getNode(ISD::FADD, dl, MVT::f32, t2,
3765                              getF32Constant(DAG, 0x3f3c50c8, dl));
3766     SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
3767     TwoToFractionalPartOfX = DAG.getNode(ISD::FADD, dl, MVT::f32, t4,
3768                                          getF32Constant(DAG, 0x3f7f5e7e, dl));
3769   } else if (LimitFloatPrecision <= 12) {
3770     // For floating-point precision of 12:
3771     //
3772     //   TwoToFractionalPartOfX =
3773     //     0.999892986f +
3774     //       (0.696457318f +
3775     //         (0.224338339f + 0.792043434e-1f * x) * x) * x;
3776     //
3777     // error 0.000107046256, which is 13 to 14 bits
3778     SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
3779                              getF32Constant(DAG, 0x3da235e3, dl));
3780     SDValue t3 = DAG.getNode(ISD::FADD, dl, MVT::f32, t2,
3781                              getF32Constant(DAG, 0x3e65b8f3, dl));
3782     SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
3783     SDValue t5 = DAG.getNode(ISD::FADD, dl, MVT::f32, t4,
3784                              getF32Constant(DAG, 0x3f324b07, dl));
3785     SDValue t6 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t5, X);
3786     TwoToFractionalPartOfX = DAG.getNode(ISD::FADD, dl, MVT::f32, t6,
3787                                          getF32Constant(DAG, 0x3f7ff8fd, dl));
3788   } else { // LimitFloatPrecision <= 18
3789     // For floating-point precision of 18:
3790     //
3791     //   TwoToFractionalPartOfX =
3792     //     0.999999982f +
3793     //       (0.693148872f +
3794     //         (0.240227044f +
3795     //           (0.554906021e-1f +
3796     //             (0.961591928e-2f +
3797     //               (0.136028312e-2f + 0.157059148e-3f *x)*x)*x)*x)*x)*x;
3798     // error 2.47208000*10^(-7), which is better than 18 bits
3799     SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
3800                              getF32Constant(DAG, 0x3924b03e, dl));
3801     SDValue t3 = DAG.getNode(ISD::FADD, dl, MVT::f32, t2,
3802                              getF32Constant(DAG, 0x3ab24b87, dl));
3803     SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
3804     SDValue t5 = DAG.getNode(ISD::FADD, dl, MVT::f32, t4,
3805                              getF32Constant(DAG, 0x3c1d8c17, dl));
3806     SDValue t6 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t5, X);
3807     SDValue t7 = DAG.getNode(ISD::FADD, dl, MVT::f32, t6,
3808                              getF32Constant(DAG, 0x3d634a1d, dl));
3809     SDValue t8 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t7, X);
3810     SDValue t9 = DAG.getNode(ISD::FADD, dl, MVT::f32, t8,
3811                              getF32Constant(DAG, 0x3e75fe14, dl));
3812     SDValue t10 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t9, X);
3813     SDValue t11 = DAG.getNode(ISD::FADD, dl, MVT::f32, t10,
3814                               getF32Constant(DAG, 0x3f317234, dl));
3815     SDValue t12 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t11, X);
3816     TwoToFractionalPartOfX = DAG.getNode(ISD::FADD, dl, MVT::f32, t12,
3817                                          getF32Constant(DAG, 0x3f800000, dl));
3818   }
3819
3820   // Add the exponent into the result in integer domain.
3821   SDValue t13 = DAG.getNode(ISD::BITCAST, dl, MVT::i32, TwoToFractionalPartOfX);
3822   return DAG.getNode(ISD::BITCAST, dl, MVT::f32,
3823                      DAG.getNode(ISD::ADD, dl, MVT::i32, t13, IntegerPartOfX));
3824 }
3825
3826 /// expandExp - Lower an exp intrinsic. Handles the special sequences for
3827 /// limited-precision mode.
3828 static SDValue expandExp(SDLoc dl, SDValue Op, SelectionDAG &DAG,
3829                          const TargetLowering &TLI) {
3830   if (Op.getValueType() == MVT::f32 &&
3831       LimitFloatPrecision > 0 && LimitFloatPrecision <= 18) {
3832
3833     // Put the exponent in the right bit position for later addition to the
3834     // final result:
3835     //
3836     //   #define LOG2OFe 1.4426950f
3837     //   t0 = Op * LOG2OFe
3838
3839     // TODO: What fast-math-flags should be set here?
3840     SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, Op,
3841                              getF32Constant(DAG, 0x3fb8aa3b, dl));
3842     return getLimitedPrecisionExp2(t0, dl, DAG);
3843   }
3844
3845   // No special expansion.
3846   return DAG.getNode(ISD::FEXP, dl, Op.getValueType(), Op);
3847 }
3848
3849 /// expandLog - Lower a log intrinsic. Handles the special sequences for
3850 /// limited-precision mode.
3851 static SDValue expandLog(SDLoc dl, SDValue Op, SelectionDAG &DAG,
3852                          const TargetLowering &TLI) {
3853  
3854   // TODO: What fast-math-flags should be set on the floating-point nodes?
3855
3856   if (Op.getValueType() == MVT::f32 &&
3857       LimitFloatPrecision > 0 && LimitFloatPrecision <= 18) {
3858     SDValue Op1 = DAG.getNode(ISD::BITCAST, dl, MVT::i32, Op);
3859
3860     // Scale the exponent by log(2) [0.69314718f].
3861     SDValue Exp = GetExponent(DAG, Op1, TLI, dl);
3862     SDValue LogOfExponent = DAG.getNode(ISD::FMUL, dl, MVT::f32, Exp,
3863                                         getF32Constant(DAG, 0x3f317218, dl));
3864
3865     // Get the significand and build it into a floating-point number with
3866     // exponent of 1.
3867     SDValue X = GetSignificand(DAG, Op1, dl);
3868
3869     SDValue LogOfMantissa;
3870     if (LimitFloatPrecision <= 6) {
3871       // For floating-point precision of 6:
3872       //
3873       //   LogofMantissa =
3874       //     -1.1609546f +
3875       //       (1.4034025f - 0.23903021f * x) * x;
3876       //
3877       // error 0.0034276066, which is better than 8 bits
3878       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
3879                                getF32Constant(DAG, 0xbe74c456, dl));
3880       SDValue t1 = DAG.getNode(ISD::FADD, dl, MVT::f32, t0,
3881                                getF32Constant(DAG, 0x3fb3a2b1, dl));
3882       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
3883       LogOfMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t2,
3884                                   getF32Constant(DAG, 0x3f949a29, dl));
3885     } else if (LimitFloatPrecision <= 12) {
3886       // For floating-point precision of 12:
3887       //
3888       //   LogOfMantissa =
3889       //     -1.7417939f +
3890       //       (2.8212026f +
3891       //         (-1.4699568f +
3892       //           (0.44717955f - 0.56570851e-1f * x) * x) * x) * x;
3893       //
3894       // error 0.000061011436, which is 14 bits
3895       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
3896                                getF32Constant(DAG, 0xbd67b6d6, dl));
3897       SDValue t1 = DAG.getNode(ISD::FADD, dl, MVT::f32, t0,
3898                                getF32Constant(DAG, 0x3ee4f4b8, dl));
3899       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
3900       SDValue t3 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t2,
3901                                getF32Constant(DAG, 0x3fbc278b, dl));
3902       SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
3903       SDValue t5 = DAG.getNode(ISD::FADD, dl, MVT::f32, t4,
3904                                getF32Constant(DAG, 0x40348e95, dl));
3905       SDValue t6 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t5, X);
3906       LogOfMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t6,
3907                                   getF32Constant(DAG, 0x3fdef31a, dl));
3908     } else { // LimitFloatPrecision <= 18
3909       // For floating-point precision of 18:
3910       //
3911       //   LogOfMantissa =
3912       //     -2.1072184f +
3913       //       (4.2372794f +
3914       //         (-3.7029485f +
3915       //           (2.2781945f +
3916       //             (-0.87823314f +
3917       //               (0.19073739f - 0.17809712e-1f * x) * x) * x) * x) * x)*x;
3918       //
3919       // error 0.0000023660568, which is better than 18 bits
3920       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
3921                                getF32Constant(DAG, 0xbc91e5ac, dl));
3922       SDValue t1 = DAG.getNode(ISD::FADD, dl, MVT::f32, t0,
3923                                getF32Constant(DAG, 0x3e4350aa, dl));
3924       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
3925       SDValue t3 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t2,
3926                                getF32Constant(DAG, 0x3f60d3e3, dl));
3927       SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
3928       SDValue t5 = DAG.getNode(ISD::FADD, dl, MVT::f32, t4,
3929                                getF32Constant(DAG, 0x4011cdf0, dl));
3930       SDValue t6 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t5, X);
3931       SDValue t7 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t6,
3932                                getF32Constant(DAG, 0x406cfd1c, dl));
3933       SDValue t8 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t7, X);
3934       SDValue t9 = DAG.getNode(ISD::FADD, dl, MVT::f32, t8,
3935                                getF32Constant(DAG, 0x408797cb, dl));
3936       SDValue t10 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t9, X);
3937       LogOfMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t10,
3938                                   getF32Constant(DAG, 0x4006dcab, dl));
3939     }
3940
3941     return DAG.getNode(ISD::FADD, dl, MVT::f32, LogOfExponent, LogOfMantissa);
3942   }
3943
3944   // No special expansion.
3945   return DAG.getNode(ISD::FLOG, dl, Op.getValueType(), Op);
3946 }
3947
3948 /// expandLog2 - Lower a log2 intrinsic. Handles the special sequences for
3949 /// limited-precision mode.
3950 static SDValue expandLog2(SDLoc dl, SDValue Op, SelectionDAG &DAG,
3951                           const TargetLowering &TLI) {
3952   
3953   // TODO: What fast-math-flags should be set on the floating-point nodes?
3954
3955   if (Op.getValueType() == MVT::f32 &&
3956       LimitFloatPrecision > 0 && LimitFloatPrecision <= 18) {
3957     SDValue Op1 = DAG.getNode(ISD::BITCAST, dl, MVT::i32, Op);
3958
3959     // Get the exponent.
3960     SDValue LogOfExponent = GetExponent(DAG, Op1, TLI, dl);
3961
3962     // Get the significand and build it into a floating-point number with
3963     // exponent of 1.
3964     SDValue X = GetSignificand(DAG, Op1, dl);
3965
3966     // Different possible minimax approximations of significand in
3967     // floating-point for various degrees of accuracy over [1,2].
3968     SDValue Log2ofMantissa;
3969     if (LimitFloatPrecision <= 6) {
3970       // For floating-point precision of 6:
3971       //
3972       //   Log2ofMantissa = -1.6749035f + (2.0246817f - .34484768f * x) * x;
3973       //
3974       // error 0.0049451742, which is more than 7 bits
3975       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
3976                                getF32Constant(DAG, 0xbeb08fe0, dl));
3977       SDValue t1 = DAG.getNode(ISD::FADD, dl, MVT::f32, t0,
3978                                getF32Constant(DAG, 0x40019463, dl));
3979       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
3980       Log2ofMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t2,
3981                                    getF32Constant(DAG, 0x3fd6633d, dl));
3982     } else if (LimitFloatPrecision <= 12) {
3983       // For floating-point precision of 12:
3984       //
3985       //   Log2ofMantissa =
3986       //     -2.51285454f +
3987       //       (4.07009056f +
3988       //         (-2.12067489f +
3989       //           (.645142248f - 0.816157886e-1f * x) * x) * x) * x;
3990       //
3991       // error 0.0000876136000, which is better than 13 bits
3992       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
3993                                getF32Constant(DAG, 0xbda7262e, dl));
3994       SDValue t1 = DAG.getNode(ISD::FADD, dl, MVT::f32, t0,
3995                                getF32Constant(DAG, 0x3f25280b, dl));
3996       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
3997       SDValue t3 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t2,
3998                                getF32Constant(DAG, 0x4007b923, dl));
3999       SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
4000       SDValue t5 = DAG.getNode(ISD::FADD, dl, MVT::f32, t4,
4001                                getF32Constant(DAG, 0x40823e2f, dl));
4002       SDValue t6 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t5, X);
4003       Log2ofMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t6,
4004                                    getF32Constant(DAG, 0x4020d29c, dl));
4005     } else { // LimitFloatPrecision <= 18
4006       // For floating-point precision of 18:
4007       //
4008       //   Log2ofMantissa =
4009       //     -3.0400495f +
4010       //       (6.1129976f +
4011       //         (-5.3420409f +
4012       //           (3.2865683f +
4013       //             (-1.2669343f +
4014       //               (0.27515199f -
4015       //                 0.25691327e-1f * x) * x) * x) * x) * x) * x;
4016       //
4017       // error 0.0000018516, which is better than 18 bits
4018       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
4019                                getF32Constant(DAG, 0xbcd2769e, dl));
4020       SDValue t1 = DAG.getNode(ISD::FADD, dl, MVT::f32, t0,
4021                                getF32Constant(DAG, 0x3e8ce0b9, dl));
4022       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
4023       SDValue t3 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t2,
4024                                getF32Constant(DAG, 0x3fa22ae7, dl));
4025       SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
4026       SDValue t5 = DAG.getNode(ISD::FADD, dl, MVT::f32, t4,
4027                                getF32Constant(DAG, 0x40525723, dl));
4028       SDValue t6 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t5, X);
4029       SDValue t7 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t6,
4030                                getF32Constant(DAG, 0x40aaf200, dl));
4031       SDValue t8 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t7, X);
4032       SDValue t9 = DAG.getNode(ISD::FADD, dl, MVT::f32, t8,
4033                                getF32Constant(DAG, 0x40c39dad, dl));
4034       SDValue t10 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t9, X);
4035       Log2ofMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t10,
4036                                    getF32Constant(DAG, 0x4042902c, dl));
4037     }
4038
4039     return DAG.getNode(ISD::FADD, dl, MVT::f32, LogOfExponent, Log2ofMantissa);
4040   }
4041
4042   // No special expansion.
4043   return DAG.getNode(ISD::FLOG2, dl, Op.getValueType(), Op);
4044 }
4045
4046 /// expandLog10 - Lower a log10 intrinsic. Handles the special sequences for
4047 /// limited-precision mode.
4048 static SDValue expandLog10(SDLoc dl, SDValue Op, SelectionDAG &DAG,
4049                            const TargetLowering &TLI) {
4050
4051   // TODO: What fast-math-flags should be set on the floating-point nodes?
4052
4053   if (Op.getValueType() == MVT::f32 &&
4054       LimitFloatPrecision > 0 && LimitFloatPrecision <= 18) {
4055     SDValue Op1 = DAG.getNode(ISD::BITCAST, dl, MVT::i32, Op);
4056
4057     // Scale the exponent by log10(2) [0.30102999f].
4058     SDValue Exp = GetExponent(DAG, Op1, TLI, dl);
4059     SDValue LogOfExponent = DAG.getNode(ISD::FMUL, dl, MVT::f32, Exp,
4060                                         getF32Constant(DAG, 0x3e9a209a, dl));
4061
4062     // Get the significand and build it into a floating-point number with
4063     // exponent of 1.
4064     SDValue X = GetSignificand(DAG, Op1, dl);
4065
4066     SDValue Log10ofMantissa;
4067     if (LimitFloatPrecision <= 6) {
4068       // For floating-point precision of 6:
4069       //
4070       //   Log10ofMantissa =
4071       //     -0.50419619f +
4072       //       (0.60948995f - 0.10380950f * x) * x;
4073       //
4074       // error 0.0014886165, which is 6 bits
4075       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
4076                                getF32Constant(DAG, 0xbdd49a13, dl));
4077       SDValue t1 = DAG.getNode(ISD::FADD, dl, MVT::f32, t0,
4078                                getF32Constant(DAG, 0x3f1c0789, dl));
4079       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
4080       Log10ofMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t2,
4081                                     getF32Constant(DAG, 0x3f011300, dl));
4082     } else if (LimitFloatPrecision <= 12) {
4083       // For floating-point precision of 12:
4084       //
4085       //   Log10ofMantissa =
4086       //     -0.64831180f +
4087       //       (0.91751397f +
4088       //         (-0.31664806f + 0.47637168e-1f * x) * x) * x;
4089       //
4090       // error 0.00019228036, which is better than 12 bits
4091       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
4092                                getF32Constant(DAG, 0x3d431f31, dl));
4093       SDValue t1 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t0,
4094                                getF32Constant(DAG, 0x3ea21fb2, dl));
4095       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
4096       SDValue t3 = DAG.getNode(ISD::FADD, dl, MVT::f32, t2,
4097                                getF32Constant(DAG, 0x3f6ae232, dl));
4098       SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
4099       Log10ofMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t4,
4100                                     getF32Constant(DAG, 0x3f25f7c3, dl));
4101     } else { // LimitFloatPrecision <= 18
4102       // For floating-point precision of 18:
4103       //
4104       //   Log10ofMantissa =
4105       //     -0.84299375f +
4106       //       (1.5327582f +
4107       //         (-1.0688956f +
4108       //           (0.49102474f +
4109       //             (-0.12539807f + 0.13508273e-1f * x) * x) * x) * x) * x;
4110       //
4111       // error 0.0000037995730, which is better than 18 bits
4112       SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, X,
4113                                getF32Constant(DAG, 0x3c5d51ce, dl));
4114       SDValue t1 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t0,
4115                                getF32Constant(DAG, 0x3e00685a, dl));
4116       SDValue t2 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t1, X);
4117       SDValue t3 = DAG.getNode(ISD::FADD, dl, MVT::f32, t2,
4118                                getF32Constant(DAG, 0x3efb6798, dl));
4119       SDValue t4 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t3, X);
4120       SDValue t5 = DAG.getNode(ISD::FSUB, dl, MVT::f32, t4,
4121                                getF32Constant(DAG, 0x3f88d192, dl));
4122       SDValue t6 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t5, X);
4123       SDValue t7 = DAG.getNode(ISD::FADD, dl, MVT::f32, t6,
4124                                getF32Constant(DAG, 0x3fc4316c, dl));
4125       SDValue t8 = DAG.getNode(ISD::FMUL, dl, MVT::f32, t7, X);
4126       Log10ofMantissa = DAG.getNode(ISD::FSUB, dl, MVT::f32, t8,
4127                                     getF32Constant(DAG, 0x3f57ce70, dl));
4128     }
4129
4130     return DAG.getNode(ISD::FADD, dl, MVT::f32, LogOfExponent, Log10ofMantissa);
4131   }
4132
4133   // No special expansion.
4134   return DAG.getNode(ISD::FLOG10, dl, Op.getValueType(), Op);
4135 }
4136
4137 /// expandExp2 - Lower an exp2 intrinsic. Handles the special sequences for
4138 /// limited-precision mode.
4139 static SDValue expandExp2(SDLoc dl, SDValue Op, SelectionDAG &DAG,
4140                           const TargetLowering &TLI) {
4141   if (Op.getValueType() == MVT::f32 &&
4142       LimitFloatPrecision > 0 && LimitFloatPrecision <= 18)
4143     return getLimitedPrecisionExp2(Op, dl, DAG);
4144
4145   // No special expansion.
4146   return DAG.getNode(ISD::FEXP2, dl, Op.getValueType(), Op);
4147 }
4148
4149 /// visitPow - Lower a pow intrinsic. Handles the special sequences for
4150 /// limited-precision mode with x == 10.0f.
4151 static SDValue expandPow(SDLoc dl, SDValue LHS, SDValue RHS,
4152                          SelectionDAG &DAG, const TargetLowering &TLI) {
4153   bool IsExp10 = false;
4154   if (LHS.getValueType() == MVT::f32 && RHS.getValueType() == MVT::f32 &&
4155       LimitFloatPrecision > 0 && LimitFloatPrecision <= 18) {
4156     if (ConstantFPSDNode *LHSC = dyn_cast<ConstantFPSDNode>(LHS)) {
4157       APFloat Ten(10.0f);
4158       IsExp10 = LHSC->isExactlyValue(Ten);
4159     }
4160   }
4161
4162   // TODO: What fast-math-flags should be set on the FMUL node?
4163   if (IsExp10) {
4164     // Put the exponent in the right bit position for later addition to the
4165     // final result:
4166     //
4167     //   #define LOG2OF10 3.3219281f
4168     //   t0 = Op * LOG2OF10;
4169     SDValue t0 = DAG.getNode(ISD::FMUL, dl, MVT::f32, RHS,
4170                              getF32Constant(DAG, 0x40549a78, dl));
4171     return getLimitedPrecisionExp2(t0, dl, DAG);
4172   }
4173
4174   // No special expansion.
4175   return DAG.getNode(ISD::FPOW, dl, LHS.getValueType(), LHS, RHS);
4176 }
4177
4178
4179 /// ExpandPowI - Expand a llvm.powi intrinsic.
4180 static SDValue ExpandPowI(SDLoc DL, SDValue LHS, SDValue RHS,
4181                           SelectionDAG &DAG) {
4182   // If RHS is a constant, we can expand this out to a multiplication tree,
4183   // otherwise we end up lowering to a call to __powidf2 (for example).  When
4184   // optimizing for size, we only want to do this if the expansion would produce
4185   // a small number of multiplies, otherwise we do the full expansion.
4186   if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(RHS)) {
4187     // Get the exponent as a positive value.
4188     unsigned Val = RHSC->getSExtValue();
4189     if ((int)Val < 0) Val = -Val;
4190
4191     // powi(x, 0) -> 1.0
4192     if (Val == 0)
4193       return DAG.getConstantFP(1.0, DL, LHS.getValueType());
4194
4195     const Function *F = DAG.getMachineFunction().getFunction();
4196     if (!F->optForSize() ||
4197         // If optimizing for size, don't insert too many multiplies.
4198         // This inserts up to 5 multiplies.
4199         countPopulation(Val) + Log2_32(Val) < 7) {
4200       // We use the simple binary decomposition method to generate the multiply
4201       // sequence.  There are more optimal ways to do this (for example,
4202       // powi(x,15) generates one more multiply than it should), but this has
4203       // the benefit of being both really simple and much better than a libcall.
4204       SDValue Res;  // Logically starts equal to 1.0
4205       SDValue CurSquare = LHS;
4206       // TODO: Intrinsics should have fast-math-flags that propagate to these
4207       // nodes.
4208       while (Val) {
4209         if (Val & 1) {
4210           if (Res.getNode())
4211             Res = DAG.getNode(ISD::FMUL, DL,Res.getValueType(), Res, CurSquare);
4212           else
4213             Res = CurSquare;  // 1.0*CurSquare.
4214         }
4215
4216         CurSquare = DAG.getNode(ISD::FMUL, DL, CurSquare.getValueType(),
4217                                 CurSquare, CurSquare);
4218         Val >>= 1;
4219       }
4220
4221       // If the original was negative, invert the result, producing 1/(x*x*x).
4222       if (RHSC->getSExtValue() < 0)
4223         Res = DAG.getNode(ISD::FDIV, DL, LHS.getValueType(),
4224                           DAG.getConstantFP(1.0, DL, LHS.getValueType()), Res);
4225       return Res;
4226     }
4227   }
4228
4229   // Otherwise, expand to a libcall.
4230   return DAG.getNode(ISD::FPOWI, DL, LHS.getValueType(), LHS, RHS);
4231 }
4232
4233 // getUnderlyingArgReg - Find underlying register used for a truncated or
4234 // bitcasted argument.
4235 static unsigned getUnderlyingArgReg(const SDValue &N) {
4236   switch (N.getOpcode()) {
4237   case ISD::CopyFromReg:
4238     return cast<RegisterSDNode>(N.getOperand(1))->getReg();
4239   case ISD::BITCAST:
4240   case ISD::AssertZext:
4241   case ISD::AssertSext:
4242   case ISD::TRUNCATE:
4243     return getUnderlyingArgReg(N.getOperand(0));
4244   default:
4245     return 0;
4246   }
4247 }
4248
4249 /// EmitFuncArgumentDbgValue - If the DbgValueInst is a dbg_value of a function
4250 /// argument, create the corresponding DBG_VALUE machine instruction for it now.
4251 /// At the end of instruction selection, they will be inserted to the entry BB.
4252 bool SelectionDAGBuilder::EmitFuncArgumentDbgValue(
4253     const Value *V, DILocalVariable *Variable, DIExpression *Expr,
4254     DILocation *DL, int64_t Offset, bool IsIndirect, const SDValue &N) {
4255   const Argument *Arg = dyn_cast<Argument>(V);
4256   if (!Arg)
4257     return false;
4258
4259   MachineFunction &MF = DAG.getMachineFunction();
4260   const TargetInstrInfo *TII = DAG.getSubtarget().getInstrInfo();
4261
4262   // Ignore inlined function arguments here.
4263   //
4264   // FIXME: Should we be checking DL->inlinedAt() to determine this?
4265   if (!Variable->getScope()->getSubprogram()->describes(MF.getFunction()))
4266     return false;
4267
4268   Optional<MachineOperand> Op;
4269   // Some arguments' frame index is recorded during argument lowering.
4270   if (int FI = FuncInfo.getArgumentFrameIndex(Arg))
4271     Op = MachineOperand::CreateFI(FI);
4272
4273   if (!Op && N.getNode()) {
4274     unsigned Reg = getUnderlyingArgReg(N);
4275     if (Reg && TargetRegisterInfo::isVirtualRegister(Reg)) {
4276       MachineRegisterInfo &RegInfo = MF.getRegInfo();
4277       unsigned PR = RegInfo.getLiveInPhysReg(Reg);
4278       if (PR)
4279         Reg = PR;
4280     }
4281     if (Reg)
4282       Op = MachineOperand::CreateReg(Reg, false);
4283   }
4284
4285   if (!Op) {
4286     // Check if ValueMap has reg number.
4287     DenseMap<const Value *, unsigned>::iterator VMI = FuncInfo.ValueMap.find(V);
4288     if (VMI != FuncInfo.ValueMap.end())
4289       Op = MachineOperand::CreateReg(VMI->second, false);
4290   }
4291
4292   if (!Op && N.getNode())
4293     // Check if frame index is available.
4294     if (LoadSDNode *LNode = dyn_cast<LoadSDNode>(N.getNode()))
4295       if (FrameIndexSDNode *FINode =
4296           dyn_cast<FrameIndexSDNode>(LNode->getBasePtr().getNode()))
4297         Op = MachineOperand::CreateFI(FINode->getIndex());
4298
4299   if (!Op)
4300     return false;
4301
4302   assert(Variable->isValidLocationForIntrinsic(DL) &&
4303          "Expected inlined-at fields to agree");
4304   if (Op->isReg())
4305     FuncInfo.ArgDbgValues.push_back(
4306         BuildMI(MF, DL, TII->get(TargetOpcode::DBG_VALUE), IsIndirect,
4307                 Op->getReg(), Offset, Variable, Expr));
4308   else
4309     FuncInfo.ArgDbgValues.push_back(
4310         BuildMI(MF, DL, TII->get(TargetOpcode::DBG_VALUE))
4311             .addOperand(*Op)
4312             .addImm(Offset)
4313             .addMetadata(Variable)
4314             .addMetadata(Expr));
4315
4316   return true;
4317 }
4318
4319 // VisualStudio defines setjmp as _setjmp
4320 #if defined(_MSC_VER) && defined(setjmp) && \
4321                          !defined(setjmp_undefined_for_msvc)
4322 #  pragma push_macro("setjmp")
4323 #  undef setjmp
4324 #  define setjmp_undefined_for_msvc
4325 #endif
4326
4327 /// visitIntrinsicCall - Lower the call to the specified intrinsic function.  If
4328 /// we want to emit this as a call to a named external function, return the name
4329 /// otherwise lower it and return null.
4330 const char *
4331 SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
4332   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
4333   SDLoc sdl = getCurSDLoc();
4334   DebugLoc dl = getCurDebugLoc();
4335   SDValue Res;
4336
4337   switch (Intrinsic) {
4338   default:
4339     // By default, turn this into a target intrinsic node.
4340     visitTargetIntrinsic(I, Intrinsic);
4341     return nullptr;
4342   case Intrinsic::vastart:  visitVAStart(I); return nullptr;
4343   case Intrinsic::vaend:    visitVAEnd(I); return nullptr;
4344   case Intrinsic::vacopy:   visitVACopy(I); return nullptr;
4345   case Intrinsic::returnaddress:
4346     setValue(&I, DAG.getNode(ISD::RETURNADDR, sdl,
4347                              TLI.getPointerTy(DAG.getDataLayout()),
4348                              getValue(I.getArgOperand(0))));
4349     return nullptr;
4350   case Intrinsic::frameaddress:
4351     setValue(&I, DAG.getNode(ISD::FRAMEADDR, sdl,
4352                              TLI.getPointerTy(DAG.getDataLayout()),
4353                              getValue(I.getArgOperand(0))));
4354     return nullptr;
4355   case Intrinsic::read_register: {
4356     Value *Reg = I.getArgOperand(0);
4357     SDValue Chain = getRoot();
4358     SDValue RegName =
4359         DAG.getMDNode(cast<MDNode>(cast<MetadataAsValue>(Reg)->getMetadata()));
4360     EVT VT = TLI.getValueType(DAG.getDataLayout(), I.getType());
4361     Res = DAG.getNode(ISD::READ_REGISTER, sdl,
4362       DAG.getVTList(VT, MVT::Other), Chain, RegName);
4363     setValue(&I, Res);
4364     DAG.setRoot(Res.getValue(1));
4365     return nullptr;
4366   }
4367   case Intrinsic::write_register: {
4368     Value *Reg = I.getArgOperand(0);
4369     Value *RegValue = I.getArgOperand(1);
4370     SDValue Chain = getRoot();
4371     SDValue RegName =
4372         DAG.getMDNode(cast<MDNode>(cast<MetadataAsValue>(Reg)->getMetadata()));
4373     DAG.setRoot(DAG.getNode(ISD::WRITE_REGISTER, sdl, MVT::Other, Chain,
4374                             RegName, getValue(RegValue)));
4375     return nullptr;
4376   }
4377   case Intrinsic::setjmp:
4378     return &"_setjmp"[!TLI.usesUnderscoreSetJmp()];
4379   case Intrinsic::longjmp:
4380     return &"_longjmp"[!TLI.usesUnderscoreLongJmp()];
4381   case Intrinsic::memcpy: {
4382     SDValue Op1 = getValue(I.getArgOperand(0));
4383     SDValue Op2 = getValue(I.getArgOperand(1));
4384     SDValue Op3 = getValue(I.getArgOperand(2));
4385     unsigned Align = cast<ConstantInt>(I.getArgOperand(3))->getZExtValue();
4386     if (!Align)
4387       Align = 1; // @llvm.memcpy defines 0 and 1 to both mean no alignment.
4388     bool isVol = cast<ConstantInt>(I.getArgOperand(4))->getZExtValue();
4389     bool isTC = I.isTailCall() && isInTailCallPosition(&I, DAG.getTarget());
4390     SDValue MC = DAG.getMemcpy(getRoot(), sdl, Op1, Op2, Op3, Align, isVol,
4391                                false, isTC,
4392                                MachinePointerInfo(I.getArgOperand(0)),
4393                                MachinePointerInfo(I.getArgOperand(1)));
4394     updateDAGForMaybeTailCall(MC);
4395     return nullptr;
4396   }
4397   case Intrinsic::memset: {
4398     SDValue Op1 = getValue(I.getArgOperand(0));
4399     SDValue Op2 = getValue(I.getArgOperand(1));
4400     SDValue Op3 = getValue(I.getArgOperand(2));
4401     unsigned Align = cast<ConstantInt>(I.getArgOperand(3))->getZExtValue();
4402     if (!Align)
4403       Align = 1; // @llvm.memset defines 0 and 1 to both mean no alignment.
4404     bool isVol = cast<ConstantInt>(I.getArgOperand(4))->getZExtValue();
4405     bool isTC = I.isTailCall() && isInTailCallPosition(&I, DAG.getTarget());
4406     SDValue MS = DAG.getMemset(getRoot(), sdl, Op1, Op2, Op3, Align, isVol,
4407                                isTC, MachinePointerInfo(I.getArgOperand(0)));
4408     updateDAGForMaybeTailCall(MS);
4409     return nullptr;
4410   }
4411   case Intrinsic::memmove: {
4412     SDValue Op1 = getValue(I.getArgOperand(0));
4413     SDValue Op2 = getValue(I.getArgOperand(1));
4414     SDValue Op3 = getValue(I.getArgOperand(2));
4415     unsigned Align = cast<ConstantInt>(I.getArgOperand(3))->getZExtValue();
4416     if (!Align)
4417       Align = 1; // @llvm.memmove defines 0 and 1 to both mean no alignment.
4418     bool isVol = cast<ConstantInt>(I.getArgOperand(4))->getZExtValue();
4419     bool isTC = I.isTailCall() && isInTailCallPosition(&I, DAG.getTarget());
4420     SDValue MM = DAG.getMemmove(getRoot(), sdl, Op1, Op2, Op3, Align, isVol,
4421                                 isTC, MachinePointerInfo(I.getArgOperand(0)),
4422                                 MachinePointerInfo(I.getArgOperand(1)));
4423     updateDAGForMaybeTailCall(MM);
4424     return nullptr;
4425   }
4426   case Intrinsic::dbg_declare: {
4427     const DbgDeclareInst &DI = cast<DbgDeclareInst>(I);
4428     DILocalVariable *Variable = DI.getVariable();
4429     DIExpression *Expression = DI.getExpression();
4430     const Value *Address = DI.getAddress();
4431     assert(Variable && "Missing variable");
4432     if (!Address) {
4433       DEBUG(dbgs() << "Dropping debug info for " << DI << "\n");
4434       return nullptr;
4435     }
4436
4437     // Check if address has undef value.
4438     if (isa<UndefValue>(Address) ||
4439         (Address->use_empty() && !isa<Argument>(Address))) {
4440       DEBUG(dbgs() << "Dropping debug info for " << DI << "\n");
4441       return nullptr;
4442     }
4443
4444     SDValue &N = NodeMap[Address];
4445     if (!N.getNode() && isa<Argument>(Address))
4446       // Check unused arguments map.
4447       N = UnusedArgNodeMap[Address];
4448     SDDbgValue *SDV;
4449     if (N.getNode()) {
4450       if (const BitCastInst *BCI = dyn_cast<BitCastInst>(Address))
4451         Address = BCI->getOperand(0);
4452       // Parameters are handled specially.
4453       bool isParameter = Variable->isParameter() || isa<Argument>(Address);
4454       auto FINode = dyn_cast<FrameIndexSDNode>(N.getNode());
4455       if (isParameter && FINode) {
4456         // Byval parameter. We have a frame index at this point.
4457         SDV = DAG.getFrameIndexDbgValue(Variable, Expression,
4458                                         FINode->getIndex(), 0, dl, SDNodeOrder);
4459       } else if (isa<Argument>(Address)) {
4460         // Address is an argument, so try to emit its dbg value using
4461         // virtual register info from the FuncInfo.ValueMap.
4462         EmitFuncArgumentDbgValue(Address, Variable, Expression, dl, 0, false,
4463                                  N);
4464         return nullptr;
4465       } else {
4466         SDV = DAG.getDbgValue(Variable, Expression, N.getNode(), N.getResNo(),
4467                               true, 0, dl, SDNodeOrder);
4468       }
4469       DAG.AddDbgValue(SDV, N.getNode(), isParameter);
4470     } else {
4471       // If Address is an argument then try to emit its dbg value using
4472       // virtual register info from the FuncInfo.ValueMap.
4473       if (!EmitFuncArgumentDbgValue(Address, Variable, Expression, dl, 0, false,
4474                                     N)) {
4475         // If variable is pinned by a alloca in dominating bb then
4476         // use StaticAllocaMap.
4477         if (const AllocaInst *AI = dyn_cast<AllocaInst>(Address)) {
4478           if (AI->getParent() != DI.getParent()) {
4479             DenseMap<const AllocaInst*, int>::iterator SI =
4480               FuncInfo.StaticAllocaMap.find(AI);
4481             if (SI != FuncInfo.StaticAllocaMap.end()) {
4482               SDV = DAG.getFrameIndexDbgValue(Variable, Expression, SI->second,
4483                                               0, dl, SDNodeOrder);
4484               DAG.AddDbgValue(SDV, nullptr, false);
4485               return nullptr;
4486             }
4487           }
4488         }
4489         DEBUG(dbgs() << "Dropping debug info for " << DI << "\n");
4490       }
4491     }
4492     return nullptr;
4493   }
4494   case Intrinsic::dbg_value: {
4495     const DbgValueInst &DI = cast<DbgValueInst>(I);
4496     assert(DI.getVariable() && "Missing variable");
4497
4498     DILocalVariable *Variable = DI.getVariable();
4499     DIExpression *Expression = DI.getExpression();
4500     uint64_t Offset = DI.getOffset();
4501     const Value *V = DI.getValue();
4502     if (!V)
4503       return nullptr;
4504
4505     SDDbgValue *SDV;
4506     if (isa<ConstantInt>(V) || isa<ConstantFP>(V) || isa<UndefValue>(V)) {
4507       SDV = DAG.getConstantDbgValue(Variable, Expression, V, Offset, dl,
4508                                     SDNodeOrder);
4509       DAG.AddDbgValue(SDV, nullptr, false);
4510     } else {
4511       // Do not use getValue() in here; we don't want to generate code at
4512       // this point if it hasn't been done yet.
4513       SDValue N = NodeMap[V];
4514       if (!N.getNode() && isa<Argument>(V))
4515         // Check unused arguments map.
4516         N = UnusedArgNodeMap[V];
4517       if (N.getNode()) {
4518         // A dbg.value for an alloca is always indirect.
4519         bool IsIndirect = isa<AllocaInst>(V) || Offset != 0;
4520         if (!EmitFuncArgumentDbgValue(V, Variable, Expression, dl, Offset,
4521                                       IsIndirect, N)) {
4522           SDV = DAG.getDbgValue(Variable, Expression, N.getNode(), N.getResNo(),
4523                                 IsIndirect, Offset, dl, SDNodeOrder);
4524           DAG.AddDbgValue(SDV, N.getNode(), false);
4525         }
4526       } else if (!V->use_empty() ) {
4527         // Do not call getValue(V) yet, as we don't want to generate code.
4528         // Remember it for later.
4529         DanglingDebugInfo DDI(&DI, dl, SDNodeOrder);
4530         DanglingDebugInfoMap[V] = DDI;
4531       } else {
4532         // We may expand this to cover more cases.  One case where we have no
4533         // data available is an unreferenced parameter.
4534         DEBUG(dbgs() << "Dropping debug info for " << DI << "\n");
4535       }
4536     }
4537
4538     // Build a debug info table entry.
4539     if (const BitCastInst *BCI = dyn_cast<BitCastInst>(V))
4540       V = BCI->getOperand(0);
4541     const AllocaInst *AI = dyn_cast<AllocaInst>(V);
4542     // Don't handle byval struct arguments or VLAs, for example.
4543     if (!AI) {
4544       DEBUG(dbgs() << "Dropping debug location info for:\n  " << DI << "\n");
4545       DEBUG(dbgs() << "  Last seen at:\n    " << *V << "\n");
4546       return nullptr;
4547     }
4548     DenseMap<const AllocaInst*, int>::iterator SI =
4549       FuncInfo.StaticAllocaMap.find(AI);
4550     if (SI == FuncInfo.StaticAllocaMap.end())
4551       return nullptr; // VLAs.
4552     return nullptr;
4553   }
4554
4555   case Intrinsic::eh_typeid_for: {
4556     // Find the type id for the given typeinfo.
4557     GlobalValue *GV = ExtractTypeInfo(I.getArgOperand(0));
4558     unsigned TypeID = DAG.getMachineFunction().getMMI().getTypeIDFor(GV);
4559     Res = DAG.getConstant(TypeID, sdl, MVT::i32);
4560     setValue(&I, Res);
4561     return nullptr;
4562   }
4563
4564   case Intrinsic::eh_return_i32:
4565   case Intrinsic::eh_return_i64:
4566     DAG.getMachineFunction().getMMI().setCallsEHReturn(true);
4567     DAG.setRoot(DAG.getNode(ISD::EH_RETURN, sdl,
4568                             MVT::Other,
4569                             getControlRoot(),
4570                             getValue(I.getArgOperand(0)),
4571                             getValue(I.getArgOperand(1))));
4572     return nullptr;
4573   case Intrinsic::eh_unwind_init:
4574     DAG.getMachineFunction().getMMI().setCallsUnwindInit(true);
4575     return nullptr;
4576   case Intrinsic::eh_dwarf_cfa: {
4577     SDValue CfaArg = DAG.getSExtOrTrunc(getValue(I.getArgOperand(0)), sdl,
4578                                         TLI.getPointerTy(DAG.getDataLayout()));
4579     SDValue Offset = DAG.getNode(ISD::ADD, sdl,
4580                                  CfaArg.getValueType(),
4581                                  DAG.getNode(ISD::FRAME_TO_ARGS_OFFSET, sdl,
4582                                              CfaArg.getValueType()),
4583                                  CfaArg);
4584     SDValue FA = DAG.getNode(
4585         ISD::FRAMEADDR, sdl, TLI.getPointerTy(DAG.getDataLayout()),
4586         DAG.getConstant(0, sdl, TLI.getPointerTy(DAG.getDataLayout())));
4587     setValue(&I, DAG.getNode(ISD::ADD, sdl, FA.getValueType(),
4588                              FA, Offset));
4589     return nullptr;
4590   }
4591   case Intrinsic::eh_sjlj_callsite: {
4592     MachineModuleInfo &MMI = DAG.getMachineFunction().getMMI();
4593     ConstantInt *CI = dyn_cast<ConstantInt>(I.getArgOperand(0));
4594     assert(CI && "Non-constant call site value in eh.sjlj.callsite!");
4595     assert(MMI.getCurrentCallSite() == 0 && "Overlapping call sites!");
4596
4597     MMI.setCurrentCallSite(CI->getZExtValue());
4598     return nullptr;
4599   }
4600   case Intrinsic::eh_sjlj_functioncontext: {
4601     // Get and store the index of the function context.
4602     MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
4603     AllocaInst *FnCtx =
4604       cast<AllocaInst>(I.getArgOperand(0)->stripPointerCasts());
4605     int FI = FuncInfo.StaticAllocaMap[FnCtx];
4606     MFI->setFunctionContextIndex(FI);
4607     return nullptr;
4608   }
4609   case Intrinsic::eh_sjlj_setjmp: {
4610     SDValue Ops[2];
4611     Ops[0] = getRoot();
4612     Ops[1] = getValue(I.getArgOperand(0));
4613     SDValue Op = DAG.getNode(ISD::EH_SJLJ_SETJMP, sdl,
4614                              DAG.getVTList(MVT::i32, MVT::Other), Ops);
4615     setValue(&I, Op.getValue(0));
4616     DAG.setRoot(Op.getValue(1));
4617     return nullptr;
4618   }
4619   case Intrinsic::eh_sjlj_longjmp: {
4620     DAG.setRoot(DAG.getNode(ISD::EH_SJLJ_LONGJMP, sdl, MVT::Other,
4621                             getRoot(), getValue(I.getArgOperand(0))));
4622     return nullptr;
4623   }
4624   case Intrinsic::eh_sjlj_setup_dispatch: {
4625     DAG.setRoot(DAG.getNode(ISD::EH_SJLJ_SETUP_DISPATCH, sdl, MVT::Other,
4626                             getRoot()));
4627     return nullptr;
4628   }
4629
4630   case Intrinsic::masked_gather:
4631     visitMaskedGather(I);
4632     return nullptr;
4633   case Intrinsic::masked_load:
4634     visitMaskedLoad(I);
4635     return nullptr;
4636   case Intrinsic::masked_scatter:
4637     visitMaskedScatter(I);
4638     return nullptr;
4639   case Intrinsic::masked_store:
4640     visitMaskedStore(I);
4641     return nullptr;
4642   case Intrinsic::x86_mmx_pslli_w:
4643   case Intrinsic::x86_mmx_pslli_d:
4644   case Intrinsic::x86_mmx_pslli_q:
4645   case Intrinsic::x86_mmx_psrli_w:
4646   case Intrinsic::x86_mmx_psrli_d:
4647   case Intrinsic::x86_mmx_psrli_q:
4648   case Intrinsic::x86_mmx_psrai_w:
4649   case Intrinsic::x86_mmx_psrai_d: {
4650     SDValue ShAmt = getValue(I.getArgOperand(1));
4651     if (isa<ConstantSDNode>(ShAmt)) {
4652       visitTargetIntrinsic(I, Intrinsic);
4653       return nullptr;
4654     }
4655     unsigned NewIntrinsic = 0;
4656     EVT ShAmtVT = MVT::v2i32;
4657     switch (Intrinsic) {
4658     case Intrinsic::x86_mmx_pslli_w:
4659       NewIntrinsic = Intrinsic::x86_mmx_psll_w;
4660       break;
4661     case Intrinsic::x86_mmx_pslli_d:
4662       NewIntrinsic = Intrinsic::x86_mmx_psll_d;
4663       break;
4664     case Intrinsic::x86_mmx_pslli_q:
4665       NewIntrinsic = Intrinsic::x86_mmx_psll_q;
4666       break;
4667     case Intrinsic::x86_mmx_psrli_w:
4668       NewIntrinsic = Intrinsic::x86_mmx_psrl_w;
4669       break;
4670     case Intrinsic::x86_mmx_psrli_d:
4671       NewIntrinsic = Intrinsic::x86_mmx_psrl_d;
4672       break;
4673     case Intrinsic::x86_mmx_psrli_q:
4674       NewIntrinsic = Intrinsic::x86_mmx_psrl_q;
4675       break;
4676     case Intrinsic::x86_mmx_psrai_w:
4677       NewIntrinsic = Intrinsic::x86_mmx_psra_w;
4678       break;
4679     case Intrinsic::x86_mmx_psrai_d:
4680       NewIntrinsic = Intrinsic::x86_mmx_psra_d;
4681       break;
4682     default: llvm_unreachable("Impossible intrinsic");  // Can't reach here.
4683     }
4684
4685     // The vector shift intrinsics with scalars uses 32b shift amounts but
4686     // the sse2/mmx shift instructions reads 64 bits. Set the upper 32 bits
4687     // to be zero.
4688     // We must do this early because v2i32 is not a legal type.
4689     SDValue ShOps[2];
4690     ShOps[0] = ShAmt;
4691     ShOps[1] = DAG.getConstant(0, sdl, MVT::i32);
4692     ShAmt =  DAG.getNode(ISD::BUILD_VECTOR, sdl, ShAmtVT, ShOps);
4693     EVT DestVT = TLI.getValueType(DAG.getDataLayout(), I.getType());
4694     ShAmt = DAG.getNode(ISD::BITCAST, sdl, DestVT, ShAmt);
4695     Res = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, sdl, DestVT,
4696                        DAG.getConstant(NewIntrinsic, sdl, MVT::i32),
4697                        getValue(I.getArgOperand(0)), ShAmt);
4698     setValue(&I, Res);
4699     return nullptr;
4700   }
4701   case Intrinsic::convertff:
4702   case Intrinsic::convertfsi:
4703   case Intrinsic::convertfui:
4704   case Intrinsic::convertsif:
4705   case Intrinsic::convertuif:
4706   case Intrinsic::convertss:
4707   case Intrinsic::convertsu:
4708   case Intrinsic::convertus:
4709   case Intrinsic::convertuu: {
4710     ISD::CvtCode Code = ISD::CVT_INVALID;
4711     switch (Intrinsic) {
4712     default: llvm_unreachable("Impossible intrinsic");  // Can't reach here.
4713     case Intrinsic::convertff:  Code = ISD::CVT_FF; break;
4714     case Intrinsic::convertfsi: Code = ISD::CVT_FS; break;
4715     case Intrinsic::convertfui: Code = ISD::CVT_FU; break;
4716     case Intrinsic::convertsif: Code = ISD::CVT_SF; break;
4717     case Intrinsic::convertuif: Code = ISD::CVT_UF; break;
4718     case Intrinsic::convertss:  Code = ISD::CVT_SS; break;
4719     case Intrinsic::convertsu:  Code = ISD::CVT_SU; break;
4720     case Intrinsic::convertus:  Code = ISD::CVT_US; break;
4721     case Intrinsic::convertuu:  Code = ISD::CVT_UU; break;
4722     }
4723     EVT DestVT = TLI.getValueType(DAG.getDataLayout(), I.getType());
4724     const Value *Op1 = I.getArgOperand(0);
4725     Res = DAG.getConvertRndSat(DestVT, sdl, getValue(Op1),
4726                                DAG.getValueType(DestVT),
4727                                DAG.getValueType(getValue(Op1).getValueType()),
4728                                getValue(I.getArgOperand(1)),
4729                                getValue(I.getArgOperand(2)),
4730                                Code);
4731     setValue(&I, Res);
4732     return nullptr;
4733   }
4734   case Intrinsic::powi:
4735     setValue(&I, ExpandPowI(sdl, getValue(I.getArgOperand(0)),
4736                             getValue(I.getArgOperand(1)), DAG));
4737     return nullptr;
4738   case Intrinsic::log:
4739     setValue(&I, expandLog(sdl, getValue(I.getArgOperand(0)), DAG, TLI));
4740     return nullptr;
4741   case Intrinsic::log2:
4742     setValue(&I, expandLog2(sdl, getValue(I.getArgOperand(0)), DAG, TLI));
4743     return nullptr;
4744   case Intrinsic::log10:
4745     setValue(&I, expandLog10(sdl, getValue(I.getArgOperand(0)), DAG, TLI));
4746     return nullptr;
4747   case Intrinsic::exp:
4748     setValue(&I, expandExp(sdl, getValue(I.getArgOperand(0)), DAG, TLI));
4749     return nullptr;
4750   case Intrinsic::exp2:
4751     setValue(&I, expandExp2(sdl, getValue(I.getArgOperand(0)), DAG, TLI));
4752     return nullptr;
4753   case Intrinsic::pow:
4754     setValue(&I, expandPow(sdl, getValue(I.getArgOperand(0)),
4755                            getValue(I.getArgOperand(1)), DAG, TLI));
4756     return nullptr;
4757   case Intrinsic::sqrt:
4758   case Intrinsic::fabs:
4759   case Intrinsic::sin:
4760   case Intrinsic::cos:
4761   case Intrinsic::floor:
4762   case Intrinsic::ceil:
4763   case Intrinsic::trunc:
4764   case Intrinsic::rint:
4765   case Intrinsic::nearbyint:
4766   case Intrinsic::round: {
4767     unsigned Opcode;
4768     switch (Intrinsic) {
4769     default: llvm_unreachable("Impossible intrinsic");  // Can't reach here.
4770     case Intrinsic::sqrt:      Opcode = ISD::FSQRT;      break;
4771     case Intrinsic::fabs:      Opcode = ISD::FABS;       break;
4772     case Intrinsic::sin:       Opcode = ISD::FSIN;       break;
4773     case Intrinsic::cos:       Opcode = ISD::FCOS;       break;
4774     case Intrinsic::floor:     Opcode = ISD::FFLOOR;     break;
4775     case Intrinsic::ceil:      Opcode = ISD::FCEIL;      break;
4776     case Intrinsic::trunc:     Opcode = ISD::FTRUNC;     break;
4777     case Intrinsic::rint:      Opcode = ISD::FRINT;      break;
4778     case Intrinsic::nearbyint: Opcode = ISD::FNEARBYINT; break;
4779     case Intrinsic::round:     Opcode = ISD::FROUND;     break;
4780     }
4781
4782     setValue(&I, DAG.getNode(Opcode, sdl,
4783                              getValue(I.getArgOperand(0)).getValueType(),
4784                              getValue(I.getArgOperand(0))));
4785     return nullptr;
4786   }
4787   case Intrinsic::minnum:
4788     setValue(&I, DAG.getNode(ISD::FMINNUM, sdl,
4789                              getValue(I.getArgOperand(0)).getValueType(),
4790                              getValue(I.getArgOperand(0)),
4791                              getValue(I.getArgOperand(1))));
4792     return nullptr;
4793   case Intrinsic::maxnum:
4794     setValue(&I, DAG.getNode(ISD::FMAXNUM, sdl,
4795                              getValue(I.getArgOperand(0)).getValueType(),
4796                              getValue(I.getArgOperand(0)),
4797                              getValue(I.getArgOperand(1))));
4798     return nullptr;
4799   case Intrinsic::copysign:
4800     setValue(&I, DAG.getNode(ISD::FCOPYSIGN, sdl,
4801                              getValue(I.getArgOperand(0)).getValueType(),
4802                              getValue(I.getArgOperand(0)),
4803                              getValue(I.getArgOperand(1))));
4804     return nullptr;
4805   case Intrinsic::fma:
4806     setValue(&I, DAG.getNode(ISD::FMA, sdl,
4807                              getValue(I.getArgOperand(0)).getValueType(),
4808                              getValue(I.getArgOperand(0)),
4809                              getValue(I.getArgOperand(1)),
4810                              getValue(I.getArgOperand(2))));
4811     return nullptr;
4812   case Intrinsic::fmuladd: {
4813     EVT VT = TLI.getValueType(DAG.getDataLayout(), I.getType());
4814     if (TM.Options.AllowFPOpFusion != FPOpFusion::Strict &&
4815         TLI.isFMAFasterThanFMulAndFAdd(VT)) {
4816       setValue(&I, DAG.getNode(ISD::FMA, sdl,
4817                                getValue(I.getArgOperand(0)).getValueType(),
4818                                getValue(I.getArgOperand(0)),
4819                                getValue(I.getArgOperand(1)),
4820                                getValue(I.getArgOperand(2))));
4821     } else {
4822       // TODO: Intrinsic calls should have fast-math-flags.
4823       SDValue Mul = DAG.getNode(ISD::FMUL, sdl,
4824                                 getValue(I.getArgOperand(0)).getValueType(),
4825                                 getValue(I.getArgOperand(0)),
4826                                 getValue(I.getArgOperand(1)));
4827       SDValue Add = DAG.getNode(ISD::FADD, sdl,
4828                                 getValue(I.getArgOperand(0)).getValueType(),
4829                                 Mul,
4830                                 getValue(I.getArgOperand(2)));
4831       setValue(&I, Add);
4832     }
4833     return nullptr;
4834   }
4835   case Intrinsic::convert_to_fp16:
4836     setValue(&I, DAG.getNode(ISD::BITCAST, sdl, MVT::i16,
4837                              DAG.getNode(ISD::FP_ROUND, sdl, MVT::f16,
4838                                          getValue(I.getArgOperand(0)),
4839                                          DAG.getTargetConstant(0, sdl,
4840                                                                MVT::i32))));
4841     return nullptr;
4842   case Intrinsic::convert_from_fp16:
4843     setValue(&I, DAG.getNode(ISD::FP_EXTEND, sdl,
4844                              TLI.getValueType(DAG.getDataLayout(), I.getType()),
4845                              DAG.getNode(ISD::BITCAST, sdl, MVT::f16,
4846                                          getValue(I.getArgOperand(0)))));
4847     return nullptr;
4848   case Intrinsic::pcmarker: {
4849     SDValue Tmp = getValue(I.getArgOperand(0));
4850     DAG.setRoot(DAG.getNode(ISD::PCMARKER, sdl, MVT::Other, getRoot(), Tmp));
4851     return nullptr;
4852   }
4853   case Intrinsic::readcyclecounter: {
4854     SDValue Op = getRoot();
4855     Res = DAG.getNode(ISD::READCYCLECOUNTER, sdl,
4856                       DAG.getVTList(MVT::i64, MVT::Other), Op);
4857     setValue(&I, Res);
4858     DAG.setRoot(Res.getValue(1));
4859     return nullptr;
4860   }
4861   case Intrinsic::bitreverse:
4862     setValue(&I, DAG.getNode(ISD::BITREVERSE, sdl,
4863                              getValue(I.getArgOperand(0)).getValueType(),
4864                              getValue(I.getArgOperand(0))));
4865     return nullptr;
4866   case Intrinsic::bswap:
4867     setValue(&I, DAG.getNode(ISD::BSWAP, sdl,
4868                              getValue(I.getArgOperand(0)).getValueType(),
4869                              getValue(I.getArgOperand(0))));
4870     return nullptr;
4871   case Intrinsic::cttz: {
4872     SDValue Arg = getValue(I.getArgOperand(0));
4873     ConstantInt *CI = cast<ConstantInt>(I.getArgOperand(1));
4874     EVT Ty = Arg.getValueType();
4875     setValue(&I, DAG.getNode(CI->isZero() ? ISD::CTTZ : ISD::CTTZ_ZERO_UNDEF,
4876                              sdl, Ty, Arg));
4877     return nullptr;
4878   }
4879   case Intrinsic::ctlz: {
4880     SDValue Arg = getValue(I.getArgOperand(0));
4881     ConstantInt *CI = cast<ConstantInt>(I.getArgOperand(1));
4882     EVT Ty = Arg.getValueType();
4883     setValue(&I, DAG.getNode(CI->isZero() ? ISD::CTLZ : ISD::CTLZ_ZERO_UNDEF,
4884                              sdl, Ty, Arg));
4885     return nullptr;
4886   }
4887   case Intrinsic::ctpop: {
4888     SDValue Arg = getValue(I.getArgOperand(0));
4889     EVT Ty = Arg.getValueType();
4890     setValue(&I, DAG.getNode(ISD::CTPOP, sdl, Ty, Arg));
4891     return nullptr;
4892   }
4893   case Intrinsic::stacksave: {
4894     SDValue Op = getRoot();
4895     Res = DAG.getNode(
4896         ISD::STACKSAVE, sdl,
4897         DAG.getVTList(TLI.getPointerTy(DAG.getDataLayout()), MVT::Other), Op);
4898     setValue(&I, Res);
4899     DAG.setRoot(Res.getValue(1));
4900     return nullptr;
4901   }
4902   case Intrinsic::stackrestore: {
4903     Res = getValue(I.getArgOperand(0));
4904     DAG.setRoot(DAG.getNode(ISD::STACKRESTORE, sdl, MVT::Other, getRoot(), Res));
4905     return nullptr;
4906   }
4907   case Intrinsic::get_dynamic_area_offset: {
4908     SDValue Op = getRoot();
4909     EVT PtrTy = TLI.getPointerTy(DAG.getDataLayout());
4910     EVT ResTy = TLI.getValueType(DAG.getDataLayout(), I.getType());
4911     // Result type for @llvm.get.dynamic.area.offset should match PtrTy for
4912     // target.
4913     if (PtrTy != ResTy)
4914       report_fatal_error("Wrong result type for @llvm.get.dynamic.area.offset"
4915                          " intrinsic!");
4916     Res = DAG.getNode(ISD::GET_DYNAMIC_AREA_OFFSET, sdl, DAG.getVTList(ResTy),
4917                       Op);
4918     DAG.setRoot(Op);
4919     setValue(&I, Res);
4920     return nullptr;
4921   }
4922   case Intrinsic::stackprotector: {
4923     // Emit code into the DAG to store the stack guard onto the stack.
4924     MachineFunction &MF = DAG.getMachineFunction();
4925     MachineFrameInfo *MFI = MF.getFrameInfo();
4926     EVT PtrTy = TLI.getPointerTy(DAG.getDataLayout());
4927     SDValue Src, Chain = getRoot();
4928     const Value *Ptr = cast<LoadInst>(I.getArgOperand(0))->getPointerOperand();
4929     const GlobalVariable *GV = dyn_cast<GlobalVariable>(Ptr);
4930
4931     // See if Ptr is a bitcast. If it is, look through it and see if we can get
4932     // global variable __stack_chk_guard.
4933     if (!GV)
4934       if (const Operator *BC = dyn_cast<Operator>(Ptr))
4935         if (BC->getOpcode() == Instruction::BitCast)
4936           GV = dyn_cast<GlobalVariable>(BC->getOperand(0));
4937
4938     if (GV && TLI.useLoadStackGuardNode()) {
4939       // Emit a LOAD_STACK_GUARD node.
4940       MachineSDNode *Node = DAG.getMachineNode(TargetOpcode::LOAD_STACK_GUARD,
4941                                                sdl, PtrTy, Chain);
4942       MachinePointerInfo MPInfo(GV);
4943       MachineInstr::mmo_iterator MemRefs = MF.allocateMemRefsArray(1);
4944       unsigned Flags = MachineMemOperand::MOLoad |
4945                        MachineMemOperand::MOInvariant;
4946       *MemRefs = MF.getMachineMemOperand(MPInfo, Flags,
4947                                          PtrTy.getSizeInBits() / 8,
4948                                          DAG.getEVTAlignment(PtrTy));
4949       Node->setMemRefs(MemRefs, MemRefs + 1);
4950
4951       // Copy the guard value to a virtual register so that it can be
4952       // retrieved in the epilogue.
4953       Src = SDValue(Node, 0);
4954       const TargetRegisterClass *RC =
4955           TLI.getRegClassFor(Src.getSimpleValueType());
4956       unsigned Reg = MF.getRegInfo().createVirtualRegister(RC);
4957
4958       SPDescriptor.setGuardReg(Reg);
4959       Chain = DAG.getCopyToReg(Chain, sdl, Reg, Src);
4960     } else {
4961       Src = getValue(I.getArgOperand(0));   // The guard's value.
4962     }
4963
4964     AllocaInst *Slot = cast<AllocaInst>(I.getArgOperand(1));
4965
4966     int FI = FuncInfo.StaticAllocaMap[Slot];
4967     MFI->setStackProtectorIndex(FI);
4968
4969     SDValue FIN = DAG.getFrameIndex(FI, PtrTy);
4970
4971     // Store the stack protector onto the stack.
4972     Res = DAG.getStore(Chain, sdl, Src, FIN, MachinePointerInfo::getFixedStack(
4973                                                  DAG.getMachineFunction(), FI),
4974                        true, false, 0);
4975     setValue(&I, Res);
4976     DAG.setRoot(Res);
4977     return nullptr;
4978   }
4979   case Intrinsic::objectsize: {
4980     // If we don't know by now, we're never going to know.
4981     ConstantInt *CI = dyn_cast<ConstantInt>(I.getArgOperand(1));
4982
4983     assert(CI && "Non-constant type in __builtin_object_size?");
4984
4985     SDValue Arg = getValue(I.getCalledValue());
4986     EVT Ty = Arg.getValueType();
4987
4988     if (CI->isZero())
4989       Res = DAG.getConstant(-1ULL, sdl, Ty);
4990     else
4991       Res = DAG.getConstant(0, sdl, Ty);
4992
4993     setValue(&I, Res);
4994     return nullptr;
4995   }
4996   case Intrinsic::annotation:
4997   case Intrinsic::ptr_annotation:
4998     // Drop the intrinsic, but forward the value
4999     setValue(&I, getValue(I.getOperand(0)));
5000     return nullptr;
5001   case Intrinsic::assume:
5002   case Intrinsic::var_annotation:
5003     // Discard annotate attributes and assumptions
5004     return nullptr;
5005
5006   case Intrinsic::init_trampoline: {
5007     const Function *F = cast<Function>(I.getArgOperand(1)->stripPointerCasts());
5008
5009     SDValue Ops[6];
5010     Ops[0] = getRoot();
5011     Ops[1] = getValue(I.getArgOperand(0));
5012     Ops[2] = getValue(I.getArgOperand(1));
5013     Ops[3] = getValue(I.getArgOperand(2));
5014     Ops[4] = DAG.getSrcValue(I.getArgOperand(0));
5015     Ops[5] = DAG.getSrcValue(F);
5016
5017     Res = DAG.getNode(ISD::INIT_TRAMPOLINE, sdl, MVT::Other, Ops);
5018
5019     DAG.setRoot(Res);
5020     return nullptr;
5021   }
5022   case Intrinsic::adjust_trampoline: {
5023     setValue(&I, DAG.getNode(ISD::ADJUST_TRAMPOLINE, sdl,
5024                              TLI.getPointerTy(DAG.getDataLayout()),
5025                              getValue(I.getArgOperand(0))));
5026     return nullptr;
5027   }
5028   case Intrinsic::gcroot:
5029     if (GFI) {
5030       const Value *Alloca = I.getArgOperand(0)->stripPointerCasts();
5031       const Constant *TypeMap = cast<Constant>(I.getArgOperand(1));
5032
5033       FrameIndexSDNode *FI = cast<FrameIndexSDNode>(getValue(Alloca).getNode());
5034       GFI->addStackRoot(FI->getIndex(), TypeMap);
5035     }
5036     return nullptr;
5037   case Intrinsic::gcread:
5038   case Intrinsic::gcwrite:
5039     llvm_unreachable("GC failed to lower gcread/gcwrite intrinsics!");
5040   case Intrinsic::flt_rounds:
5041     setValue(&I, DAG.getNode(ISD::FLT_ROUNDS_, sdl, MVT::i32));
5042     return nullptr;
5043
5044   case Intrinsic::expect: {
5045     // Just replace __builtin_expect(exp, c) with EXP.
5046     setValue(&I, getValue(I.getArgOperand(0)));
5047     return nullptr;
5048   }
5049
5050   case Intrinsic::debugtrap:
5051   case Intrinsic::trap: {
5052     StringRef TrapFuncName =
5053         I.getAttributes()
5054             .getAttribute(AttributeSet::FunctionIndex, "trap-func-name")
5055             .getValueAsString();
5056     if (TrapFuncName.empty()) {
5057       ISD::NodeType Op = (Intrinsic == Intrinsic::trap) ?
5058         ISD::TRAP : ISD::DEBUGTRAP;
5059       DAG.setRoot(DAG.getNode(Op, sdl,MVT::Other, getRoot()));
5060       return nullptr;
5061     }
5062     TargetLowering::ArgListTy Args;
5063
5064     TargetLowering::CallLoweringInfo CLI(DAG);
5065     CLI.setDebugLoc(sdl).setChain(getRoot()).setCallee(
5066         CallingConv::C, I.getType(),
5067         DAG.getExternalSymbol(TrapFuncName.data(),
5068                               TLI.getPointerTy(DAG.getDataLayout())),
5069         std::move(Args), 0);
5070
5071     std::pair<SDValue, SDValue> Result = TLI.LowerCallTo(CLI);
5072     DAG.setRoot(Result.second);
5073     return nullptr;
5074   }
5075
5076   case Intrinsic::uadd_with_overflow:
5077   case Intrinsic::sadd_with_overflow:
5078   case Intrinsic::usub_with_overflow:
5079   case Intrinsic::ssub_with_overflow:
5080   case Intrinsic::umul_with_overflow:
5081   case Intrinsic::smul_with_overflow: {
5082     ISD::NodeType Op;
5083     switch (Intrinsic) {
5084     default: llvm_unreachable("Impossible intrinsic");  // Can't reach here.
5085     case Intrinsic::uadd_with_overflow: Op = ISD::UADDO; break;
5086     case Intrinsic::sadd_with_overflow: Op = ISD::SADDO; break;
5087     case Intrinsic::usub_with_overflow: Op = ISD::USUBO; break;
5088     case Intrinsic::ssub_with_overflow: Op = ISD::SSUBO; break;
5089     case Intrinsic::umul_with_overflow: Op = ISD::UMULO; break;
5090     case Intrinsic::smul_with_overflow: Op = ISD::SMULO; break;
5091     }
5092     SDValue Op1 = getValue(I.getArgOperand(0));
5093     SDValue Op2 = getValue(I.getArgOperand(1));
5094
5095     SDVTList VTs = DAG.getVTList(Op1.getValueType(), MVT::i1);
5096     setValue(&I, DAG.getNode(Op, sdl, VTs, Op1, Op2));
5097     return nullptr;
5098   }
5099   case Intrinsic::prefetch: {
5100     SDValue Ops[5];
5101     unsigned rw = cast<ConstantInt>(I.getArgOperand(1))->getZExtValue();
5102     Ops[0] = getRoot();
5103     Ops[1] = getValue(I.getArgOperand(0));
5104     Ops[2] = getValue(I.getArgOperand(1));
5105     Ops[3] = getValue(I.getArgOperand(2));
5106     Ops[4] = getValue(I.getArgOperand(3));
5107     DAG.setRoot(DAG.getMemIntrinsicNode(ISD::PREFETCH, sdl,
5108                                         DAG.getVTList(MVT::Other), Ops,
5109                                         EVT::getIntegerVT(*Context, 8),
5110                                         MachinePointerInfo(I.getArgOperand(0)),
5111                                         0, /* align */
5112                                         false, /* volatile */
5113                                         rw==0, /* read */
5114                                         rw==1)); /* write */
5115     return nullptr;
5116   }
5117   case Intrinsic::lifetime_start:
5118   case Intrinsic::lifetime_end: {
5119     bool IsStart = (Intrinsic == Intrinsic::lifetime_start);
5120     // Stack coloring is not enabled in O0, discard region information.
5121     if (TM.getOptLevel() == CodeGenOpt::None)
5122       return nullptr;
5123
5124     SmallVector<Value *, 4> Allocas;
5125     GetUnderlyingObjects(I.getArgOperand(1), Allocas, *DL);
5126
5127     for (SmallVectorImpl<Value*>::iterator Object = Allocas.begin(),
5128            E = Allocas.end(); Object != E; ++Object) {
5129       AllocaInst *LifetimeObject = dyn_cast_or_null<AllocaInst>(*Object);
5130
5131       // Could not find an Alloca.
5132       if (!LifetimeObject)
5133         continue;
5134
5135       // First check that the Alloca is static, otherwise it won't have a
5136       // valid frame index.
5137       auto SI = FuncInfo.StaticAllocaMap.find(LifetimeObject);
5138       if (SI == FuncInfo.StaticAllocaMap.end())
5139         return nullptr;
5140
5141       int FI = SI->second;
5142
5143       SDValue Ops[2];
5144       Ops[0] = getRoot();
5145       Ops[1] =
5146           DAG.getFrameIndex(FI, TLI.getPointerTy(DAG.getDataLayout()), true);
5147       unsigned Opcode = (IsStart ? ISD::LIFETIME_START : ISD::LIFETIME_END);
5148
5149       Res = DAG.getNode(Opcode, sdl, MVT::Other, Ops);
5150       DAG.setRoot(Res);
5151     }
5152     return nullptr;
5153   }
5154   case Intrinsic::invariant_start:
5155     // Discard region information.
5156     setValue(&I, DAG.getUNDEF(TLI.getPointerTy(DAG.getDataLayout())));
5157     return nullptr;
5158   case Intrinsic::invariant_end:
5159     // Discard region information.
5160     return nullptr;
5161   case Intrinsic::stackprotectorcheck: {
5162     // Do not actually emit anything for this basic block. Instead we initialize
5163     // the stack protector descriptor and export the guard variable so we can
5164     // access it in FinishBasicBlock.
5165     const BasicBlock *BB = I.getParent();
5166     SPDescriptor.initialize(BB, FuncInfo.MBBMap[BB], I);
5167     ExportFromCurrentBlock(SPDescriptor.getGuard());
5168
5169     // Flush our exports since we are going to process a terminator.
5170     (void)getControlRoot();
5171     return nullptr;
5172   }
5173   case Intrinsic::clear_cache:
5174     return TLI.getClearCacheBuiltinName();
5175   case Intrinsic::donothing:
5176     // ignore
5177     return nullptr;
5178   case Intrinsic::experimental_stackmap: {
5179     visitStackmap(I);
5180     return nullptr;
5181   }
5182   case Intrinsic::experimental_patchpoint_void:
5183   case Intrinsic::experimental_patchpoint_i64: {
5184     visitPatchpoint(&I);
5185     return nullptr;
5186   }
5187   case Intrinsic::experimental_gc_statepoint: {
5188     visitStatepoint(I);
5189     return nullptr;
5190   }
5191   case Intrinsic::experimental_gc_result_int:
5192   case Intrinsic::experimental_gc_result_float:
5193   case Intrinsic::experimental_gc_result_ptr:
5194   case Intrinsic::experimental_gc_result: {
5195     visitGCResult(I);
5196     return nullptr;
5197   }
5198   case Intrinsic::experimental_gc_relocate: {
5199     visitGCRelocate(I);
5200     return nullptr;
5201   }
5202   case Intrinsic::instrprof_increment:
5203     llvm_unreachable("instrprof failed to lower an increment");
5204   case Intrinsic::instrprof_value_profile:
5205     llvm_unreachable("instrprof failed to lower a value profiling call");
5206   case Intrinsic::localescape: {
5207     MachineFunction &MF = DAG.getMachineFunction();
5208     const TargetInstrInfo *TII = DAG.getSubtarget().getInstrInfo();
5209
5210     // Directly emit some LOCAL_ESCAPE machine instrs. Label assignment emission
5211     // is the same on all targets.
5212     for (unsigned Idx = 0, E = I.getNumArgOperands(); Idx < E; ++Idx) {
5213       Value *Arg = I.getArgOperand(Idx)->stripPointerCasts();
5214       if (isa<ConstantPointerNull>(Arg))
5215         continue; // Skip null pointers. They represent a hole in index space.
5216       AllocaInst *Slot = cast<AllocaInst>(Arg);
5217       assert(FuncInfo.StaticAllocaMap.count(Slot) &&
5218              "can only escape static allocas");
5219       int FI = FuncInfo.StaticAllocaMap[Slot];
5220       MCSymbol *FrameAllocSym =
5221           MF.getMMI().getContext().getOrCreateFrameAllocSymbol(
5222               GlobalValue::getRealLinkageName(MF.getName()), Idx);
5223       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, dl,
5224               TII->get(TargetOpcode::LOCAL_ESCAPE))
5225           .addSym(FrameAllocSym)
5226           .addFrameIndex(FI);
5227     }
5228
5229     return nullptr;
5230   }
5231
5232   case Intrinsic::localrecover: {
5233     // i8* @llvm.localrecover(i8* %fn, i8* %fp, i32 %idx)
5234     MachineFunction &MF = DAG.getMachineFunction();
5235     MVT PtrVT = TLI.getPointerTy(DAG.getDataLayout(), 0);
5236
5237     // Get the symbol that defines the frame offset.
5238     auto *Fn = cast<Function>(I.getArgOperand(0)->stripPointerCasts());
5239     auto *Idx = cast<ConstantInt>(I.getArgOperand(2));
5240     unsigned IdxVal = unsigned(Idx->getLimitedValue(INT_MAX));
5241     MCSymbol *FrameAllocSym =
5242         MF.getMMI().getContext().getOrCreateFrameAllocSymbol(
5243             GlobalValue::getRealLinkageName(Fn->getName()), IdxVal);
5244
5245     // Create a MCSymbol for the label to avoid any target lowering
5246     // that would make this PC relative.
5247     SDValue OffsetSym = DAG.getMCSymbol(FrameAllocSym, PtrVT);
5248     SDValue OffsetVal =
5249         DAG.getNode(ISD::LOCAL_RECOVER, sdl, PtrVT, OffsetSym);
5250
5251     // Add the offset to the FP.
5252     Value *FP = I.getArgOperand(1);
5253     SDValue FPVal = getValue(FP);
5254     SDValue Add = DAG.getNode(ISD::ADD, sdl, PtrVT, FPVal, OffsetVal);
5255     setValue(&I, Add);
5256
5257     return nullptr;
5258   }
5259
5260   case Intrinsic::eh_exceptionpointer:
5261   case Intrinsic::eh_exceptioncode: {
5262     // Get the exception pointer vreg, copy from it, and resize it to fit.
5263     const auto *CPI = cast<CatchPadInst>(I.getArgOperand(0));
5264     MVT PtrVT = TLI.getPointerTy(DAG.getDataLayout());
5265     const TargetRegisterClass *PtrRC = TLI.getRegClassFor(PtrVT);
5266     unsigned VReg = FuncInfo.getCatchPadExceptionPointerVReg(CPI, PtrRC);
5267     SDValue N =
5268         DAG.getCopyFromReg(DAG.getEntryNode(), getCurSDLoc(), VReg, PtrVT);
5269     if (Intrinsic == Intrinsic::eh_exceptioncode)
5270       N = DAG.getZExtOrTrunc(N, getCurSDLoc(), MVT::i32);
5271     setValue(&I, N);
5272     return nullptr;
5273   }
5274   }
5275 }
5276
5277 std::pair<SDValue, SDValue>
5278 SelectionDAGBuilder::lowerInvokable(TargetLowering::CallLoweringInfo &CLI,
5279                                     const BasicBlock *EHPadBB) {
5280   MachineModuleInfo &MMI = DAG.getMachineFunction().getMMI();
5281   MCSymbol *BeginLabel = nullptr;
5282
5283   if (EHPadBB) {
5284     // Insert a label before the invoke call to mark the try range.  This can be
5285     // used to detect deletion of the invoke via the MachineModuleInfo.
5286     BeginLabel = MMI.getContext().createTempSymbol();
5287
5288     // For SjLj, keep track of which landing pads go with which invokes
5289     // so as to maintain the ordering of pads in the LSDA.
5290     unsigned CallSiteIndex = MMI.getCurrentCallSite();
5291     if (CallSiteIndex) {
5292       MMI.setCallSiteBeginLabel(BeginLabel, CallSiteIndex);
5293       LPadToCallSiteMap[FuncInfo.MBBMap[EHPadBB]].push_back(CallSiteIndex);
5294
5295       // Now that the call site is handled, stop tracking it.
5296       MMI.setCurrentCallSite(0);
5297     }
5298
5299     // Both PendingLoads and PendingExports must be flushed here;
5300     // this call might not return.
5301     (void)getRoot();
5302     DAG.setRoot(DAG.getEHLabel(getCurSDLoc(), getControlRoot(), BeginLabel));
5303
5304     CLI.setChain(getRoot());
5305   }
5306   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
5307   std::pair<SDValue, SDValue> Result = TLI.LowerCallTo(CLI);
5308
5309   assert((CLI.IsTailCall || Result.second.getNode()) &&
5310          "Non-null chain expected with non-tail call!");
5311   assert((Result.second.getNode() || !Result.first.getNode()) &&
5312          "Null value expected with tail call!");
5313
5314   if (!Result.second.getNode()) {
5315     // As a special case, a null chain means that a tail call has been emitted
5316     // and the DAG root is already updated.
5317     HasTailCall = true;
5318
5319     // Since there's no actual continuation from this block, nothing can be
5320     // relying on us setting vregs for them.
5321     PendingExports.clear();
5322   } else {
5323     DAG.setRoot(Result.second);
5324   }
5325
5326   if (EHPadBB) {
5327     // Insert a label at the end of the invoke call to mark the try range.  This
5328     // can be used to detect deletion of the invoke via the MachineModuleInfo.
5329     MCSymbol *EndLabel = MMI.getContext().createTempSymbol();
5330     DAG.setRoot(DAG.getEHLabel(getCurSDLoc(), getRoot(), EndLabel));
5331
5332     // Inform MachineModuleInfo of range.
5333     if (MMI.hasEHFunclets()) {
5334       assert(CLI.CS);
5335       WinEHFuncInfo *EHInfo = DAG.getMachineFunction().getWinEHFuncInfo();
5336       EHInfo->addIPToStateRange(cast<InvokeInst>(CLI.CS->getInstruction()),
5337                                 BeginLabel, EndLabel);
5338     } else {
5339       MMI.addInvoke(FuncInfo.MBBMap[EHPadBB], BeginLabel, EndLabel);
5340     }
5341   }
5342
5343   return Result;
5344 }
5345
5346 void SelectionDAGBuilder::LowerCallTo(ImmutableCallSite CS, SDValue Callee,
5347                                       bool isTailCall,
5348                                       const BasicBlock *EHPadBB) {
5349   PointerType *PT = cast<PointerType>(CS.getCalledValue()->getType());
5350   FunctionType *FTy = cast<FunctionType>(PT->getElementType());
5351   Type *RetTy = FTy->getReturnType();
5352
5353   TargetLowering::ArgListTy Args;
5354   TargetLowering::ArgListEntry Entry;
5355   Args.reserve(CS.arg_size());
5356
5357   for (ImmutableCallSite::arg_iterator i = CS.arg_begin(), e = CS.arg_end();
5358        i != e; ++i) {
5359     const Value *V = *i;
5360
5361     // Skip empty types
5362     if (V->getType()->isEmptyTy())
5363       continue;
5364
5365     SDValue ArgNode = getValue(V);
5366     Entry.Node = ArgNode; Entry.Ty = V->getType();
5367
5368     // Skip the first return-type Attribute to get to params.
5369     Entry.setAttributes(&CS, i - CS.arg_begin() + 1);
5370     Args.push_back(Entry);
5371
5372     // If we have an explicit sret argument that is an Instruction, (i.e., it
5373     // might point to function-local memory), we can't meaningfully tail-call.
5374     if (Entry.isSRet && isa<Instruction>(V))
5375       isTailCall = false;
5376   }
5377
5378   // Check if target-independent constraints permit a tail call here.
5379   // Target-dependent constraints are checked within TLI->LowerCallTo.
5380   if (isTailCall && !isInTailCallPosition(CS, DAG.getTarget()))
5381     isTailCall = false;
5382
5383   TargetLowering::CallLoweringInfo CLI(DAG);
5384   CLI.setDebugLoc(getCurSDLoc()).setChain(getRoot())
5385     .setCallee(RetTy, FTy, Callee, std::move(Args), CS)
5386     .setTailCall(isTailCall);
5387   std::pair<SDValue, SDValue> Result = lowerInvokable(CLI, EHPadBB);
5388
5389   if (Result.first.getNode())
5390     setValue(CS.getInstruction(), Result.first);
5391 }
5392
5393 /// IsOnlyUsedInZeroEqualityComparison - Return true if it only matters that the
5394 /// value is equal or not-equal to zero.
5395 static bool IsOnlyUsedInZeroEqualityComparison(const Value *V) {
5396   for (const User *U : V->users()) {
5397     if (const ICmpInst *IC = dyn_cast<ICmpInst>(U))
5398       if (IC->isEquality())
5399         if (const Constant *C = dyn_cast<Constant>(IC->getOperand(1)))
5400           if (C->isNullValue())
5401             continue;
5402     // Unknown instruction.
5403     return false;
5404   }
5405   return true;
5406 }
5407
5408 static SDValue getMemCmpLoad(const Value *PtrVal, MVT LoadVT,
5409                              Type *LoadTy,
5410                              SelectionDAGBuilder &Builder) {
5411
5412   // Check to see if this load can be trivially constant folded, e.g. if the
5413   // input is from a string literal.
5414   if (const Constant *LoadInput = dyn_cast<Constant>(PtrVal)) {
5415     // Cast pointer to the type we really want to load.
5416     LoadInput = ConstantExpr::getBitCast(const_cast<Constant *>(LoadInput),
5417                                          PointerType::getUnqual(LoadTy));
5418
5419     if (const Constant *LoadCst = ConstantFoldLoadFromConstPtr(
5420             const_cast<Constant *>(LoadInput), *Builder.DL))
5421       return Builder.getValue(LoadCst);
5422   }
5423
5424   // Otherwise, we have to emit the load.  If the pointer is to unfoldable but
5425   // still constant memory, the input chain can be the entry node.
5426   SDValue Root;
5427   bool ConstantMemory = false;
5428
5429   // Do not serialize (non-volatile) loads of constant memory with anything.
5430   if (Builder.AA->pointsToConstantMemory(PtrVal)) {
5431     Root = Builder.DAG.getEntryNode();
5432     ConstantMemory = true;
5433   } else {
5434     // Do not serialize non-volatile loads against each other.
5435     Root = Builder.DAG.getRoot();
5436   }
5437
5438   SDValue Ptr = Builder.getValue(PtrVal);
5439   SDValue LoadVal = Builder.DAG.getLoad(LoadVT, Builder.getCurSDLoc(), Root,
5440                                         Ptr, MachinePointerInfo(PtrVal),
5441                                         false /*volatile*/,
5442                                         false /*nontemporal*/,
5443                                         false /*isinvariant*/, 1 /* align=1 */);
5444
5445   if (!ConstantMemory)
5446     Builder.PendingLoads.push_back(LoadVal.getValue(1));
5447   return LoadVal;
5448 }
5449
5450 /// processIntegerCallValue - Record the value for an instruction that
5451 /// produces an integer result, converting the type where necessary.
5452 void SelectionDAGBuilder::processIntegerCallValue(const Instruction &I,
5453                                                   SDValue Value,
5454                                                   bool IsSigned) {
5455   EVT VT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
5456                                                     I.getType(), true);
5457   if (IsSigned)
5458     Value = DAG.getSExtOrTrunc(Value, getCurSDLoc(), VT);
5459   else
5460     Value = DAG.getZExtOrTrunc(Value, getCurSDLoc(), VT);
5461   setValue(&I, Value);
5462 }
5463
5464 /// visitMemCmpCall - See if we can lower a call to memcmp in an optimized form.
5465 /// If so, return true and lower it, otherwise return false and it will be
5466 /// lowered like a normal call.
5467 bool SelectionDAGBuilder::visitMemCmpCall(const CallInst &I) {
5468   // Verify that the prototype makes sense.  int memcmp(void*,void*,size_t)
5469   if (I.getNumArgOperands() != 3)
5470     return false;
5471
5472   const Value *LHS = I.getArgOperand(0), *RHS = I.getArgOperand(1);
5473   if (!LHS->getType()->isPointerTy() || !RHS->getType()->isPointerTy() ||
5474       !I.getArgOperand(2)->getType()->isIntegerTy() ||
5475       !I.getType()->isIntegerTy())
5476     return false;
5477
5478   const Value *Size = I.getArgOperand(2);
5479   const ConstantInt *CSize = dyn_cast<ConstantInt>(Size);
5480   if (CSize && CSize->getZExtValue() == 0) {
5481     EVT CallVT = DAG.getTargetLoweringInfo().getValueType(DAG.getDataLayout(),
5482                                                           I.getType(), true);
5483     setValue(&I, DAG.getConstant(0, getCurSDLoc(), CallVT));
5484     return true;
5485   }
5486
5487   const TargetSelectionDAGInfo &TSI = DAG.getSelectionDAGInfo();
5488   std::pair<SDValue, SDValue> Res =
5489     TSI.EmitTargetCodeForMemcmp(DAG, getCurSDLoc(), DAG.getRoot(),
5490                                 getValue(LHS), getValue(RHS), getValue(Size),
5491                                 MachinePointerInfo(LHS),
5492                                 MachinePointerInfo(RHS));
5493   if (Res.first.getNode()) {
5494     processIntegerCallValue(I, Res.first, true);
5495     PendingLoads.push_back(Res.second);
5496     return true;
5497   }
5498
5499   // memcmp(S1,S2,2) != 0 -> (*(short*)LHS != *(short*)RHS)  != 0
5500   // memcmp(S1,S2,4) != 0 -> (*(int*)LHS != *(int*)RHS)  != 0
5501   if (CSize && IsOnlyUsedInZeroEqualityComparison(&I)) {
5502     bool ActuallyDoIt = true;
5503     MVT LoadVT;
5504     Type *LoadTy;
5505     switch (CSize->getZExtValue()) {
5506     default:
5507       LoadVT = MVT::Other;
5508       LoadTy = nullptr;
5509       ActuallyDoIt = false;
5510       break;
5511     case 2:
5512       LoadVT = MVT::i16;
5513       LoadTy = Type::getInt16Ty(CSize->getContext());
5514       break;
5515     case 4:
5516       LoadVT = MVT::i32;
5517       LoadTy = Type::getInt32Ty(CSize->getContext());
5518       break;
5519     case 8:
5520       LoadVT = MVT::i64;
5521       LoadTy = Type::getInt64Ty(CSize->getContext());
5522       break;
5523         /*
5524     case 16:
5525       LoadVT = MVT::v4i32;
5526       LoadTy = Type::getInt32Ty(CSize->getContext());
5527       LoadTy = VectorType::get(LoadTy, 4);
5528       break;
5529          */
5530     }
5531
5532     // This turns into unaligned loads.  We only do this if the target natively
5533     // supports the MVT we'll be loading or if it is small enough (<= 4) that
5534     // we'll only produce a small number of byte loads.
5535
5536     // Require that we can find a legal MVT, and only do this if the target
5537     // supports unaligned loads of that type.  Expanding into byte loads would
5538     // bloat the code.
5539     const TargetLowering &TLI = DAG.getTargetLoweringInfo();
5540     if (ActuallyDoIt && CSize->getZExtValue() > 4) {
5541       unsigned DstAS = LHS->getType()->getPointerAddressSpace();
5542       unsigned SrcAS = RHS->getType()->getPointerAddressSpace();
5543       // TODO: Handle 5 byte compare as 4-byte + 1 byte.
5544       // TODO: Handle 8 byte compare on x86-32 as two 32-bit loads.
5545       // TODO: Check alignment of src and dest ptrs.
5546       if (!TLI.isTypeLegal(LoadVT) ||
5547           !TLI.allowsMisalignedMemoryAccesses(LoadVT, SrcAS) ||
5548           !TLI.allowsMisalignedMemoryAccesses(LoadVT, DstAS))
5549         ActuallyDoIt = false;
5550     }
5551
5552     if (ActuallyDoIt) {
5553       SDValue LHSVal = getMemCmpLoad(LHS, LoadVT, LoadTy, *this);
5554       SDValue RHSVal = getMemCmpLoad(RHS, LoadVT, LoadTy, *this);
5555
5556       SDValue Res = DAG.getSetCC(getCurSDLoc(), MVT::i1, LHSVal, RHSVal,
5557                                  ISD::SETNE);
5558       processIntegerCallValue(I, Res, false);
5559       return true;
5560     }
5561   }
5562
5563
5564   return false;
5565 }
5566
5567 /// visitMemChrCall -- See if we can lower a memchr call into an optimized
5568 /// form.  If so, return true and lower it, otherwise return false and it
5569 /// will be lowered like a normal call.
5570 bool SelectionDAGBuilder::visitMemChrCall(const CallInst &I) {
5571   // Verify that the prototype makes sense.  void *memchr(void *, int, size_t)
5572   if (I.getNumArgOperands() != 3)
5573     return false;
5574
5575   const Value *Src = I.getArgOperand(0);
5576   const Value *Char = I.getArgOperand(1);
5577   const Value *Length = I.getArgOperand(2);
5578   if (!Src->getType()->isPointerTy() ||
5579       !Char->getType()->isIntegerTy() ||
5580       !Length->getType()->isIntegerTy() ||
5581       !I.getType()->isPointerTy())
5582     return false;
5583
5584   const TargetSelectionDAGInfo &TSI = DAG.getSelectionDAGInfo();
5585   std::pair<SDValue, SDValue> Res =
5586     TSI.EmitTargetCodeForMemchr(DAG, getCurSDLoc(), DAG.getRoot(),
5587                                 getValue(Src), getValue(Char), getValue(Length),
5588                                 MachinePointerInfo(Src));
5589   if (Res.first.getNode()) {
5590     setValue(&I, Res.first);
5591     PendingLoads.push_back(Res.second);
5592     return true;
5593   }
5594
5595   return false;
5596 }
5597
5598 /// visitStrCpyCall -- See if we can lower a strcpy or stpcpy call into an
5599 /// optimized form.  If so, return true and lower it, otherwise return false
5600 /// and it will be lowered like a normal call.
5601 bool SelectionDAGBuilder::visitStrCpyCall(const CallInst &I, bool isStpcpy) {
5602   // Verify that the prototype makes sense.  char *strcpy(char *, char *)
5603   if (I.getNumArgOperands() != 2)
5604     return false;
5605
5606   const Value *Arg0 = I.getArgOperand(0), *Arg1 = I.getArgOperand(1);
5607   if (!Arg0->getType()->isPointerTy() ||
5608       !Arg1->getType()->isPointerTy() ||
5609       !I.getType()->isPointerTy())
5610     return false;
5611
5612   const TargetSelectionDAGInfo &TSI = DAG.getSelectionDAGInfo();
5613   std::pair<SDValue, SDValue> Res =
5614     TSI.EmitTargetCodeForStrcpy(DAG, getCurSDLoc(), getRoot(),
5615                                 getValue(Arg0), getValue(Arg1),
5616                                 MachinePointerInfo(Arg0),
5617                                 MachinePointerInfo(Arg1), isStpcpy);
5618   if (Res.first.getNode()) {
5619     setValue(&I, Res.first);
5620     DAG.setRoot(Res.second);
5621     return true;
5622   }
5623
5624   return false;
5625 }
5626
5627 /// visitStrCmpCall - See if we can lower a call to strcmp in an optimized form.
5628 /// If so, return true and lower it, otherwise return false and it will be
5629 /// lowered like a normal call.
5630 bool SelectionDAGBuilder::visitStrCmpCall(const CallInst &I) {
5631   // Verify that the prototype makes sense.  int strcmp(void*,void*)
5632   if (I.getNumArgOperands() != 2)
5633     return false;
5634
5635   const Value *Arg0 = I.getArgOperand(0), *Arg1 = I.getArgOperand(1);
5636   if (!Arg0->getType()->isPointerTy() ||
5637       !Arg1->getType()->isPointerTy() ||
5638       !I.getType()->isIntegerTy())
5639     return false;
5640
5641   const TargetSelectionDAGInfo &TSI = DAG.getSelectionDAGInfo();
5642   std::pair<SDValue, SDValue> Res =
5643     TSI.EmitTargetCodeForStrcmp(DAG, getCurSDLoc(), DAG.getRoot(),
5644                                 getValue(Arg0), getValue(Arg1),
5645                                 MachinePointerInfo(Arg0),
5646                                 MachinePointerInfo(Arg1));
5647   if (Res.first.getNode()) {
5648     processIntegerCallValue(I, Res.first, true);
5649     PendingLoads.push_back(Res.second);
5650     return true;
5651   }
5652
5653   return false;
5654 }
5655
5656 /// visitStrLenCall -- See if we can lower a strlen call into an optimized
5657 /// form.  If so, return true and lower it, otherwise return false and it
5658 /// will be lowered like a normal call.
5659 bool SelectionDAGBuilder::visitStrLenCall(const CallInst &I) {
5660   // Verify that the prototype makes sense.  size_t strlen(char *)
5661   if (I.getNumArgOperands() != 1)
5662     return false;
5663
5664   const Value *Arg0 = I.getArgOperand(0);
5665   if (!Arg0->getType()->isPointerTy() || !I.getType()->isIntegerTy())
5666     return false;
5667
5668   const TargetSelectionDAGInfo &TSI = DAG.getSelectionDAGInfo();
5669   std::pair<SDValue, SDValue> Res =
5670     TSI.EmitTargetCodeForStrlen(DAG, getCurSDLoc(), DAG.getRoot(),
5671                                 getValue(Arg0), MachinePointerInfo(Arg0));
5672   if (Res.first.getNode()) {
5673     processIntegerCallValue(I, Res.first, false);
5674     PendingLoads.push_back(Res.second);
5675     return true;
5676   }
5677
5678   return false;
5679 }
5680
5681 /// visitStrNLenCall -- See if we can lower a strnlen call into an optimized
5682 /// form.  If so, return true and lower it, otherwise return false and it
5683 /// will be lowered like a normal call.
5684 bool SelectionDAGBuilder::visitStrNLenCall(const CallInst &I) {
5685   // Verify that the prototype makes sense.  size_t strnlen(char *, size_t)
5686   if (I.getNumArgOperands() != 2)
5687     return false;
5688
5689   const Value *Arg0 = I.getArgOperand(0), *Arg1 = I.getArgOperand(1);
5690   if (!Arg0->getType()->isPointerTy() ||
5691       !Arg1->getType()->isIntegerTy() ||
5692       !I.getType()->isIntegerTy())
5693     return false;
5694
5695   const TargetSelectionDAGInfo &TSI = DAG.getSelectionDAGInfo();
5696   std::pair<SDValue, SDValue> Res =
5697     TSI.EmitTargetCodeForStrnlen(DAG, getCurSDLoc(), DAG.getRoot(),
5698                                  getValue(Arg0), getValue(Arg1),
5699                                  MachinePointerInfo(Arg0));
5700   if (Res.first.getNode()) {
5701     processIntegerCallValue(I, Res.first, false);
5702     PendingLoads.push_back(Res.second);
5703     return true;
5704   }
5705
5706   return false;
5707 }
5708
5709 /// visitUnaryFloatCall - If a call instruction is a unary floating-point
5710 /// operation (as expected), translate it to an SDNode with the specified opcode
5711 /// and return true.
5712 bool SelectionDAGBuilder::visitUnaryFloatCall(const CallInst &I,
5713                                               unsigned Opcode) {
5714   // Sanity check that it really is a unary floating-point call.
5715   if (I.getNumArgOperands() != 1 ||
5716       !I.getArgOperand(0)->getType()->isFloatingPointTy() ||
5717       I.getType() != I.getArgOperand(0)->getType() ||
5718       !I.onlyReadsMemory())
5719     return false;
5720
5721   SDValue Tmp = getValue(I.getArgOperand(0));
5722   setValue(&I, DAG.getNode(Opcode, getCurSDLoc(), Tmp.getValueType(), Tmp));
5723   return true;
5724 }
5725
5726 /// visitBinaryFloatCall - If a call instruction is a binary floating-point
5727 /// operation (as expected), translate it to an SDNode with the specified opcode
5728 /// and return true.
5729 bool SelectionDAGBuilder::visitBinaryFloatCall(const CallInst &I,
5730                                                unsigned Opcode) {
5731   // Sanity check that it really is a binary floating-point call.
5732   if (I.getNumArgOperands() != 2 ||
5733       !I.getArgOperand(0)->getType()->isFloatingPointTy() ||
5734       I.getType() != I.getArgOperand(0)->getType() ||
5735       I.getType() != I.getArgOperand(1)->getType() ||
5736       !I.onlyReadsMemory())
5737     return false;
5738
5739   SDValue Tmp0 = getValue(I.getArgOperand(0));
5740   SDValue Tmp1 = getValue(I.getArgOperand(1));
5741   EVT VT = Tmp0.getValueType();
5742   setValue(&I, DAG.getNode(Opcode, getCurSDLoc(), VT, Tmp0, Tmp1));
5743   return true;
5744 }
5745
5746 void SelectionDAGBuilder::visitCall(const CallInst &I) {
5747   // Handle inline assembly differently.
5748   if (isa<InlineAsm>(I.getCalledValue())) {
5749     visitInlineAsm(&I);
5750     return;
5751   }
5752
5753   MachineModuleInfo &MMI = DAG.getMachineFunction().getMMI();
5754   ComputeUsesVAFloatArgument(I, &MMI);
5755
5756   const char *RenameFn = nullptr;
5757   if (Function *F = I.getCalledFunction()) {
5758     if (F->isDeclaration()) {
5759       if (const TargetIntrinsicInfo *II = TM.getIntrinsicInfo()) {
5760         if (unsigned IID = II->getIntrinsicID(F)) {
5761           RenameFn = visitIntrinsicCall(I, IID);
5762           if (!RenameFn)
5763             return;
5764         }
5765       }
5766       if (Intrinsic::ID IID = F->getIntrinsicID()) {
5767         RenameFn = visitIntrinsicCall(I, IID);
5768         if (!RenameFn)
5769           return;
5770       }
5771     }
5772
5773     // Check for well-known libc/libm calls.  If the function is internal, it
5774     // can't be a library call.
5775     LibFunc::Func Func;
5776     if (!F->hasLocalLinkage() && F->hasName() &&
5777         LibInfo->getLibFunc(F->getName(), Func) &&
5778         LibInfo->hasOptimizedCodeGen(Func)) {
5779       switch (Func) {
5780       default: break;
5781       case LibFunc::copysign:
5782       case LibFunc::copysignf:
5783       case LibFunc::copysignl:
5784         if (I.getNumArgOperands() == 2 &&   // Basic sanity checks.
5785             I.getArgOperand(0)->getType()->isFloatingPointTy() &&
5786             I.getType() == I.getArgOperand(0)->getType() &&
5787             I.getType() == I.getArgOperand(1)->getType() &&
5788             I.onlyReadsMemory()) {
5789           SDValue LHS = getValue(I.getArgOperand(0));
5790           SDValue RHS = getValue(I.getArgOperand(1));
5791           setValue(&I, DAG.getNode(ISD::FCOPYSIGN, getCurSDLoc(),
5792                                    LHS.getValueType(), LHS, RHS));
5793           return;
5794         }
5795         break;
5796       case LibFunc::fabs:
5797       case LibFunc::fabsf:
5798       case LibFunc::fabsl:
5799         if (visitUnaryFloatCall(I, ISD::FABS))
5800           return;
5801         break;
5802       case LibFunc::fmin:
5803       case LibFunc::fminf:
5804       case LibFunc::fminl:
5805         if (visitBinaryFloatCall(I, ISD::FMINNUM))
5806           return;
5807         break;
5808       case LibFunc::fmax:
5809       case LibFunc::fmaxf:
5810       case LibFunc::fmaxl:
5811         if (visitBinaryFloatCall(I, ISD::FMAXNUM))
5812           return;
5813         break;
5814       case LibFunc::sin:
5815       case LibFunc::sinf:
5816       case LibFunc::sinl:
5817         if (visitUnaryFloatCall(I, ISD::FSIN))
5818           return;
5819         break;
5820       case LibFunc::cos:
5821       case LibFunc::cosf:
5822       case LibFunc::cosl:
5823         if (visitUnaryFloatCall(I, ISD::FCOS))
5824           return;
5825         break;
5826       case LibFunc::sqrt:
5827       case LibFunc::sqrtf:
5828       case LibFunc::sqrtl:
5829       case LibFunc::sqrt_finite:
5830       case LibFunc::sqrtf_finite:
5831       case LibFunc::sqrtl_finite:
5832         if (visitUnaryFloatCall(I, ISD::FSQRT))
5833           return;
5834         break;
5835       case LibFunc::floor:
5836       case LibFunc::floorf:
5837       case LibFunc::floorl:
5838         if (visitUnaryFloatCall(I, ISD::FFLOOR))
5839           return;
5840         break;
5841       case LibFunc::nearbyint:
5842       case LibFunc::nearbyintf:
5843       case LibFunc::nearbyintl:
5844         if (visitUnaryFloatCall(I, ISD::FNEARBYINT))
5845           return;
5846         break;
5847       case LibFunc::ceil:
5848       case LibFunc::ceilf:
5849       case LibFunc::ceill:
5850         if (visitUnaryFloatCall(I, ISD::FCEIL))
5851           return;
5852         break;
5853       case LibFunc::rint:
5854       case LibFunc::rintf:
5855       case LibFunc::rintl:
5856         if (visitUnaryFloatCall(I, ISD::FRINT))
5857           return;
5858         break;
5859       case LibFunc::round:
5860       case LibFunc::roundf:
5861       case LibFunc::roundl:
5862         if (visitUnaryFloatCall(I, ISD::FROUND))
5863           return;
5864         break;
5865       case LibFunc::trunc:
5866       case LibFunc::truncf:
5867       case LibFunc::truncl:
5868         if (visitUnaryFloatCall(I, ISD::FTRUNC))
5869           return;
5870         break;
5871       case LibFunc::log2:
5872       case LibFunc::log2f:
5873       case LibFunc::log2l:
5874         if (visitUnaryFloatCall(I, ISD::FLOG2))
5875           return;
5876         break;
5877       case LibFunc::exp2:
5878       case LibFunc::exp2f:
5879       case LibFunc::exp2l:
5880         if (visitUnaryFloatCall(I, ISD::FEXP2))
5881           return;
5882         break;
5883       case LibFunc::memcmp:
5884         if (visitMemCmpCall(I))
5885           return;
5886         break;
5887       case LibFunc::memchr:
5888         if (visitMemChrCall(I))
5889           return;
5890         break;
5891       case LibFunc::strcpy:
5892         if (visitStrCpyCall(I, false))
5893           return;
5894         break;
5895       case LibFunc::stpcpy:
5896         if (visitStrCpyCall(I, true))
5897           return;
5898         break;
5899       case LibFunc::strcmp:
5900         if (visitStrCmpCall(I))
5901           return;
5902         break;
5903       case LibFunc::strlen:
5904         if (visitStrLenCall(I))
5905           return;
5906         break;
5907       case LibFunc::strnlen:
5908         if (visitStrNLenCall(I))
5909           return;
5910         break;
5911       }
5912     }
5913   }
5914
5915   SDValue Callee;
5916   if (!RenameFn)
5917     Callee = getValue(I.getCalledValue());
5918   else
5919     Callee = DAG.getExternalSymbol(
5920         RenameFn,
5921         DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout()));
5922
5923   // Check if we can potentially perform a tail call. More detailed checking is
5924   // be done within LowerCallTo, after more information about the call is known.
5925   LowerCallTo(&I, Callee, I.isTailCall());
5926 }
5927
5928 namespace {
5929
5930 /// AsmOperandInfo - This contains information for each constraint that we are
5931 /// lowering.
5932 class SDISelAsmOperandInfo : public TargetLowering::AsmOperandInfo {
5933 public:
5934   /// CallOperand - If this is the result output operand or a clobber
5935   /// this is null, otherwise it is the incoming operand to the CallInst.
5936   /// This gets modified as the asm is processed.
5937   SDValue CallOperand;
5938
5939   /// AssignedRegs - If this is a register or register class operand, this
5940   /// contains the set of register corresponding to the operand.
5941   RegsForValue AssignedRegs;
5942
5943   explicit SDISelAsmOperandInfo(const TargetLowering::AsmOperandInfo &info)
5944     : TargetLowering::AsmOperandInfo(info), CallOperand(nullptr,0) {
5945   }
5946
5947   /// getCallOperandValEVT - Return the EVT of the Value* that this operand
5948   /// corresponds to.  If there is no Value* for this operand, it returns
5949   /// MVT::Other.
5950   EVT getCallOperandValEVT(LLVMContext &Context, const TargetLowering &TLI,
5951                            const DataLayout &DL) const {
5952     if (!CallOperandVal) return MVT::Other;
5953
5954     if (isa<BasicBlock>(CallOperandVal))
5955       return TLI.getPointerTy(DL);
5956
5957     llvm::Type *OpTy = CallOperandVal->getType();
5958
5959     // FIXME: code duplicated from TargetLowering::ParseConstraints().
5960     // If this is an indirect operand, the operand is a pointer to the
5961     // accessed type.
5962     if (isIndirect) {
5963       llvm::PointerType *PtrTy = dyn_cast<PointerType>(OpTy);
5964       if (!PtrTy)
5965         report_fatal_error("Indirect operand for inline asm not a pointer!");
5966       OpTy = PtrTy->getElementType();
5967     }
5968
5969     // Look for vector wrapped in a struct. e.g. { <16 x i8> }.
5970     if (StructType *STy = dyn_cast<StructType>(OpTy))
5971       if (STy->getNumElements() == 1)
5972         OpTy = STy->getElementType(0);
5973
5974     // If OpTy is not a single value, it may be a struct/union that we
5975     // can tile with integers.
5976     if (!OpTy->isSingleValueType() && OpTy->isSized()) {
5977       unsigned BitSize = DL.getTypeSizeInBits(OpTy);
5978       switch (BitSize) {
5979       default: break;
5980       case 1:
5981       case 8:
5982       case 16:
5983       case 32:
5984       case 64:
5985       case 128:
5986         OpTy = IntegerType::get(Context, BitSize);
5987         break;
5988       }
5989     }
5990
5991     return TLI.getValueType(DL, OpTy, true);
5992   }
5993 };
5994
5995 typedef SmallVector<SDISelAsmOperandInfo,16> SDISelAsmOperandInfoVector;
5996
5997 } // end anonymous namespace
5998
5999 /// GetRegistersForValue - Assign registers (virtual or physical) for the
6000 /// specified operand.  We prefer to assign virtual registers, to allow the
6001 /// register allocator to handle the assignment process.  However, if the asm
6002 /// uses features that we can't model on machineinstrs, we have SDISel do the
6003 /// allocation.  This produces generally horrible, but correct, code.
6004 ///
6005 ///   OpInfo describes the operand.
6006 ///
6007 static void GetRegistersForValue(SelectionDAG &DAG,
6008                                  const TargetLowering &TLI,
6009                                  SDLoc DL,
6010                                  SDISelAsmOperandInfo &OpInfo) {
6011   LLVMContext &Context = *DAG.getContext();
6012
6013   MachineFunction &MF = DAG.getMachineFunction();
6014   SmallVector<unsigned, 4> Regs;
6015
6016   // If this is a constraint for a single physreg, or a constraint for a
6017   // register class, find it.
6018   std::pair<unsigned, const TargetRegisterClass *> PhysReg =
6019       TLI.getRegForInlineAsmConstraint(MF.getSubtarget().getRegisterInfo(),
6020                                        OpInfo.ConstraintCode,
6021                                        OpInfo.ConstraintVT);
6022
6023   unsigned NumRegs = 1;
6024   if (OpInfo.ConstraintVT != MVT::Other) {
6025     // If this is a FP input in an integer register (or visa versa) insert a bit
6026     // cast of the input value.  More generally, handle any case where the input
6027     // value disagrees with the register class we plan to stick this in.
6028     if (OpInfo.Type == InlineAsm::isInput &&
6029         PhysReg.second && !PhysReg.second->hasType(OpInfo.ConstraintVT)) {
6030       // Try to convert to the first EVT that the reg class contains.  If the
6031       // types are identical size, use a bitcast to convert (e.g. two differing
6032       // vector types).
6033       MVT RegVT = *PhysReg.second->vt_begin();
6034       if (RegVT.getSizeInBits() == OpInfo.CallOperand.getValueSizeInBits()) {
6035         OpInfo.CallOperand = DAG.getNode(ISD::BITCAST, DL,
6036                                          RegVT, OpInfo.CallOperand);
6037         OpInfo.ConstraintVT = RegVT;
6038       } else if (RegVT.isInteger() && OpInfo.ConstraintVT.isFloatingPoint()) {
6039         // If the input is a FP value and we want it in FP registers, do a
6040         // bitcast to the corresponding integer type.  This turns an f64 value
6041         // into i64, which can be passed with two i32 values on a 32-bit
6042         // machine.
6043         RegVT = MVT::getIntegerVT(OpInfo.ConstraintVT.getSizeInBits());
6044         OpInfo.CallOperand = DAG.getNode(ISD::BITCAST, DL,
6045                                          RegVT, OpInfo.CallOperand);
6046         OpInfo.ConstraintVT = RegVT;
6047       }
6048     }
6049
6050     NumRegs = TLI.getNumRegisters(Context, OpInfo.ConstraintVT);
6051   }
6052
6053   MVT RegVT;
6054   EVT ValueVT = OpInfo.ConstraintVT;
6055
6056   // If this is a constraint for a specific physical register, like {r17},
6057   // assign it now.
6058   if (unsigned AssignedReg = PhysReg.first) {
6059     const TargetRegisterClass *RC = PhysReg.second;
6060     if (OpInfo.ConstraintVT == MVT::Other)
6061       ValueVT = *RC->vt_begin();
6062
6063     // Get the actual register value type.  This is important, because the user
6064     // may have asked for (e.g.) the AX register in i32 type.  We need to
6065     // remember that AX is actually i16 to get the right extension.
6066     RegVT = *RC->vt_begin();
6067
6068     // This is a explicit reference to a physical register.
6069     Regs.push_back(AssignedReg);
6070
6071     // If this is an expanded reference, add the rest of the regs to Regs.
6072     if (NumRegs != 1) {
6073       TargetRegisterClass::iterator I = RC->begin();
6074       for (; *I != AssignedReg; ++I)
6075         assert(I != RC->end() && "Didn't find reg!");
6076
6077       // Already added the first reg.
6078       --NumRegs; ++I;
6079       for (; NumRegs; --NumRegs, ++I) {
6080         assert(I != RC->end() && "Ran out of registers to allocate!");
6081         Regs.push_back(*I);
6082       }
6083     }
6084
6085     OpInfo.AssignedRegs = RegsForValue(Regs, RegVT, ValueVT);
6086     return;
6087   }
6088
6089   // Otherwise, if this was a reference to an LLVM register class, create vregs
6090   // for this reference.
6091   if (const TargetRegisterClass *RC = PhysReg.second) {
6092     RegVT = *RC->vt_begin();
6093     if (OpInfo.ConstraintVT == MVT::Other)
6094       ValueVT = RegVT;
6095
6096     // Create the appropriate number of virtual registers.
6097     MachineRegisterInfo &RegInfo = MF.getRegInfo();
6098     for (; NumRegs; --NumRegs)
6099       Regs.push_back(RegInfo.createVirtualRegister(RC));
6100
6101     OpInfo.AssignedRegs = RegsForValue(Regs, RegVT, ValueVT);
6102     return;
6103   }
6104
6105   // Otherwise, we couldn't allocate enough registers for this.
6106 }
6107
6108 /// visitInlineAsm - Handle a call to an InlineAsm object.
6109 ///
6110 void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) {
6111   const InlineAsm *IA = cast<InlineAsm>(CS.getCalledValue());
6112
6113   /// ConstraintOperands - Information about all of the constraints.
6114   SDISelAsmOperandInfoVector ConstraintOperands;
6115
6116   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
6117   TargetLowering::AsmOperandInfoVector TargetConstraints = TLI.ParseConstraints(
6118       DAG.getDataLayout(), DAG.getSubtarget().getRegisterInfo(), CS);
6119
6120   bool hasMemory = false;
6121
6122   unsigned ArgNo = 0;   // ArgNo - The argument of the CallInst.
6123   unsigned ResNo = 0;   // ResNo - The result number of the next output.
6124   for (unsigned i = 0, e = TargetConstraints.size(); i != e; ++i) {
6125     ConstraintOperands.push_back(SDISelAsmOperandInfo(TargetConstraints[i]));
6126     SDISelAsmOperandInfo &OpInfo = ConstraintOperands.back();
6127
6128     MVT OpVT = MVT::Other;
6129
6130     // Compute the value type for each operand.
6131     switch (OpInfo.Type) {
6132     case InlineAsm::isOutput:
6133       // Indirect outputs just consume an argument.
6134       if (OpInfo.isIndirect) {
6135         OpInfo.CallOperandVal = const_cast<Value *>(CS.getArgument(ArgNo++));
6136         break;
6137       }
6138
6139       // The return value of the call is this value.  As such, there is no
6140       // corresponding argument.
6141       assert(!CS.getType()->isVoidTy() && "Bad inline asm!");
6142       if (StructType *STy = dyn_cast<StructType>(CS.getType())) {
6143         OpVT = TLI.getSimpleValueType(DAG.getDataLayout(),
6144                                       STy->getElementType(ResNo));
6145       } else {
6146         assert(ResNo == 0 && "Asm only has one result!");
6147         OpVT = TLI.getSimpleValueType(DAG.getDataLayout(), CS.getType());
6148       }
6149       ++ResNo;
6150       break;
6151     case InlineAsm::isInput:
6152       OpInfo.CallOperandVal = const_cast<Value *>(CS.getArgument(ArgNo++));
6153       break;
6154     case InlineAsm::isClobber:
6155       // Nothing to do.
6156       break;
6157     }
6158
6159     // If this is an input or an indirect output, process the call argument.
6160     // BasicBlocks are labels, currently appearing only in asm's.
6161     if (OpInfo.CallOperandVal) {
6162       if (const BasicBlock *BB = dyn_cast<BasicBlock>(OpInfo.CallOperandVal)) {
6163         OpInfo.CallOperand = DAG.getBasicBlock(FuncInfo.MBBMap[BB]);
6164       } else {
6165         OpInfo.CallOperand = getValue(OpInfo.CallOperandVal);
6166       }
6167
6168       OpVT = OpInfo.getCallOperandValEVT(*DAG.getContext(), TLI,
6169                                          DAG.getDataLayout()).getSimpleVT();
6170     }
6171
6172     OpInfo.ConstraintVT = OpVT;
6173
6174     // Indirect operand accesses access memory.
6175     if (OpInfo.isIndirect)
6176       hasMemory = true;
6177     else {
6178       for (unsigned j = 0, ee = OpInfo.Codes.size(); j != ee; ++j) {
6179         TargetLowering::ConstraintType
6180           CType = TLI.getConstraintType(OpInfo.Codes[j]);
6181         if (CType == TargetLowering::C_Memory) {
6182           hasMemory = true;
6183           break;
6184         }
6185       }
6186     }
6187   }
6188
6189   SDValue Chain, Flag;
6190
6191   // We won't need to flush pending loads if this asm doesn't touch
6192   // memory and is nonvolatile.
6193   if (hasMemory || IA->hasSideEffects())
6194     Chain = getRoot();
6195   else
6196     Chain = DAG.getRoot();
6197
6198   // Second pass over the constraints: compute which constraint option to use
6199   // and assign registers to constraints that want a specific physreg.
6200   for (unsigned i = 0, e = ConstraintOperands.size(); i != e; ++i) {
6201     SDISelAsmOperandInfo &OpInfo = ConstraintOperands[i];
6202
6203     // If this is an output operand with a matching input operand, look up the
6204     // matching input. If their types mismatch, e.g. one is an integer, the
6205     // other is floating point, or their sizes are different, flag it as an
6206     // error.
6207     if (OpInfo.hasMatchingInput()) {
6208       SDISelAsmOperandInfo &Input = ConstraintOperands[OpInfo.MatchingInput];
6209
6210       if (OpInfo.ConstraintVT != Input.ConstraintVT) {
6211         const TargetRegisterInfo *TRI = DAG.getSubtarget().getRegisterInfo();
6212         std::pair<unsigned, const TargetRegisterClass *> MatchRC =
6213             TLI.getRegForInlineAsmConstraint(TRI, OpInfo.ConstraintCode,
6214                                              OpInfo.ConstraintVT);
6215         std::pair<unsigned, const TargetRegisterClass *> InputRC =
6216             TLI.getRegForInlineAsmConstraint(TRI, Input.ConstraintCode,
6217                                              Input.ConstraintVT);
6218         if ((OpInfo.ConstraintVT.isInteger() !=
6219              Input.ConstraintVT.isInteger()) ||
6220             (MatchRC.second != InputRC.second)) {
6221           report_fatal_error("Unsupported asm: input constraint"
6222                              " with a matching output constraint of"
6223                              " incompatible type!");
6224         }
6225         Input.ConstraintVT = OpInfo.ConstraintVT;
6226       }
6227     }
6228
6229     // Compute the constraint code and ConstraintType to use.
6230     TLI.ComputeConstraintToUse(OpInfo, OpInfo.CallOperand, &DAG);
6231
6232     if (OpInfo.ConstraintType == TargetLowering::C_Memory &&
6233         OpInfo.Type == InlineAsm::isClobber)
6234       continue;
6235
6236     // If this is a memory input, and if the operand is not indirect, do what we
6237     // need to to provide an address for the memory input.
6238     if (OpInfo.ConstraintType == TargetLowering::C_Memory &&
6239         !OpInfo.isIndirect) {
6240       assert((OpInfo.isMultipleAlternative ||
6241               (OpInfo.Type == InlineAsm::isInput)) &&
6242              "Can only indirectify direct input operands!");
6243
6244       // Memory operands really want the address of the value.  If we don't have
6245       // an indirect input, put it in the constpool if we can, otherwise spill
6246       // it to a stack slot.
6247       // TODO: This isn't quite right. We need to handle these according to
6248       // the addressing mode that the constraint wants. Also, this may take
6249       // an additional register for the computation and we don't want that
6250       // either.
6251
6252       // If the operand is a float, integer, or vector constant, spill to a
6253       // constant pool entry to get its address.
6254       const Value *OpVal = OpInfo.CallOperandVal;
6255       if (isa<ConstantFP>(OpVal) || isa<ConstantInt>(OpVal) ||
6256           isa<ConstantVector>(OpVal) || isa<ConstantDataVector>(OpVal)) {
6257         OpInfo.CallOperand = DAG.getConstantPool(
6258             cast<Constant>(OpVal), TLI.getPointerTy(DAG.getDataLayout()));
6259       } else {
6260         // Otherwise, create a stack slot and emit a store to it before the
6261         // asm.
6262         Type *Ty = OpVal->getType();
6263         auto &DL = DAG.getDataLayout();
6264         uint64_t TySize = DL.getTypeAllocSize(Ty);
6265         unsigned Align = DL.getPrefTypeAlignment(Ty);
6266         MachineFunction &MF = DAG.getMachineFunction();
6267         int SSFI = MF.getFrameInfo()->CreateStackObject(TySize, Align, false);
6268         SDValue StackSlot =
6269             DAG.getFrameIndex(SSFI, TLI.getPointerTy(DAG.getDataLayout()));
6270         Chain = DAG.getStore(
6271             Chain, getCurSDLoc(), OpInfo.CallOperand, StackSlot,
6272             MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SSFI),
6273             false, false, 0);
6274         OpInfo.CallOperand = StackSlot;
6275       }
6276
6277       // There is no longer a Value* corresponding to this operand.
6278       OpInfo.CallOperandVal = nullptr;
6279
6280       // It is now an indirect operand.
6281       OpInfo.isIndirect = true;
6282     }
6283
6284     // If this constraint is for a specific register, allocate it before
6285     // anything else.
6286     if (OpInfo.ConstraintType == TargetLowering::C_Register)
6287       GetRegistersForValue(DAG, TLI, getCurSDLoc(), OpInfo);
6288   }
6289
6290   // Second pass - Loop over all of the operands, assigning virtual or physregs
6291   // to register class operands.
6292   for (unsigned i = 0, e = ConstraintOperands.size(); i != e; ++i) {
6293     SDISelAsmOperandInfo &OpInfo = ConstraintOperands[i];
6294
6295     // C_Register operands have already been allocated, Other/Memory don't need
6296     // to be.
6297     if (OpInfo.ConstraintType == TargetLowering::C_RegisterClass)
6298       GetRegistersForValue(DAG, TLI, getCurSDLoc(), OpInfo);
6299   }
6300
6301   // AsmNodeOperands - The operands for the ISD::INLINEASM node.
6302   std::vector<SDValue> AsmNodeOperands;
6303   AsmNodeOperands.push_back(SDValue());  // reserve space for input chain
6304   AsmNodeOperands.push_back(DAG.getTargetExternalSymbol(
6305       IA->getAsmString().c_str(), TLI.getPointerTy(DAG.getDataLayout())));
6306
6307   // If we have a !srcloc metadata node associated with it, we want to attach
6308   // this to the ultimately generated inline asm machineinstr.  To do this, we
6309   // pass in the third operand as this (potentially null) inline asm MDNode.
6310   const MDNode *SrcLoc = CS.getInstruction()->getMetadata("srcloc");
6311   AsmNodeOperands.push_back(DAG.getMDNode(SrcLoc));
6312
6313   // Remember the HasSideEffect, AlignStack, AsmDialect, MayLoad and MayStore
6314   // bits as operand 3.
6315   unsigned ExtraInfo = 0;
6316   if (IA->hasSideEffects())
6317     ExtraInfo |= InlineAsm::Extra_HasSideEffects;
6318   if (IA->isAlignStack())
6319     ExtraInfo |= InlineAsm::Extra_IsAlignStack;
6320   // Set the asm dialect.
6321   ExtraInfo |= IA->getDialect() * InlineAsm::Extra_AsmDialect;
6322
6323   // Determine if this InlineAsm MayLoad or MayStore based on the constraints.
6324   for (unsigned i = 0, e = TargetConstraints.size(); i != e; ++i) {
6325     TargetLowering::AsmOperandInfo &OpInfo = TargetConstraints[i];
6326
6327     // Compute the constraint code and ConstraintType to use.
6328     TLI.ComputeConstraintToUse(OpInfo, SDValue());
6329
6330     // Ideally, we would only check against memory constraints.  However, the
6331     // meaning of an other constraint can be target-specific and we can't easily
6332     // reason about it.  Therefore, be conservative and set MayLoad/MayStore
6333     // for other constriants as well.
6334     if (OpInfo.ConstraintType == TargetLowering::C_Memory ||
6335         OpInfo.ConstraintType == TargetLowering::C_Other) {
6336       if (OpInfo.Type == InlineAsm::isInput)
6337         ExtraInfo |= InlineAsm::Extra_MayLoad;
6338       else if (OpInfo.Type == InlineAsm::isOutput)
6339         ExtraInfo |= InlineAsm::Extra_MayStore;
6340       else if (OpInfo.Type == InlineAsm::isClobber)
6341         ExtraInfo |= (InlineAsm::Extra_MayLoad | InlineAsm::Extra_MayStore);
6342     }
6343   }
6344
6345   AsmNodeOperands.push_back(DAG.getTargetConstant(
6346       ExtraInfo, getCurSDLoc(), TLI.getPointerTy(DAG.getDataLayout())));
6347
6348   // Loop over all of the inputs, copying the operand values into the
6349   // appropriate registers and processing the output regs.
6350   RegsForValue RetValRegs;
6351
6352   // IndirectStoresToEmit - The set of stores to emit after the inline asm node.
6353   std::vector<std::pair<RegsForValue, Value*> > IndirectStoresToEmit;
6354
6355   for (unsigned i = 0, e = ConstraintOperands.size(); i != e; ++i) {
6356     SDISelAsmOperandInfo &OpInfo = ConstraintOperands[i];
6357
6358     switch (OpInfo.Type) {
6359     case InlineAsm::isOutput: {
6360       if (OpInfo.ConstraintType != TargetLowering::C_RegisterClass &&
6361           OpInfo.ConstraintType != TargetLowering::C_Register) {
6362         // Memory output, or 'other' output (e.g. 'X' constraint).
6363         assert(OpInfo.isIndirect && "Memory output must be indirect operand");
6364
6365         unsigned ConstraintID =
6366             TLI.getInlineAsmMemConstraint(OpInfo.ConstraintCode);
6367         assert(ConstraintID != InlineAsm::Constraint_Unknown &&
6368                "Failed to convert memory constraint code to constraint id.");
6369
6370         // Add information to the INLINEASM node to know about this output.
6371         unsigned OpFlags = InlineAsm::getFlagWord(InlineAsm::Kind_Mem, 1);
6372         OpFlags = InlineAsm::getFlagWordForMem(OpFlags, ConstraintID);
6373         AsmNodeOperands.push_back(DAG.getTargetConstant(OpFlags, getCurSDLoc(),
6374                                                         MVT::i32));
6375         AsmNodeOperands.push_back(OpInfo.CallOperand);
6376         break;
6377       }
6378
6379       // Otherwise, this is a register or register class output.
6380
6381       // Copy the output from the appropriate register.  Find a register that
6382       // we can use.
6383       if (OpInfo.AssignedRegs.Regs.empty()) {
6384         LLVMContext &Ctx = *DAG.getContext();
6385         Ctx.emitError(CS.getInstruction(),
6386                       "couldn't allocate output register for constraint '" +
6387                           Twine(OpInfo.ConstraintCode) + "'");
6388         return;
6389       }
6390
6391       // If this is an indirect operand, store through the pointer after the
6392       // asm.
6393       if (OpInfo.isIndirect) {
6394         IndirectStoresToEmit.push_back(std::make_pair(OpInfo.AssignedRegs,
6395                                                       OpInfo.CallOperandVal));
6396       } else {
6397         // This is the result value of the call.
6398         assert(!CS.getType()->isVoidTy() && "Bad inline asm!");
6399         // Concatenate this output onto the outputs list.
6400         RetValRegs.append(OpInfo.AssignedRegs);
6401       }
6402
6403       // Add information to the INLINEASM node to know that this register is
6404       // set.
6405       OpInfo.AssignedRegs
6406           .AddInlineAsmOperands(OpInfo.isEarlyClobber
6407                                     ? InlineAsm::Kind_RegDefEarlyClobber
6408                                     : InlineAsm::Kind_RegDef,
6409                                 false, 0, getCurSDLoc(), DAG, AsmNodeOperands);
6410       break;
6411     }
6412     case InlineAsm::isInput: {
6413       SDValue InOperandVal = OpInfo.CallOperand;
6414
6415       if (OpInfo.isMatchingInputConstraint()) {   // Matching constraint?
6416         // If this is required to match an output register we have already set,
6417         // just use its register.
6418         unsigned OperandNo = OpInfo.getMatchedOperand();
6419
6420         // Scan until we find the definition we already emitted of this operand.
6421         // When we find it, create a RegsForValue operand.
6422         unsigned CurOp = InlineAsm::Op_FirstOperand;
6423         for (; OperandNo; --OperandNo) {
6424           // Advance to the next operand.
6425           unsigned OpFlag =
6426             cast<ConstantSDNode>(AsmNodeOperands[CurOp])->getZExtValue();
6427           assert((InlineAsm::isRegDefKind(OpFlag) ||
6428                   InlineAsm::isRegDefEarlyClobberKind(OpFlag) ||
6429                   InlineAsm::isMemKind(OpFlag)) && "Skipped past definitions?");
6430           CurOp += InlineAsm::getNumOperandRegisters(OpFlag)+1;
6431         }
6432
6433         unsigned OpFlag =
6434           cast<ConstantSDNode>(AsmNodeOperands[CurOp])->getZExtValue();
6435         if (InlineAsm::isRegDefKind(OpFlag) ||
6436             InlineAsm::isRegDefEarlyClobberKind(OpFlag)) {
6437           // Add (OpFlag&0xffff)>>3 registers to MatchedRegs.
6438           if (OpInfo.isIndirect) {
6439             // This happens on gcc/testsuite/gcc.dg/pr8788-1.c
6440             LLVMContext &Ctx = *DAG.getContext();
6441             Ctx.emitError(CS.getInstruction(), "inline asm not supported yet:"
6442                                                " don't know how to handle tied "
6443                                                "indirect register inputs");
6444             return;
6445           }
6446
6447           RegsForValue MatchedRegs;
6448           MatchedRegs.ValueVTs.push_back(InOperandVal.getValueType());
6449           MVT RegVT = AsmNodeOperands[CurOp+1].getSimpleValueType();
6450           MatchedRegs.RegVTs.push_back(RegVT);
6451           MachineRegisterInfo &RegInfo = DAG.getMachineFunction().getRegInfo();
6452           for (unsigned i = 0, e = InlineAsm::getNumOperandRegisters(OpFlag);
6453                i != e; ++i) {
6454             if (const TargetRegisterClass *RC = TLI.getRegClassFor(RegVT))
6455               MatchedRegs.Regs.push_back(RegInfo.createVirtualRegister(RC));
6456             else {
6457               LLVMContext &Ctx = *DAG.getContext();
6458               Ctx.emitError(CS.getInstruction(),
6459                             "inline asm error: This value"
6460                             " type register class is not natively supported!");
6461               return;
6462             }
6463           }
6464           SDLoc dl = getCurSDLoc();
6465           // Use the produced MatchedRegs object to
6466           MatchedRegs.getCopyToRegs(InOperandVal, DAG, dl,
6467                                     Chain, &Flag, CS.getInstruction());
6468           MatchedRegs.AddInlineAsmOperands(InlineAsm::Kind_RegUse,
6469                                            true, OpInfo.getMatchedOperand(), dl,
6470                                            DAG, AsmNodeOperands);
6471           break;
6472         }
6473
6474         assert(InlineAsm::isMemKind(OpFlag) && "Unknown matching constraint!");
6475         assert(InlineAsm::getNumOperandRegisters(OpFlag) == 1 &&
6476                "Unexpected number of operands");
6477         // Add information to the INLINEASM node to know about this input.
6478         // See InlineAsm.h isUseOperandTiedToDef.
6479         OpFlag = InlineAsm::convertMemFlagWordToMatchingFlagWord(OpFlag);
6480         OpFlag = InlineAsm::getFlagWordForMatchingOp(OpFlag,
6481                                                     OpInfo.getMatchedOperand());
6482         AsmNodeOperands.push_back(DAG.getTargetConstant(
6483             OpFlag, getCurSDLoc(), TLI.getPointerTy(DAG.getDataLayout())));
6484         AsmNodeOperands.push_back(AsmNodeOperands[CurOp+1]);
6485         break;
6486       }
6487
6488       // Treat indirect 'X' constraint as memory.
6489       if (OpInfo.ConstraintType == TargetLowering::C_Other &&
6490           OpInfo.isIndirect)
6491         OpInfo.ConstraintType = TargetLowering::C_Memory;
6492
6493       if (OpInfo.ConstraintType == TargetLowering::C_Other) {
6494         std::vector<SDValue> Ops;
6495         TLI.LowerAsmOperandForConstraint(InOperandVal, OpInfo.ConstraintCode,
6496                                           Ops, DAG);
6497         if (Ops.empty()) {
6498           LLVMContext &Ctx = *DAG.getContext();
6499           Ctx.emitError(CS.getInstruction(),
6500                         "invalid operand for inline asm constraint '" +
6501                             Twine(OpInfo.ConstraintCode) + "'");
6502           return;
6503         }
6504
6505         // Add information to the INLINEASM node to know about this input.
6506         unsigned ResOpType =
6507           InlineAsm::getFlagWord(InlineAsm::Kind_Imm, Ops.size());
6508         AsmNodeOperands.push_back(DAG.getTargetConstant(
6509             ResOpType, getCurSDLoc(), TLI.getPointerTy(DAG.getDataLayout())));
6510         AsmNodeOperands.insert(AsmNodeOperands.end(), Ops.begin(), Ops.end());
6511         break;
6512       }
6513
6514       if (OpInfo.ConstraintType == TargetLowering::C_Memory) {
6515         assert(OpInfo.isIndirect && "Operand must be indirect to be a mem!");
6516         assert(InOperandVal.getValueType() ==
6517                    TLI.getPointerTy(DAG.getDataLayout()) &&
6518                "Memory operands expect pointer values");
6519
6520         unsigned ConstraintID =
6521             TLI.getInlineAsmMemConstraint(OpInfo.ConstraintCode);
6522         assert(ConstraintID != InlineAsm::Constraint_Unknown &&
6523                "Failed to convert memory constraint code to constraint id.");
6524
6525         // Add information to the INLINEASM node to know about this input.
6526         unsigned ResOpType = InlineAsm::getFlagWord(InlineAsm::Kind_Mem, 1);
6527         ResOpType = InlineAsm::getFlagWordForMem(ResOpType, ConstraintID);
6528         AsmNodeOperands.push_back(DAG.getTargetConstant(ResOpType,
6529                                                         getCurSDLoc(),
6530                                                         MVT::i32));
6531         AsmNodeOperands.push_back(InOperandVal);
6532         break;
6533       }
6534
6535       assert((OpInfo.ConstraintType == TargetLowering::C_RegisterClass ||
6536               OpInfo.ConstraintType == TargetLowering::C_Register) &&
6537              "Unknown constraint type!");
6538
6539       // TODO: Support this.
6540       if (OpInfo.isIndirect) {
6541         LLVMContext &Ctx = *DAG.getContext();
6542         Ctx.emitError(CS.getInstruction(),
6543                       "Don't know how to handle indirect register inputs yet "
6544                       "for constraint '" +
6545                           Twine(OpInfo.ConstraintCode) + "'");
6546         return;
6547       }
6548
6549       // Copy the input into the appropriate registers.
6550       if (OpInfo.AssignedRegs.Regs.empty()) {
6551         LLVMContext &Ctx = *DAG.getContext();
6552         Ctx.emitError(CS.getInstruction(),
6553                       "couldn't allocate input reg for constraint '" +
6554                           Twine(OpInfo.ConstraintCode) + "'");
6555         return;
6556       }
6557
6558       SDLoc dl = getCurSDLoc();
6559
6560       OpInfo.AssignedRegs.getCopyToRegs(InOperandVal, DAG, dl,
6561                                         Chain, &Flag, CS.getInstruction());
6562
6563       OpInfo.AssignedRegs.AddInlineAsmOperands(InlineAsm::Kind_RegUse, false, 0,
6564                                                dl, DAG, AsmNodeOperands);
6565       break;
6566     }
6567     case InlineAsm::isClobber: {
6568       // Add the clobbered value to the operand list, so that the register
6569       // allocator is aware that the physreg got clobbered.
6570       if (!OpInfo.AssignedRegs.Regs.empty())
6571         OpInfo.AssignedRegs.AddInlineAsmOperands(InlineAsm::Kind_Clobber,
6572                                                  false, 0, getCurSDLoc(), DAG,
6573                                                  AsmNodeOperands);
6574       break;
6575     }
6576     }
6577   }
6578
6579   // Finish up input operands.  Set the input chain and add the flag last.
6580   AsmNodeOperands[InlineAsm::Op_InputChain] = Chain;
6581   if (Flag.getNode()) AsmNodeOperands.push_back(Flag);
6582
6583   Chain = DAG.getNode(ISD::INLINEASM, getCurSDLoc(),
6584                       DAG.getVTList(MVT::Other, MVT::Glue), AsmNodeOperands);
6585   Flag = Chain.getValue(1);
6586
6587   // If this asm returns a register value, copy the result from that register
6588   // and set it as the value of the call.
6589   if (!RetValRegs.Regs.empty()) {
6590     SDValue Val = RetValRegs.getCopyFromRegs(DAG, FuncInfo, getCurSDLoc(),
6591                                              Chain, &Flag, CS.getInstruction());
6592
6593     // FIXME: Why don't we do this for inline asms with MRVs?
6594     if (CS.getType()->isSingleValueType() && CS.getType()->isSized()) {
6595       EVT ResultType = TLI.getValueType(DAG.getDataLayout(), CS.getType());
6596
6597       // If any of the results of the inline asm is a vector, it may have the
6598       // wrong width/num elts.  This can happen for register classes that can
6599       // contain multiple different value types.  The preg or vreg allocated may
6600       // not have the same VT as was expected.  Convert it to the right type
6601       // with bit_convert.
6602       if (ResultType != Val.getValueType() && Val.getValueType().isVector()) {
6603         Val = DAG.getNode(ISD::BITCAST, getCurSDLoc(),
6604                           ResultType, Val);
6605
6606       } else if (ResultType != Val.getValueType() &&
6607                  ResultType.isInteger() && Val.getValueType().isInteger()) {
6608         // If a result value was tied to an input value, the computed result may
6609         // have a wider width than the expected result.  Extract the relevant
6610         // portion.
6611         Val = DAG.getNode(ISD::TRUNCATE, getCurSDLoc(), ResultType, Val);
6612       }
6613
6614       assert(ResultType == Val.getValueType() && "Asm result value mismatch!");
6615     }
6616
6617     setValue(CS.getInstruction(), Val);
6618     // Don't need to use this as a chain in this case.
6619     if (!IA->hasSideEffects() && !hasMemory && IndirectStoresToEmit.empty())
6620       return;
6621   }
6622
6623   std::vector<std::pair<SDValue, const Value *> > StoresToEmit;
6624
6625   // Process indirect outputs, first output all of the flagged copies out of
6626   // physregs.
6627   for (unsigned i = 0, e = IndirectStoresToEmit.size(); i != e; ++i) {
6628     RegsForValue &OutRegs = IndirectStoresToEmit[i].first;
6629     const Value *Ptr = IndirectStoresToEmit[i].second;
6630     SDValue OutVal = OutRegs.getCopyFromRegs(DAG, FuncInfo, getCurSDLoc(),
6631                                              Chain, &Flag, IA);
6632     StoresToEmit.push_back(std::make_pair(OutVal, Ptr));
6633   }
6634
6635   // Emit the non-flagged stores from the physregs.
6636   SmallVector<SDValue, 8> OutChains;
6637   for (unsigned i = 0, e = StoresToEmit.size(); i != e; ++i) {
6638     SDValue Val = DAG.getStore(Chain, getCurSDLoc(),
6639                                StoresToEmit[i].first,
6640                                getValue(StoresToEmit[i].second),
6641                                MachinePointerInfo(StoresToEmit[i].second),
6642                                false, false, 0);
6643     OutChains.push_back(Val);
6644   }
6645
6646   if (!OutChains.empty())
6647     Chain = DAG.getNode(ISD::TokenFactor, getCurSDLoc(), MVT::Other, OutChains);
6648
6649   DAG.setRoot(Chain);
6650 }
6651
6652 void SelectionDAGBuilder::visitVAStart(const CallInst &I) {
6653   DAG.setRoot(DAG.getNode(ISD::VASTART, getCurSDLoc(),
6654                           MVT::Other, getRoot(),
6655                           getValue(I.getArgOperand(0)),
6656                           DAG.getSrcValue(I.getArgOperand(0))));
6657 }
6658
6659 void SelectionDAGBuilder::visitVAArg(const VAArgInst &I) {
6660   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
6661   const DataLayout &DL = DAG.getDataLayout();
6662   SDValue V = DAG.getVAArg(TLI.getValueType(DAG.getDataLayout(), I.getType()),
6663                            getCurSDLoc(), getRoot(), getValue(I.getOperand(0)),
6664                            DAG.getSrcValue(I.getOperand(0)),
6665                            DL.getABITypeAlignment(I.getType()));
6666   setValue(&I, V);
6667   DAG.setRoot(V.getValue(1));
6668 }
6669
6670 void SelectionDAGBuilder::visitVAEnd(const CallInst &I) {
6671   DAG.setRoot(DAG.getNode(ISD::VAEND, getCurSDLoc(),
6672                           MVT::Other, getRoot(),
6673                           getValue(I.getArgOperand(0)),
6674                           DAG.getSrcValue(I.getArgOperand(0))));
6675 }
6676
6677 void SelectionDAGBuilder::visitVACopy(const CallInst &I) {
6678   DAG.setRoot(DAG.getNode(ISD::VACOPY, getCurSDLoc(),
6679                           MVT::Other, getRoot(),
6680                           getValue(I.getArgOperand(0)),
6681                           getValue(I.getArgOperand(1)),
6682                           DAG.getSrcValue(I.getArgOperand(0)),
6683                           DAG.getSrcValue(I.getArgOperand(1))));
6684 }
6685
6686 /// \brief Lower an argument list according to the target calling convention.
6687 ///
6688 /// \return A tuple of <return-value, token-chain>
6689 ///
6690 /// This is a helper for lowering intrinsics that follow a target calling
6691 /// convention or require stack pointer adjustment. Only a subset of the
6692 /// intrinsic's operands need to participate in the calling convention.
6693 std::pair<SDValue, SDValue> SelectionDAGBuilder::lowerCallOperands(
6694     ImmutableCallSite CS, unsigned ArgIdx, unsigned NumArgs, SDValue Callee,
6695     Type *ReturnTy, const BasicBlock *EHPadBB, bool IsPatchPoint) {
6696   TargetLowering::ArgListTy Args;
6697   Args.reserve(NumArgs);
6698
6699   // Populate the argument list.
6700   // Attributes for args start at offset 1, after the return attribute.
6701   for (unsigned ArgI = ArgIdx, ArgE = ArgIdx + NumArgs, AttrI = ArgIdx + 1;
6702        ArgI != ArgE; ++ArgI) {
6703     const Value *V = CS->getOperand(ArgI);
6704
6705     assert(!V->getType()->isEmptyTy() && "Empty type passed to intrinsic.");
6706
6707     TargetLowering::ArgListEntry Entry;
6708     Entry.Node = getValue(V);
6709     Entry.Ty = V->getType();
6710     Entry.setAttributes(&CS, AttrI);
6711     Args.push_back(Entry);
6712   }
6713
6714   TargetLowering::CallLoweringInfo CLI(DAG);
6715   CLI.setDebugLoc(getCurSDLoc()).setChain(getRoot())
6716     .setCallee(CS.getCallingConv(), ReturnTy, Callee, std::move(Args), NumArgs)
6717     .setDiscardResult(CS->use_empty()).setIsPatchPoint(IsPatchPoint);
6718
6719   return lowerInvokable(CLI, EHPadBB);
6720 }
6721
6722 /// \brief Add a stack map intrinsic call's live variable operands to a stackmap
6723 /// or patchpoint target node's operand list.
6724 ///
6725 /// Constants are converted to TargetConstants purely as an optimization to
6726 /// avoid constant materialization and register allocation.
6727 ///
6728 /// FrameIndex operands are converted to TargetFrameIndex so that ISEL does not
6729 /// generate addess computation nodes, and so ExpandISelPseudo can convert the
6730 /// TargetFrameIndex into a DirectMemRefOp StackMap location. This avoids
6731 /// address materialization and register allocation, but may also be required
6732 /// for correctness. If a StackMap (or PatchPoint) intrinsic directly uses an
6733 /// alloca in the entry block, then the runtime may assume that the alloca's
6734 /// StackMap location can be read immediately after compilation and that the
6735 /// location is valid at any point during execution (this is similar to the
6736 /// assumption made by the llvm.gcroot intrinsic). If the alloca's location were
6737 /// only available in a register, then the runtime would need to trap when
6738 /// execution reaches the StackMap in order to read the alloca's location.
6739 static void addStackMapLiveVars(ImmutableCallSite CS, unsigned StartIdx,
6740                                 SDLoc DL, SmallVectorImpl<SDValue> &Ops,
6741                                 SelectionDAGBuilder &Builder) {
6742   for (unsigned i = StartIdx, e = CS.arg_size(); i != e; ++i) {
6743     SDValue OpVal = Builder.getValue(CS.getArgument(i));
6744     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(OpVal)) {
6745       Ops.push_back(
6746         Builder.DAG.getTargetConstant(StackMaps::ConstantOp, DL, MVT::i64));
6747       Ops.push_back(
6748         Builder.DAG.getTargetConstant(C->getSExtValue(), DL, MVT::i64));
6749     } else if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(OpVal)) {
6750       const TargetLowering &TLI = Builder.DAG.getTargetLoweringInfo();
6751       Ops.push_back(Builder.DAG.getTargetFrameIndex(
6752           FI->getIndex(), TLI.getPointerTy(Builder.DAG.getDataLayout())));
6753     } else
6754       Ops.push_back(OpVal);
6755   }
6756 }
6757
6758 /// \brief Lower llvm.experimental.stackmap directly to its target opcode.
6759 void SelectionDAGBuilder::visitStackmap(const CallInst &CI) {
6760   // void @llvm.experimental.stackmap(i32 <id>, i32 <numShadowBytes>,
6761   //                                  [live variables...])
6762
6763   assert(CI.getType()->isVoidTy() && "Stackmap cannot return a value.");
6764
6765   SDValue Chain, InFlag, Callee, NullPtr;
6766   SmallVector<SDValue, 32> Ops;
6767
6768   SDLoc DL = getCurSDLoc();
6769   Callee = getValue(CI.getCalledValue());
6770   NullPtr = DAG.getIntPtrConstant(0, DL, true);
6771
6772   // The stackmap intrinsic only records the live variables (the arguemnts
6773   // passed to it) and emits NOPS (if requested). Unlike the patchpoint
6774   // intrinsic, this won't be lowered to a function call. This means we don't
6775   // have to worry about calling conventions and target specific lowering code.
6776   // Instead we perform the call lowering right here.
6777   //
6778   // chain, flag = CALLSEQ_START(chain, 0)
6779   // chain, flag = STACKMAP(id, nbytes, ..., chain, flag)
6780   // chain, flag = CALLSEQ_END(chain, 0, 0, flag)
6781   //
6782   Chain = DAG.getCALLSEQ_START(getRoot(), NullPtr, DL);
6783   InFlag = Chain.getValue(1);
6784
6785   // Add the <id> and <numBytes> constants.
6786   SDValue IDVal = getValue(CI.getOperand(PatchPointOpers::IDPos));
6787   Ops.push_back(DAG.getTargetConstant(
6788                   cast<ConstantSDNode>(IDVal)->getZExtValue(), DL, MVT::i64));
6789   SDValue NBytesVal = getValue(CI.getOperand(PatchPointOpers::NBytesPos));
6790   Ops.push_back(DAG.getTargetConstant(
6791                   cast<ConstantSDNode>(NBytesVal)->getZExtValue(), DL,
6792                   MVT::i32));
6793
6794   // Push live variables for the stack map.
6795   addStackMapLiveVars(&CI, 2, DL, Ops, *this);
6796
6797   // We are not pushing any register mask info here on the operands list,
6798   // because the stackmap doesn't clobber anything.
6799
6800   // Push the chain and the glue flag.
6801   Ops.push_back(Chain);
6802   Ops.push_back(InFlag);
6803
6804   // Create the STACKMAP node.
6805   SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue);
6806   SDNode *SM = DAG.getMachineNode(TargetOpcode::STACKMAP, DL, NodeTys, Ops);
6807   Chain = SDValue(SM, 0);
6808   InFlag = Chain.getValue(1);
6809
6810   Chain = DAG.getCALLSEQ_END(Chain, NullPtr, NullPtr, InFlag, DL);
6811
6812   // Stackmaps don't generate values, so nothing goes into the NodeMap.
6813
6814   // Set the root to the target-lowered call chain.
6815   DAG.setRoot(Chain);
6816
6817   // Inform the Frame Information that we have a stackmap in this function.
6818   FuncInfo.MF->getFrameInfo()->setHasStackMap();
6819 }
6820
6821 /// \brief Lower llvm.experimental.patchpoint directly to its target opcode.
6822 void SelectionDAGBuilder::visitPatchpoint(ImmutableCallSite CS,
6823                                           const BasicBlock *EHPadBB) {
6824   // void|i64 @llvm.experimental.patchpoint.void|i64(i64 <id>,
6825   //                                                 i32 <numBytes>,
6826   //                                                 i8* <target>,
6827   //                                                 i32 <numArgs>,
6828   //                                                 [Args...],
6829   //                                                 [live variables...])
6830
6831   CallingConv::ID CC = CS.getCallingConv();
6832   bool IsAnyRegCC = CC == CallingConv::AnyReg;
6833   bool HasDef = !CS->getType()->isVoidTy();
6834   SDLoc dl = getCurSDLoc();
6835   SDValue Callee = getValue(CS->getOperand(PatchPointOpers::TargetPos));
6836
6837   // Handle immediate and symbolic callees.
6838   if (auto* ConstCallee = dyn_cast<ConstantSDNode>(Callee))
6839     Callee = DAG.getIntPtrConstant(ConstCallee->getZExtValue(), dl,
6840                                    /*isTarget=*/true);
6841   else if (auto* SymbolicCallee = dyn_cast<GlobalAddressSDNode>(Callee))
6842     Callee =  DAG.getTargetGlobalAddress(SymbolicCallee->getGlobal(),
6843                                          SDLoc(SymbolicCallee),
6844                                          SymbolicCallee->getValueType(0));
6845
6846   // Get the real number of arguments participating in the call <numArgs>
6847   SDValue NArgVal = getValue(CS.getArgument(PatchPointOpers::NArgPos));
6848   unsigned NumArgs = cast<ConstantSDNode>(NArgVal)->getZExtValue();
6849
6850   // Skip the four meta args: <id>, <numNopBytes>, <target>, <numArgs>
6851   // Intrinsics include all meta-operands up to but not including CC.
6852   unsigned NumMetaOpers = PatchPointOpers::CCPos;
6853   assert(CS.arg_size() >= NumMetaOpers + NumArgs &&
6854          "Not enough arguments provided to the patchpoint intrinsic");
6855
6856   // For AnyRegCC the arguments are lowered later on manually.
6857   unsigned NumCallArgs = IsAnyRegCC ? 0 : NumArgs;
6858   Type *ReturnTy =
6859     IsAnyRegCC ? Type::getVoidTy(*DAG.getContext()) : CS->getType();
6860   std::pair<SDValue, SDValue> Result = lowerCallOperands(
6861       CS, NumMetaOpers, NumCallArgs, Callee, ReturnTy, EHPadBB, true);
6862
6863   SDNode *CallEnd = Result.second.getNode();
6864   if (HasDef && (CallEnd->getOpcode() == ISD::CopyFromReg))
6865     CallEnd = CallEnd->getOperand(0).getNode();
6866
6867   /// Get a call instruction from the call sequence chain.
6868   /// Tail calls are not allowed.
6869   assert(CallEnd->getOpcode() == ISD::CALLSEQ_END &&
6870          "Expected a callseq node.");
6871   SDNode *Call = CallEnd->getOperand(0).getNode();
6872   bool HasGlue = Call->getGluedNode();
6873
6874   // Replace the target specific call node with the patchable intrinsic.
6875   SmallVector<SDValue, 8> Ops;
6876
6877   // Add the <id> and <numBytes> constants.
6878   SDValue IDVal = getValue(CS->getOperand(PatchPointOpers::IDPos));
6879   Ops.push_back(DAG.getTargetConstant(
6880                   cast<ConstantSDNode>(IDVal)->getZExtValue(), dl, MVT::i64));
6881   SDValue NBytesVal = getValue(CS->getOperand(PatchPointOpers::NBytesPos));
6882   Ops.push_back(DAG.getTargetConstant(
6883                   cast<ConstantSDNode>(NBytesVal)->getZExtValue(), dl,
6884                   MVT::i32));
6885
6886   // Add the callee.
6887   Ops.push_back(Callee);
6888
6889   // Adjust <numArgs> to account for any arguments that have been passed on the
6890   // stack instead.
6891   // Call Node: Chain, Target, {Args}, RegMask, [Glue]
6892   unsigned NumCallRegArgs = Call->getNumOperands() - (HasGlue ? 4 : 3);
6893   NumCallRegArgs = IsAnyRegCC ? NumArgs : NumCallRegArgs;
6894   Ops.push_back(DAG.getTargetConstant(NumCallRegArgs, dl, MVT::i32));
6895
6896   // Add the calling convention
6897   Ops.push_back(DAG.getTargetConstant((unsigned)CC, dl, MVT::i32));
6898
6899   // Add the arguments we omitted previously. The register allocator should
6900   // place these in any free register.
6901   if (IsAnyRegCC)
6902     for (unsigned i = NumMetaOpers, e = NumMetaOpers + NumArgs; i != e; ++i)
6903       Ops.push_back(getValue(CS.getArgument(i)));
6904
6905   // Push the arguments from the call instruction up to the register mask.
6906   SDNode::op_iterator e = HasGlue ? Call->op_end()-2 : Call->op_end()-1;
6907   Ops.append(Call->op_begin() + 2, e);
6908
6909   // Push live variables for the stack map.
6910   addStackMapLiveVars(CS, NumMetaOpers + NumArgs, dl, Ops, *this);
6911
6912   // Push the register mask info.
6913   if (HasGlue)
6914     Ops.push_back(*(Call->op_end()-2));
6915   else
6916     Ops.push_back(*(Call->op_end()-1));
6917
6918   // Push the chain (this is originally the first operand of the call, but
6919   // becomes now the last or second to last operand).
6920   Ops.push_back(*(Call->op_begin()));
6921
6922   // Push the glue flag (last operand).
6923   if (HasGlue)
6924     Ops.push_back(*(Call->op_end()-1));
6925
6926   SDVTList NodeTys;
6927   if (IsAnyRegCC && HasDef) {
6928     // Create the return types based on the intrinsic definition
6929     const TargetLowering &TLI = DAG.getTargetLoweringInfo();
6930     SmallVector<EVT, 3> ValueVTs;
6931     ComputeValueVTs(TLI, DAG.getDataLayout(), CS->getType(), ValueVTs);
6932     assert(ValueVTs.size() == 1 && "Expected only one return value type.");
6933
6934     // There is always a chain and a glue type at the end
6935     ValueVTs.push_back(MVT::Other);
6936     ValueVTs.push_back(MVT::Glue);
6937     NodeTys = DAG.getVTList(ValueVTs);
6938   } else
6939     NodeTys = DAG.getVTList(MVT::Other, MVT::Glue);
6940
6941   // Replace the target specific call node with a PATCHPOINT node.
6942   MachineSDNode *MN = DAG.getMachineNode(TargetOpcode::PATCHPOINT,
6943                                          dl, NodeTys, Ops);
6944
6945   // Update the NodeMap.
6946   if (HasDef) {
6947     if (IsAnyRegCC)
6948       setValue(CS.getInstruction(), SDValue(MN, 0));
6949     else
6950       setValue(CS.getInstruction(), Result.first);
6951   }
6952
6953   // Fixup the consumers of the intrinsic. The chain and glue may be used in the
6954   // call sequence. Furthermore the location of the chain and glue can change
6955   // when the AnyReg calling convention is used and the intrinsic returns a
6956   // value.
6957   if (IsAnyRegCC && HasDef) {
6958     SDValue From[] = {SDValue(Call, 0), SDValue(Call, 1)};
6959     SDValue To[] = {SDValue(MN, 1), SDValue(MN, 2)};
6960     DAG.ReplaceAllUsesOfValuesWith(From, To, 2);
6961   } else
6962     DAG.ReplaceAllUsesWith(Call, MN);
6963   DAG.DeleteNode(Call);
6964
6965   // Inform the Frame Information that we have a patchpoint in this function.
6966   FuncInfo.MF->getFrameInfo()->setHasPatchPoint();
6967 }
6968
6969 /// Returns an AttributeSet representing the attributes applied to the return
6970 /// value of the given call.
6971 static AttributeSet getReturnAttrs(TargetLowering::CallLoweringInfo &CLI) {
6972   SmallVector<Attribute::AttrKind, 2> Attrs;
6973   if (CLI.RetSExt)
6974     Attrs.push_back(Attribute::SExt);
6975   if (CLI.RetZExt)
6976     Attrs.push_back(Attribute::ZExt);
6977   if (CLI.IsInReg)
6978     Attrs.push_back(Attribute::InReg);
6979
6980   return AttributeSet::get(CLI.RetTy->getContext(), AttributeSet::ReturnIndex,
6981                            Attrs);
6982 }
6983
6984 /// TargetLowering::LowerCallTo - This is the default LowerCallTo
6985 /// implementation, which just calls LowerCall.
6986 /// FIXME: When all targets are
6987 /// migrated to using LowerCall, this hook should be integrated into SDISel.
6988 std::pair<SDValue, SDValue>
6989 TargetLowering::LowerCallTo(TargetLowering::CallLoweringInfo &CLI) const {
6990   // Handle the incoming return values from the call.
6991   CLI.Ins.clear();
6992   Type *OrigRetTy = CLI.RetTy;
6993   SmallVector<EVT, 4> RetTys;
6994   SmallVector<uint64_t, 4> Offsets;
6995   auto &DL = CLI.DAG.getDataLayout();
6996   ComputeValueVTs(*this, DL, CLI.RetTy, RetTys, &Offsets);
6997
6998   SmallVector<ISD::OutputArg, 4> Outs;
6999   GetReturnInfo(CLI.RetTy, getReturnAttrs(CLI), Outs, *this, DL);
7000
7001   bool CanLowerReturn =
7002       this->CanLowerReturn(CLI.CallConv, CLI.DAG.getMachineFunction(),
7003                            CLI.IsVarArg, Outs, CLI.RetTy->getContext());
7004
7005   SDValue DemoteStackSlot;
7006   int DemoteStackIdx = -100;
7007   if (!CanLowerReturn) {
7008     // FIXME: equivalent assert?
7009     // assert(!CS.hasInAllocaArgument() &&
7010     //        "sret demotion is incompatible with inalloca");
7011     uint64_t TySize = DL.getTypeAllocSize(CLI.RetTy);
7012     unsigned Align = DL.getPrefTypeAlignment(CLI.RetTy);
7013     MachineFunction &MF = CLI.DAG.getMachineFunction();
7014     DemoteStackIdx = MF.getFrameInfo()->CreateStackObject(TySize, Align, false);
7015     Type *StackSlotPtrType = PointerType::getUnqual(CLI.RetTy);
7016
7017     DemoteStackSlot = CLI.DAG.getFrameIndex(DemoteStackIdx, getPointerTy(DL));
7018     ArgListEntry Entry;
7019     Entry.Node = DemoteStackSlot;
7020     Entry.Ty = StackSlotPtrType;
7021     Entry.isSExt = false;
7022     Entry.isZExt = false;
7023     Entry.isInReg = false;
7024     Entry.isSRet = true;
7025     Entry.isNest = false;
7026     Entry.isByVal = false;
7027     Entry.isReturned = false;
7028     Entry.Alignment = Align;
7029     CLI.getArgs().insert(CLI.getArgs().begin(), Entry);
7030     CLI.RetTy = Type::getVoidTy(CLI.RetTy->getContext());
7031
7032     // sret demotion isn't compatible with tail-calls, since the sret argument
7033     // points into the callers stack frame.
7034     CLI.IsTailCall = false;
7035   } else {
7036     for (unsigned I = 0, E = RetTys.size(); I != E; ++I) {
7037       EVT VT = RetTys[I];
7038       MVT RegisterVT = getRegisterType(CLI.RetTy->getContext(), VT);
7039       unsigned NumRegs = getNumRegisters(CLI.RetTy->getContext(), VT);
7040       for (unsigned i = 0; i != NumRegs; ++i) {
7041         ISD::InputArg MyFlags;
7042         MyFlags.VT = RegisterVT;
7043         MyFlags.ArgVT = VT;
7044         MyFlags.Used = CLI.IsReturnValueUsed;
7045         if (CLI.RetSExt)
7046           MyFlags.Flags.setSExt();
7047         if (CLI.RetZExt)
7048           MyFlags.Flags.setZExt();
7049         if (CLI.IsInReg)
7050           MyFlags.Flags.setInReg();
7051         CLI.Ins.push_back(MyFlags);
7052       }
7053     }
7054   }
7055
7056   // Handle all of the outgoing arguments.
7057   CLI.Outs.clear();
7058   CLI.OutVals.clear();
7059   ArgListTy &Args = CLI.getArgs();
7060   for (unsigned i = 0, e = Args.size(); i != e; ++i) {
7061     SmallVector<EVT, 4> ValueVTs;
7062     ComputeValueVTs(*this, DL, Args[i].Ty, ValueVTs);
7063     Type *FinalType = Args[i].Ty;
7064     if (Args[i].isByVal)
7065       FinalType = cast<PointerType>(Args[i].Ty)->getElementType();
7066     bool NeedsRegBlock = functionArgumentNeedsConsecutiveRegisters(
7067         FinalType, CLI.CallConv, CLI.IsVarArg);
7068     for (unsigned Value = 0, NumValues = ValueVTs.size(); Value != NumValues;
7069          ++Value) {
7070       EVT VT = ValueVTs[Value];
7071       Type *ArgTy = VT.getTypeForEVT(CLI.RetTy->getContext());
7072       SDValue Op = SDValue(Args[i].Node.getNode(),
7073                            Args[i].Node.getResNo() + Value);
7074       ISD::ArgFlagsTy Flags;
7075       unsigned OriginalAlignment = DL.getABITypeAlignment(ArgTy);
7076
7077       if (Args[i].isZExt)
7078         Flags.setZExt();
7079       if (Args[i].isSExt)
7080         Flags.setSExt();
7081       if (Args[i].isInReg)
7082         Flags.setInReg();
7083       if (Args[i].isSRet)
7084         Flags.setSRet();
7085       if (Args[i].isByVal)
7086         Flags.setByVal();
7087       if (Args[i].isInAlloca) {
7088         Flags.setInAlloca();
7089         // Set the byval flag for CCAssignFn callbacks that don't know about
7090         // inalloca.  This way we can know how many bytes we should've allocated
7091         // and how many bytes a callee cleanup function will pop.  If we port
7092         // inalloca to more targets, we'll have to add custom inalloca handling
7093         // in the various CC lowering callbacks.
7094         Flags.setByVal();
7095       }
7096       if (Args[i].isByVal || Args[i].isInAlloca) {
7097         PointerType *Ty = cast<PointerType>(Args[i].Ty);
7098         Type *ElementTy = Ty->getElementType();
7099         Flags.setByValSize(DL.getTypeAllocSize(ElementTy));
7100         // For ByVal, alignment should come from FE.  BE will guess if this
7101         // info is not there but there are cases it cannot get right.
7102         unsigned FrameAlign;
7103         if (Args[i].Alignment)
7104           FrameAlign = Args[i].Alignment;
7105         else
7106           FrameAlign = getByValTypeAlignment(ElementTy, DL);
7107         Flags.setByValAlign(FrameAlign);
7108       }
7109       if (Args[i].isNest)
7110         Flags.setNest();
7111       if (NeedsRegBlock)
7112         Flags.setInConsecutiveRegs();
7113       Flags.setOrigAlign(OriginalAlignment);
7114
7115       MVT PartVT = getRegisterType(CLI.RetTy->getContext(), VT);
7116       unsigned NumParts = getNumRegisters(CLI.RetTy->getContext(), VT);
7117       SmallVector<SDValue, 4> Parts(NumParts);
7118       ISD::NodeType ExtendKind = ISD::ANY_EXTEND;
7119
7120       if (Args[i].isSExt)
7121         ExtendKind = ISD::SIGN_EXTEND;
7122       else if (Args[i].isZExt)
7123         ExtendKind = ISD::ZERO_EXTEND;
7124
7125       // Conservatively only handle 'returned' on non-vectors for now
7126       if (Args[i].isReturned && !Op.getValueType().isVector()) {
7127         assert(CLI.RetTy == Args[i].Ty && RetTys.size() == NumValues &&
7128                "unexpected use of 'returned'");
7129         // Before passing 'returned' to the target lowering code, ensure that
7130         // either the register MVT and the actual EVT are the same size or that
7131         // the return value and argument are extended in the same way; in these
7132         // cases it's safe to pass the argument register value unchanged as the
7133         // return register value (although it's at the target's option whether
7134         // to do so)
7135         // TODO: allow code generation to take advantage of partially preserved
7136         // registers rather than clobbering the entire register when the
7137         // parameter extension method is not compatible with the return
7138         // extension method
7139         if ((NumParts * PartVT.getSizeInBits() == VT.getSizeInBits()) ||
7140             (ExtendKind != ISD::ANY_EXTEND &&
7141              CLI.RetSExt == Args[i].isSExt && CLI.RetZExt == Args[i].isZExt))
7142         Flags.setReturned();
7143       }
7144
7145       getCopyToParts(CLI.DAG, CLI.DL, Op, &Parts[0], NumParts, PartVT,
7146                      CLI.CS ? CLI.CS->getInstruction() : nullptr, ExtendKind);
7147
7148       for (unsigned j = 0; j != NumParts; ++j) {
7149         // if it isn't first piece, alignment must be 1
7150         ISD::OutputArg MyFlags(Flags, Parts[j].getValueType(), VT,
7151                                i < CLI.NumFixedArgs,
7152                                i, j*Parts[j].getValueType().getStoreSize());
7153         if (NumParts > 1 && j == 0)
7154           MyFlags.Flags.setSplit();
7155         else if (j != 0)
7156           MyFlags.Flags.setOrigAlign(1);
7157
7158         CLI.Outs.push_back(MyFlags);
7159         CLI.OutVals.push_back(Parts[j]);
7160       }
7161
7162       if (NeedsRegBlock && Value == NumValues - 1)
7163         CLI.Outs[CLI.Outs.size() - 1].Flags.setInConsecutiveRegsLast();
7164     }
7165   }
7166
7167   SmallVector<SDValue, 4> InVals;
7168   CLI.Chain = LowerCall(CLI, InVals);
7169
7170   // Verify that the target's LowerCall behaved as expected.
7171   assert(CLI.Chain.getNode() && CLI.Chain.getValueType() == MVT::Other &&
7172          "LowerCall didn't return a valid chain!");
7173   assert((!CLI.IsTailCall || InVals.empty()) &&
7174          "LowerCall emitted a return value for a tail call!");
7175   assert((CLI.IsTailCall || InVals.size() == CLI.Ins.size()) &&
7176          "LowerCall didn't emit the correct number of values!");
7177
7178   // For a tail call, the return value is merely live-out and there aren't
7179   // any nodes in the DAG representing it. Return a special value to
7180   // indicate that a tail call has been emitted and no more Instructions
7181   // should be processed in the current block.
7182   if (CLI.IsTailCall) {
7183     CLI.DAG.setRoot(CLI.Chain);
7184     return std::make_pair(SDValue(), SDValue());
7185   }
7186
7187   DEBUG(for (unsigned i = 0, e = CLI.Ins.size(); i != e; ++i) {
7188           assert(InVals[i].getNode() &&
7189                  "LowerCall emitted a null value!");
7190           assert(EVT(CLI.Ins[i].VT) == InVals[i].getValueType() &&
7191                  "LowerCall emitted a value with the wrong type!");
7192         });
7193
7194   SmallVector<SDValue, 4> ReturnValues;
7195   if (!CanLowerReturn) {
7196     // The instruction result is the result of loading from the
7197     // hidden sret parameter.
7198     SmallVector<EVT, 1> PVTs;
7199     Type *PtrRetTy = PointerType::getUnqual(OrigRetTy);
7200
7201     ComputeValueVTs(*this, DL, PtrRetTy, PVTs);
7202     assert(PVTs.size() == 1 && "Pointers should fit in one register");
7203     EVT PtrVT = PVTs[0];
7204
7205     unsigned NumValues = RetTys.size();
7206     ReturnValues.resize(NumValues);
7207     SmallVector<SDValue, 4> Chains(NumValues);
7208
7209     for (unsigned i = 0; i < NumValues; ++i) {
7210       SDValue Add = CLI.DAG.getNode(ISD::ADD, CLI.DL, PtrVT, DemoteStackSlot,
7211                                     CLI.DAG.getConstant(Offsets[i], CLI.DL,
7212                                                         PtrVT));
7213       SDValue L = CLI.DAG.getLoad(
7214           RetTys[i], CLI.DL, CLI.Chain, Add,
7215           MachinePointerInfo::getFixedStack(CLI.DAG.getMachineFunction(),
7216                                             DemoteStackIdx, Offsets[i]),
7217           false, false, false, 1);
7218       ReturnValues[i] = L;
7219       Chains[i] = L.getValue(1);
7220     }
7221
7222     CLI.Chain = CLI.DAG.getNode(ISD::TokenFactor, CLI.DL, MVT::Other, Chains);
7223   } else {
7224     // Collect the legal value parts into potentially illegal values
7225     // that correspond to the original function's return values.
7226     ISD::NodeType AssertOp = ISD::DELETED_NODE;
7227     if (CLI.RetSExt)
7228       AssertOp = ISD::AssertSext;
7229     else if (CLI.RetZExt)
7230       AssertOp = ISD::AssertZext;
7231     unsigned CurReg = 0;
7232     for (unsigned I = 0, E = RetTys.size(); I != E; ++I) {
7233       EVT VT = RetTys[I];
7234       MVT RegisterVT = getRegisterType(CLI.RetTy->getContext(), VT);
7235       unsigned NumRegs = getNumRegisters(CLI.RetTy->getContext(), VT);
7236
7237       ReturnValues.push_back(getCopyFromParts(CLI.DAG, CLI.DL, &InVals[CurReg],
7238                                               NumRegs, RegisterVT, VT, nullptr,
7239                                               AssertOp));
7240       CurReg += NumRegs;
7241     }
7242
7243     // For a function returning void, there is no return value. We can't create
7244     // such a node, so we just return a null return value in that case. In
7245     // that case, nothing will actually look at the value.
7246     if (ReturnValues.empty())
7247       return std::make_pair(SDValue(), CLI.Chain);
7248   }
7249
7250   SDValue Res = CLI.DAG.getNode(ISD::MERGE_VALUES, CLI.DL,
7251                                 CLI.DAG.getVTList(RetTys), ReturnValues);
7252   return std::make_pair(Res, CLI.Chain);
7253 }
7254
7255 void TargetLowering::LowerOperationWrapper(SDNode *N,
7256                                            SmallVectorImpl<SDValue> &Results,
7257                                            SelectionDAG &DAG) const {
7258   SDValue Res = LowerOperation(SDValue(N, 0), DAG);
7259   if (Res.getNode())
7260     Results.push_back(Res);
7261 }
7262
7263 SDValue TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
7264   llvm_unreachable("LowerOperation not implemented for this target!");
7265 }
7266
7267 void
7268 SelectionDAGBuilder::CopyValueToVirtualRegister(const Value *V, unsigned Reg) {
7269   SDValue Op = getNonRegisterValue(V);
7270   assert((Op.getOpcode() != ISD::CopyFromReg ||
7271           cast<RegisterSDNode>(Op.getOperand(1))->getReg() != Reg) &&
7272          "Copy from a reg to the same reg!");
7273   assert(!TargetRegisterInfo::isPhysicalRegister(Reg) && "Is a physreg");
7274
7275   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
7276   RegsForValue RFV(V->getContext(), TLI, DAG.getDataLayout(), Reg,
7277                    V->getType());
7278   SDValue Chain = DAG.getEntryNode();
7279
7280   ISD::NodeType ExtendType = (FuncInfo.PreferredExtendType.find(V) ==
7281                               FuncInfo.PreferredExtendType.end())
7282                                  ? ISD::ANY_EXTEND
7283                                  : FuncInfo.PreferredExtendType[V];
7284   RFV.getCopyToRegs(Op, DAG, getCurSDLoc(), Chain, nullptr, V, ExtendType);
7285   PendingExports.push_back(Chain);
7286 }
7287
7288 #include "llvm/CodeGen/SelectionDAGISel.h"
7289
7290 /// isOnlyUsedInEntryBlock - If the specified argument is only used in the
7291 /// entry block, return true.  This includes arguments used by switches, since
7292 /// the switch may expand into multiple basic blocks.
7293 static bool isOnlyUsedInEntryBlock(const Argument *A, bool FastISel) {
7294   // With FastISel active, we may be splitting blocks, so force creation
7295   // of virtual registers for all non-dead arguments.
7296   if (FastISel)
7297     return A->use_empty();
7298
7299   const BasicBlock &Entry = A->getParent()->front();
7300   for (const User *U : A->users())
7301     if (cast<Instruction>(U)->getParent() != &Entry || isa<SwitchInst>(U))
7302       return false;  // Use not in entry block.
7303
7304   return true;
7305 }
7306
7307 void SelectionDAGISel::LowerArguments(const Function &F) {
7308   SelectionDAG &DAG = SDB->DAG;
7309   SDLoc dl = SDB->getCurSDLoc();
7310   const DataLayout &DL = DAG.getDataLayout();
7311   SmallVector<ISD::InputArg, 16> Ins;
7312
7313   if (!FuncInfo->CanLowerReturn) {
7314     // Put in an sret pointer parameter before all the other parameters.
7315     SmallVector<EVT, 1> ValueVTs;
7316     ComputeValueVTs(*TLI, DAG.getDataLayout(),
7317                     PointerType::getUnqual(F.getReturnType()), ValueVTs);
7318
7319     // NOTE: Assuming that a pointer will never break down to more than one VT
7320     // or one register.
7321     ISD::ArgFlagsTy Flags;
7322     Flags.setSRet();
7323     MVT RegisterVT = TLI->getRegisterType(*DAG.getContext(), ValueVTs[0]);
7324     ISD::InputArg RetArg(Flags, RegisterVT, ValueVTs[0], true,
7325                          ISD::InputArg::NoArgIndex, 0);
7326     Ins.push_back(RetArg);
7327   }
7328
7329   // Set up the incoming argument description vector.
7330   unsigned Idx = 1;
7331   for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end();
7332        I != E; ++I, ++Idx) {
7333     SmallVector<EVT, 4> ValueVTs;
7334     ComputeValueVTs(*TLI, DAG.getDataLayout(), I->getType(), ValueVTs);
7335     bool isArgValueUsed = !I->use_empty();
7336     unsigned PartBase = 0;
7337     Type *FinalType = I->getType();
7338     if (F.getAttributes().hasAttribute(Idx, Attribute::ByVal))
7339       FinalType = cast<PointerType>(FinalType)->getElementType();
7340     bool NeedsRegBlock = TLI->functionArgumentNeedsConsecutiveRegisters(
7341         FinalType, F.getCallingConv(), F.isVarArg());
7342     for (unsigned Value = 0, NumValues = ValueVTs.size();
7343          Value != NumValues; ++Value) {
7344       EVT VT = ValueVTs[Value];
7345       Type *ArgTy = VT.getTypeForEVT(*DAG.getContext());
7346       ISD::ArgFlagsTy Flags;
7347       unsigned OriginalAlignment = DL.getABITypeAlignment(ArgTy);
7348
7349       if (F.getAttributes().hasAttribute(Idx, Attribute::ZExt))
7350         Flags.setZExt();
7351       if (F.getAttributes().hasAttribute(Idx, Attribute::SExt))
7352         Flags.setSExt();
7353       if (F.getAttributes().hasAttribute(Idx, Attribute::InReg))
7354         Flags.setInReg();
7355       if (F.getAttributes().hasAttribute(Idx, Attribute::StructRet))
7356         Flags.setSRet();
7357       if (F.getAttributes().hasAttribute(Idx, Attribute::ByVal))
7358         Flags.setByVal();
7359       if (F.getAttributes().hasAttribute(Idx, Attribute::InAlloca)) {
7360         Flags.setInAlloca();
7361         // Set the byval flag for CCAssignFn callbacks that don't know about
7362         // inalloca.  This way we can know how many bytes we should've allocated
7363         // and how many bytes a callee cleanup function will pop.  If we port
7364         // inalloca to more targets, we'll have to add custom inalloca handling
7365         // in the various CC lowering callbacks.
7366         Flags.setByVal();
7367       }
7368       if (Flags.isByVal() || Flags.isInAlloca()) {
7369         PointerType *Ty = cast<PointerType>(I->getType());
7370         Type *ElementTy = Ty->getElementType();
7371         Flags.setByValSize(DL.getTypeAllocSize(ElementTy));
7372         // For ByVal, alignment should be passed from FE.  BE will guess if
7373         // this info is not there but there are cases it cannot get right.
7374         unsigned FrameAlign;
7375         if (F.getParamAlignment(Idx))
7376           FrameAlign = F.getParamAlignment(Idx);
7377         else
7378           FrameAlign = TLI->getByValTypeAlignment(ElementTy, DL);
7379         Flags.setByValAlign(FrameAlign);
7380       }
7381       if (F.getAttributes().hasAttribute(Idx, Attribute::Nest))
7382         Flags.setNest();
7383       if (NeedsRegBlock)
7384         Flags.setInConsecutiveRegs();
7385       Flags.setOrigAlign(OriginalAlignment);
7386
7387       MVT RegisterVT = TLI->getRegisterType(*CurDAG->getContext(), VT);
7388       unsigned NumRegs = TLI->getNumRegisters(*CurDAG->getContext(), VT);
7389       for (unsigned i = 0; i != NumRegs; ++i) {
7390         ISD::InputArg MyFlags(Flags, RegisterVT, VT, isArgValueUsed,
7391                               Idx-1, PartBase+i*RegisterVT.getStoreSize());
7392         if (NumRegs > 1 && i == 0)
7393           MyFlags.Flags.setSplit();
7394         // if it isn't first piece, alignment must be 1
7395         else if (i > 0)
7396           MyFlags.Flags.setOrigAlign(1);
7397         Ins.push_back(MyFlags);
7398       }
7399       if (NeedsRegBlock && Value == NumValues - 1)
7400         Ins[Ins.size() - 1].Flags.setInConsecutiveRegsLast();
7401       PartBase += VT.getStoreSize();
7402     }
7403   }
7404
7405   // Call the target to set up the argument values.
7406   SmallVector<SDValue, 8> InVals;
7407   SDValue NewRoot = TLI->LowerFormalArguments(
7408       DAG.getRoot(), F.getCallingConv(), F.isVarArg(), Ins, dl, DAG, InVals);
7409
7410   // Verify that the target's LowerFormalArguments behaved as expected.
7411   assert(NewRoot.getNode() && NewRoot.getValueType() == MVT::Other &&
7412          "LowerFormalArguments didn't return a valid chain!");
7413   assert(InVals.size() == Ins.size() &&
7414          "LowerFormalArguments didn't emit the correct number of values!");
7415   DEBUG({
7416       for (unsigned i = 0, e = Ins.size(); i != e; ++i) {
7417         assert(InVals[i].getNode() &&
7418                "LowerFormalArguments emitted a null value!");
7419         assert(EVT(Ins[i].VT) == InVals[i].getValueType() &&
7420                "LowerFormalArguments emitted a value with the wrong type!");
7421       }
7422     });
7423
7424   // Update the DAG with the new chain value resulting from argument lowering.
7425   DAG.setRoot(NewRoot);
7426
7427   // Set up the argument values.
7428   unsigned i = 0;
7429   Idx = 1;
7430   if (!FuncInfo->CanLowerReturn) {
7431     // Create a virtual register for the sret pointer, and put in a copy
7432     // from the sret argument into it.
7433     SmallVector<EVT, 1> ValueVTs;
7434     ComputeValueVTs(*TLI, DAG.getDataLayout(),
7435                     PointerType::getUnqual(F.getReturnType()), ValueVTs);
7436     MVT VT = ValueVTs[0].getSimpleVT();
7437     MVT RegVT = TLI->getRegisterType(*CurDAG->getContext(), VT);
7438     ISD::NodeType AssertOp = ISD::DELETED_NODE;
7439     SDValue ArgValue = getCopyFromParts(DAG, dl, &InVals[0], 1,
7440                                         RegVT, VT, nullptr, AssertOp);
7441
7442     MachineFunction& MF = SDB->DAG.getMachineFunction();
7443     MachineRegisterInfo& RegInfo = MF.getRegInfo();
7444     unsigned SRetReg = RegInfo.createVirtualRegister(TLI->getRegClassFor(RegVT));
7445     FuncInfo->DemoteRegister = SRetReg;
7446     NewRoot =
7447         SDB->DAG.getCopyToReg(NewRoot, SDB->getCurSDLoc(), SRetReg, ArgValue);
7448     DAG.setRoot(NewRoot);
7449
7450     // i indexes lowered arguments.  Bump it past the hidden sret argument.
7451     // Idx indexes LLVM arguments.  Don't touch it.
7452     ++i;
7453   }
7454
7455   for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E;
7456       ++I, ++Idx) {
7457     SmallVector<SDValue, 4> ArgValues;
7458     SmallVector<EVT, 4> ValueVTs;
7459     ComputeValueVTs(*TLI, DAG.getDataLayout(), I->getType(), ValueVTs);
7460     unsigned NumValues = ValueVTs.size();
7461
7462     // If this argument is unused then remember its value. It is used to generate
7463     // debugging information.
7464     if (I->use_empty() && NumValues) {
7465       SDB->setUnusedArgValue(&*I, InVals[i]);
7466
7467       // Also remember any frame index for use in FastISel.
7468       if (FrameIndexSDNode *FI =
7469           dyn_cast<FrameIndexSDNode>(InVals[i].getNode()))
7470         FuncInfo->setArgumentFrameIndex(&*I, FI->getIndex());
7471     }
7472
7473     for (unsigned Val = 0; Val != NumValues; ++Val) {
7474       EVT VT = ValueVTs[Val];
7475       MVT PartVT = TLI->getRegisterType(*CurDAG->getContext(), VT);
7476       unsigned NumParts = TLI->getNumRegisters(*CurDAG->getContext(), VT);
7477
7478       if (!I->use_empty()) {
7479         ISD::NodeType AssertOp = ISD::DELETED_NODE;
7480         if (F.getAttributes().hasAttribute(Idx, Attribute::SExt))
7481           AssertOp = ISD::AssertSext;
7482         else if (F.getAttributes().hasAttribute(Idx, Attribute::ZExt))
7483           AssertOp = ISD::AssertZext;
7484
7485         ArgValues.push_back(getCopyFromParts(DAG, dl, &InVals[i],
7486                                              NumParts, PartVT, VT,
7487                                              nullptr, AssertOp));
7488       }
7489
7490       i += NumParts;
7491     }
7492
7493     // We don't need to do anything else for unused arguments.
7494     if (ArgValues.empty())
7495       continue;
7496
7497     // Note down frame index.
7498     if (FrameIndexSDNode *FI =
7499         dyn_cast<FrameIndexSDNode>(ArgValues[0].getNode()))
7500       FuncInfo->setArgumentFrameIndex(&*I, FI->getIndex());
7501
7502     SDValue Res = DAG.getMergeValues(makeArrayRef(ArgValues.data(), NumValues),
7503                                      SDB->getCurSDLoc());
7504
7505     SDB->setValue(&*I, Res);
7506     if (!TM.Options.EnableFastISel && Res.getOpcode() == ISD::BUILD_PAIR) {
7507       if (LoadSDNode *LNode =
7508           dyn_cast<LoadSDNode>(Res.getOperand(0).getNode()))
7509         if (FrameIndexSDNode *FI =
7510             dyn_cast<FrameIndexSDNode>(LNode->getBasePtr().getNode()))
7511         FuncInfo->setArgumentFrameIndex(&*I, FI->getIndex());
7512     }
7513
7514     // If this argument is live outside of the entry block, insert a copy from
7515     // wherever we got it to the vreg that other BB's will reference it as.
7516     if (!TM.Options.EnableFastISel && Res.getOpcode() == ISD::CopyFromReg) {
7517       // If we can, though, try to skip creating an unnecessary vreg.
7518       // FIXME: This isn't very clean... it would be nice to make this more
7519       // general.  It's also subtly incompatible with the hacks FastISel
7520       // uses with vregs.
7521       unsigned Reg = cast<RegisterSDNode>(Res.getOperand(1))->getReg();
7522       if (TargetRegisterInfo::isVirtualRegister(Reg)) {
7523         FuncInfo->ValueMap[&*I] = Reg;
7524         continue;
7525       }
7526     }
7527     if (!isOnlyUsedInEntryBlock(&*I, TM.Options.EnableFastISel)) {
7528       FuncInfo->InitializeRegForValue(&*I);
7529       SDB->CopyToExportRegsIfNeeded(&*I);
7530     }
7531   }
7532
7533   assert(i == InVals.size() && "Argument register count mismatch!");
7534
7535   // Finally, if the target has anything special to do, allow it to do so.
7536   EmitFunctionEntryCode();
7537 }
7538
7539 /// Handle PHI nodes in successor blocks.  Emit code into the SelectionDAG to
7540 /// ensure constants are generated when needed.  Remember the virtual registers
7541 /// that need to be added to the Machine PHI nodes as input.  We cannot just
7542 /// directly add them, because expansion might result in multiple MBB's for one
7543 /// BB.  As such, the start of the BB might correspond to a different MBB than
7544 /// the end.
7545 ///
7546 void
7547 SelectionDAGBuilder::HandlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB) {
7548   const TerminatorInst *TI = LLVMBB->getTerminator();
7549
7550   SmallPtrSet<MachineBasicBlock *, 4> SuccsHandled;
7551
7552   // Check PHI nodes in successors that expect a value to be available from this
7553   // block.
7554   for (unsigned succ = 0, e = TI->getNumSuccessors(); succ != e; ++succ) {
7555     const BasicBlock *SuccBB = TI->getSuccessor(succ);
7556     if (!isa<PHINode>(SuccBB->begin())) continue;
7557     MachineBasicBlock *SuccMBB = FuncInfo.MBBMap[SuccBB];
7558
7559     // If this terminator has multiple identical successors (common for
7560     // switches), only handle each succ once.
7561     if (!SuccsHandled.insert(SuccMBB).second)
7562       continue;
7563
7564     MachineBasicBlock::iterator MBBI = SuccMBB->begin();
7565
7566     // At this point we know that there is a 1-1 correspondence between LLVM PHI
7567     // nodes and Machine PHI nodes, but the incoming operands have not been
7568     // emitted yet.
7569     for (BasicBlock::const_iterator I = SuccBB->begin();
7570          const PHINode *PN = dyn_cast<PHINode>(I); ++I) {
7571       // Ignore dead phi's.
7572       if (PN->use_empty()) continue;
7573
7574       // Skip empty types
7575       if (PN->getType()->isEmptyTy())
7576         continue;
7577
7578       unsigned Reg;
7579       const Value *PHIOp = PN->getIncomingValueForBlock(LLVMBB);
7580
7581       if (const Constant *C = dyn_cast<Constant>(PHIOp)) {
7582         unsigned &RegOut = ConstantsOut[C];
7583         if (RegOut == 0) {
7584           RegOut = FuncInfo.CreateRegs(C->getType());
7585           CopyValueToVirtualRegister(C, RegOut);
7586         }
7587         Reg = RegOut;
7588       } else {
7589         DenseMap<const Value *, unsigned>::iterator I =
7590           FuncInfo.ValueMap.find(PHIOp);
7591         if (I != FuncInfo.ValueMap.end())
7592           Reg = I->second;
7593         else {
7594           assert(isa<AllocaInst>(PHIOp) &&
7595                  FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(PHIOp)) &&
7596                  "Didn't codegen value into a register!??");
7597           Reg = FuncInfo.CreateRegs(PHIOp->getType());
7598           CopyValueToVirtualRegister(PHIOp, Reg);
7599         }
7600       }
7601
7602       // Remember that this register needs to added to the machine PHI node as
7603       // the input for this MBB.
7604       SmallVector<EVT, 4> ValueVTs;
7605       const TargetLowering &TLI = DAG.getTargetLoweringInfo();
7606       ComputeValueVTs(TLI, DAG.getDataLayout(), PN->getType(), ValueVTs);
7607       for (unsigned vti = 0, vte = ValueVTs.size(); vti != vte; ++vti) {
7608         EVT VT = ValueVTs[vti];
7609         unsigned NumRegisters = TLI.getNumRegisters(*DAG.getContext(), VT);
7610         for (unsigned i = 0, e = NumRegisters; i != e; ++i)
7611           FuncInfo.PHINodesToUpdate.push_back(std::make_pair(MBBI++, Reg+i));
7612         Reg += NumRegisters;
7613       }
7614     }
7615   }
7616
7617   ConstantsOut.clear();
7618 }
7619
7620 /// Add a successor MBB to ParentMBB< creating a new MachineBB for BB if SuccMBB
7621 /// is 0.
7622 MachineBasicBlock *
7623 SelectionDAGBuilder::StackProtectorDescriptor::
7624 AddSuccessorMBB(const BasicBlock *BB,
7625                 MachineBasicBlock *ParentMBB,
7626                 bool IsLikely,
7627                 MachineBasicBlock *SuccMBB) {
7628   // If SuccBB has not been created yet, create it.
7629   if (!SuccMBB) {
7630     MachineFunction *MF = ParentMBB->getParent();
7631     MachineFunction::iterator BBI(ParentMBB);
7632     SuccMBB = MF->CreateMachineBasicBlock(BB);
7633     MF->insert(++BBI, SuccMBB);
7634   }
7635   // Add it as a successor of ParentMBB.
7636   ParentMBB->addSuccessor(
7637       SuccMBB, BranchProbabilityInfo::getBranchProbStackProtector(IsLikely));
7638   return SuccMBB;
7639 }
7640
7641 MachineBasicBlock *SelectionDAGBuilder::NextBlock(MachineBasicBlock *MBB) {
7642   MachineFunction::iterator I(MBB);
7643   if (++I == FuncInfo.MF->end())
7644     return nullptr;
7645   return &*I;
7646 }
7647
7648 /// During lowering new call nodes can be created (such as memset, etc.).
7649 /// Those will become new roots of the current DAG, but complications arise
7650 /// when they are tail calls. In such cases, the call lowering will update
7651 /// the root, but the builder still needs to know that a tail call has been
7652 /// lowered in order to avoid generating an additional return.
7653 void SelectionDAGBuilder::updateDAGForMaybeTailCall(SDValue MaybeTC) {
7654   // If the node is null, we do have a tail call.
7655   if (MaybeTC.getNode() != nullptr)
7656     DAG.setRoot(MaybeTC);
7657   else
7658     HasTailCall = true;
7659 }
7660
7661 bool SelectionDAGBuilder::isDense(const CaseClusterVector &Clusters,
7662                                   unsigned *TotalCases, unsigned First,
7663                                   unsigned Last) {
7664   assert(Last >= First);
7665   assert(TotalCases[Last] >= TotalCases[First]);
7666
7667   APInt LowCase = Clusters[First].Low->getValue();
7668   APInt HighCase = Clusters[Last].High->getValue();
7669   assert(LowCase.getBitWidth() == HighCase.getBitWidth());
7670
7671   // FIXME: A range of consecutive cases has 100% density, but only requires one
7672   // comparison to lower. We should discriminate against such consecutive ranges
7673   // in jump tables.
7674
7675   uint64_t Diff = (HighCase - LowCase).getLimitedValue((UINT64_MAX - 1) / 100);
7676   uint64_t Range = Diff + 1;
7677
7678   uint64_t NumCases =
7679       TotalCases[Last] - (First == 0 ? 0 : TotalCases[First - 1]);
7680
7681   assert(NumCases < UINT64_MAX / 100);
7682   assert(Range >= NumCases);
7683
7684   return NumCases * 100 >= Range * MinJumpTableDensity;
7685 }
7686
7687 static inline bool areJTsAllowed(const TargetLowering &TLI) {
7688   return TLI.isOperationLegalOrCustom(ISD::BR_JT, MVT::Other) ||
7689          TLI.isOperationLegalOrCustom(ISD::BRIND, MVT::Other);
7690 }
7691
7692 bool SelectionDAGBuilder::buildJumpTable(CaseClusterVector &Clusters,
7693                                          unsigned First, unsigned Last,
7694                                          const SwitchInst *SI,
7695                                          MachineBasicBlock *DefaultMBB,
7696                                          CaseCluster &JTCluster) {
7697   assert(First <= Last);
7698
7699   auto Prob = BranchProbability::getZero();
7700   unsigned NumCmps = 0;
7701   std::vector<MachineBasicBlock*> Table;
7702   DenseMap<MachineBasicBlock*, BranchProbability> JTProbs;
7703
7704   // Initialize probabilities in JTProbs.
7705   for (unsigned I = First; I <= Last; ++I)
7706     JTProbs[Clusters[I].MBB] = BranchProbability::getZero();
7707
7708   for (unsigned I = First; I <= Last; ++I) {
7709     assert(Clusters[I].Kind == CC_Range);
7710     Prob += Clusters[I].Prob;
7711     APInt Low = Clusters[I].Low->getValue();
7712     APInt High = Clusters[I].High->getValue();
7713     NumCmps += (Low == High) ? 1 : 2;
7714     if (I != First) {
7715       // Fill the gap between this and the previous cluster.
7716       APInt PreviousHigh = Clusters[I - 1].High->getValue();
7717       assert(PreviousHigh.slt(Low));
7718       uint64_t Gap = (Low - PreviousHigh).getLimitedValue() - 1;
7719       for (uint64_t J = 0; J < Gap; J++)
7720         Table.push_back(DefaultMBB);
7721     }
7722     uint64_t ClusterSize = (High - Low).getLimitedValue() + 1;
7723     for (uint64_t J = 0; J < ClusterSize; ++J)
7724       Table.push_back(Clusters[I].MBB);
7725     JTProbs[Clusters[I].MBB] += Clusters[I].Prob;
7726   }
7727
7728   unsigned NumDests = JTProbs.size();
7729   if (isSuitableForBitTests(NumDests, NumCmps,
7730                             Clusters[First].Low->getValue(),
7731                             Clusters[Last].High->getValue())) {
7732     // Clusters[First..Last] should be lowered as bit tests instead.
7733     return false;
7734   }
7735
7736   // Create the MBB that will load from and jump through the table.
7737   // Note: We create it here, but it's not inserted into the function yet.
7738   MachineFunction *CurMF = FuncInfo.MF;
7739   MachineBasicBlock *JumpTableMBB =
7740       CurMF->CreateMachineBasicBlock(SI->getParent());
7741
7742   // Add successors. Note: use table order for determinism.
7743   SmallPtrSet<MachineBasicBlock *, 8> Done;
7744   for (MachineBasicBlock *Succ : Table) {
7745     if (Done.count(Succ))
7746       continue;
7747     addSuccessorWithProb(JumpTableMBB, Succ, JTProbs[Succ]);
7748     Done.insert(Succ);
7749   }
7750   JumpTableMBB->normalizeSuccProbs();
7751
7752   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
7753   unsigned JTI = CurMF->getOrCreateJumpTableInfo(TLI.getJumpTableEncoding())
7754                      ->createJumpTableIndex(Table);
7755
7756   // Set up the jump table info.
7757   JumpTable JT(-1U, JTI, JumpTableMBB, nullptr);
7758   JumpTableHeader JTH(Clusters[First].Low->getValue(),
7759                       Clusters[Last].High->getValue(), SI->getCondition(),
7760                       nullptr, false);
7761   JTCases.emplace_back(std::move(JTH), std::move(JT));
7762
7763   JTCluster = CaseCluster::jumpTable(Clusters[First].Low, Clusters[Last].High,
7764                                      JTCases.size() - 1, Prob);
7765   return true;
7766 }
7767
7768 void SelectionDAGBuilder::findJumpTables(CaseClusterVector &Clusters,
7769                                          const SwitchInst *SI,
7770                                          MachineBasicBlock *DefaultMBB) {
7771 #ifndef NDEBUG
7772   // Clusters must be non-empty, sorted, and only contain Range clusters.
7773   assert(!Clusters.empty());
7774   for (CaseCluster &C : Clusters)
7775     assert(C.Kind == CC_Range);
7776   for (unsigned i = 1, e = Clusters.size(); i < e; ++i)
7777     assert(Clusters[i - 1].High->getValue().slt(Clusters[i].Low->getValue()));
7778 #endif
7779
7780   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
7781   if (!areJTsAllowed(TLI))
7782     return;
7783
7784   const int64_t N = Clusters.size();
7785   const unsigned MinJumpTableSize = TLI.getMinimumJumpTableEntries();
7786
7787   // TotalCases[i]: Total nbr of cases in Clusters[0..i].
7788   SmallVector<unsigned, 8> TotalCases(N);
7789
7790   for (unsigned i = 0; i < N; ++i) {
7791     APInt Hi = Clusters[i].High->getValue();
7792     APInt Lo = Clusters[i].Low->getValue();
7793     TotalCases[i] = (Hi - Lo).getLimitedValue() + 1;
7794     if (i != 0)
7795       TotalCases[i] += TotalCases[i - 1];
7796   }
7797
7798   if (N >= MinJumpTableSize && isDense(Clusters, &TotalCases[0], 0, N - 1)) {
7799     // Cheap case: the whole range might be suitable for jump table.
7800     CaseCluster JTCluster;
7801     if (buildJumpTable(Clusters, 0, N - 1, SI, DefaultMBB, JTCluster)) {
7802       Clusters[0] = JTCluster;
7803       Clusters.resize(1);
7804       return;
7805     }
7806   }
7807
7808   // The algorithm below is not suitable for -O0.
7809   if (TM.getOptLevel() == CodeGenOpt::None)
7810     return;
7811
7812   // Split Clusters into minimum number of dense partitions. The algorithm uses
7813   // the same idea as Kannan & Proebsting "Correction to 'Producing Good Code
7814   // for the Case Statement'" (1994), but builds the MinPartitions array in
7815   // reverse order to make it easier to reconstruct the partitions in ascending
7816   // order. In the choice between two optimal partitionings, it picks the one
7817   // which yields more jump tables.
7818
7819   // MinPartitions[i] is the minimum nbr of partitions of Clusters[i..N-1].
7820   SmallVector<unsigned, 8> MinPartitions(N);
7821   // LastElement[i] is the last element of the partition starting at i.
7822   SmallVector<unsigned, 8> LastElement(N);
7823   // NumTables[i]: nbr of >= MinJumpTableSize partitions from Clusters[i..N-1].
7824   SmallVector<unsigned, 8> NumTables(N);
7825
7826   // Base case: There is only one way to partition Clusters[N-1].
7827   MinPartitions[N - 1] = 1;
7828   LastElement[N - 1] = N - 1;
7829   assert(MinJumpTableSize > 1);
7830   NumTables[N - 1] = 0;
7831
7832   // Note: loop indexes are signed to avoid underflow.
7833   for (int64_t i = N - 2; i >= 0; i--) {
7834     // Find optimal partitioning of Clusters[i..N-1].
7835     // Baseline: Put Clusters[i] into a partition on its own.
7836     MinPartitions[i] = MinPartitions[i + 1] + 1;
7837     LastElement[i] = i;
7838     NumTables[i] = NumTables[i + 1];
7839
7840     // Search for a solution that results in fewer partitions.
7841     for (int64_t j = N - 1; j > i; j--) {
7842       // Try building a partition from Clusters[i..j].
7843       if (isDense(Clusters, &TotalCases[0], i, j)) {
7844         unsigned NumPartitions = 1 + (j == N - 1 ? 0 : MinPartitions[j + 1]);
7845         bool IsTable = j - i + 1 >= MinJumpTableSize;
7846         unsigned Tables = IsTable + (j == N - 1 ? 0 : NumTables[j + 1]);
7847
7848         // If this j leads to fewer partitions, or same number of partitions
7849         // with more lookup tables, it is a better partitioning.
7850         if (NumPartitions < MinPartitions[i] ||
7851             (NumPartitions == MinPartitions[i] && Tables > NumTables[i])) {
7852           MinPartitions[i] = NumPartitions;
7853           LastElement[i] = j;
7854           NumTables[i] = Tables;
7855         }
7856       }
7857     }
7858   }
7859
7860   // Iterate over the partitions, replacing some with jump tables in-place.
7861   unsigned DstIndex = 0;
7862   for (unsigned First = 0, Last; First < N; First = Last + 1) {
7863     Last = LastElement[First];
7864     assert(Last >= First);
7865     assert(DstIndex <= First);
7866     unsigned NumClusters = Last - First + 1;
7867
7868     CaseCluster JTCluster;
7869     if (NumClusters >= MinJumpTableSize &&
7870         buildJumpTable(Clusters, First, Last, SI, DefaultMBB, JTCluster)) {
7871       Clusters[DstIndex++] = JTCluster;
7872     } else {
7873       for (unsigned I = First; I <= Last; ++I)
7874         std::memmove(&Clusters[DstIndex++], &Clusters[I], sizeof(Clusters[I]));
7875     }
7876   }
7877   Clusters.resize(DstIndex);
7878 }
7879
7880 bool SelectionDAGBuilder::rangeFitsInWord(const APInt &Low, const APInt &High) {
7881   // FIXME: Using the pointer type doesn't seem ideal.
7882   uint64_t BW = DAG.getDataLayout().getPointerSizeInBits();
7883   uint64_t Range = (High - Low).getLimitedValue(UINT64_MAX - 1) + 1;
7884   return Range <= BW;
7885 }
7886
7887 bool SelectionDAGBuilder::isSuitableForBitTests(unsigned NumDests,
7888                                                 unsigned NumCmps,
7889                                                 const APInt &Low,
7890                                                 const APInt &High) {
7891   // FIXME: I don't think NumCmps is the correct metric: a single case and a
7892   // range of cases both require only one branch to lower. Just looking at the
7893   // number of clusters and destinations should be enough to decide whether to
7894   // build bit tests.
7895
7896   // To lower a range with bit tests, the range must fit the bitwidth of a
7897   // machine word.
7898   if (!rangeFitsInWord(Low, High))
7899     return false;
7900
7901   // Decide whether it's profitable to lower this range with bit tests. Each
7902   // destination requires a bit test and branch, and there is an overall range
7903   // check branch. For a small number of clusters, separate comparisons might be
7904   // cheaper, and for many destinations, splitting the range might be better.
7905   return (NumDests == 1 && NumCmps >= 3) ||
7906          (NumDests == 2 && NumCmps >= 5) ||
7907          (NumDests == 3 && NumCmps >= 6);
7908 }
7909
7910 bool SelectionDAGBuilder::buildBitTests(CaseClusterVector &Clusters,
7911                                         unsigned First, unsigned Last,
7912                                         const SwitchInst *SI,
7913                                         CaseCluster &BTCluster) {
7914   assert(First <= Last);
7915   if (First == Last)
7916     return false;
7917
7918   BitVector Dests(FuncInfo.MF->getNumBlockIDs());
7919   unsigned NumCmps = 0;
7920   for (int64_t I = First; I <= Last; ++I) {
7921     assert(Clusters[I].Kind == CC_Range);
7922     Dests.set(Clusters[I].MBB->getNumber());
7923     NumCmps += (Clusters[I].Low == Clusters[I].High) ? 1 : 2;
7924   }
7925   unsigned NumDests = Dests.count();
7926
7927   APInt Low = Clusters[First].Low->getValue();
7928   APInt High = Clusters[Last].High->getValue();
7929   assert(Low.slt(High));
7930
7931   if (!isSuitableForBitTests(NumDests, NumCmps, Low, High))
7932     return false;
7933
7934   APInt LowBound;
7935   APInt CmpRange;
7936
7937   const int BitWidth = DAG.getTargetLoweringInfo()
7938                            .getPointerTy(DAG.getDataLayout())
7939                            .getSizeInBits();
7940   assert(rangeFitsInWord(Low, High) && "Case range must fit in bit mask!");
7941
7942   // Check if the clusters cover a contiguous range such that no value in the
7943   // range will jump to the default statement.
7944   bool ContiguousRange = true;
7945   for (int64_t I = First + 1; I <= Last; ++I) {
7946     if (Clusters[I].Low->getValue() != Clusters[I - 1].High->getValue() + 1) {
7947       ContiguousRange = false;
7948       break;
7949     }
7950   }
7951
7952   if (Low.isStrictlyPositive() && High.slt(BitWidth)) {
7953     // Optimize the case where all the case values fit in a word without having
7954     // to subtract minValue. In this case, we can optimize away the subtraction.
7955     LowBound = APInt::getNullValue(Low.getBitWidth());
7956     CmpRange = High;
7957     ContiguousRange = false;
7958   } else {
7959     LowBound = Low;
7960     CmpRange = High - Low;
7961   }
7962
7963   CaseBitsVector CBV;
7964   auto TotalProb = BranchProbability::getZero();
7965   for (unsigned i = First; i <= Last; ++i) {
7966     // Find the CaseBits for this destination.
7967     unsigned j;
7968     for (j = 0; j < CBV.size(); ++j)
7969       if (CBV[j].BB == Clusters[i].MBB)
7970         break;
7971     if (j == CBV.size())
7972       CBV.push_back(
7973           CaseBits(0, Clusters[i].MBB, 0, BranchProbability::getZero()));
7974     CaseBits *CB = &CBV[j];
7975
7976     // Update Mask, Bits and ExtraProb.
7977     uint64_t Lo = (Clusters[i].Low->getValue() - LowBound).getZExtValue();
7978     uint64_t Hi = (Clusters[i].High->getValue() - LowBound).getZExtValue();
7979     assert(Hi >= Lo && Hi < 64 && "Invalid bit case!");
7980     CB->Mask |= (-1ULL >> (63 - (Hi - Lo))) << Lo;
7981     CB->Bits += Hi - Lo + 1;
7982     CB->ExtraProb += Clusters[i].Prob;
7983     TotalProb += Clusters[i].Prob;
7984   }
7985
7986   BitTestInfo BTI;
7987   std::sort(CBV.begin(), CBV.end(), [](const CaseBits &a, const CaseBits &b) {
7988     // Sort by probability first, number of bits second.
7989     if (a.ExtraProb != b.ExtraProb)
7990       return a.ExtraProb > b.ExtraProb;
7991     return a.Bits > b.Bits;
7992   });
7993
7994   for (auto &CB : CBV) {
7995     MachineBasicBlock *BitTestBB =
7996         FuncInfo.MF->CreateMachineBasicBlock(SI->getParent());
7997     BTI.push_back(BitTestCase(CB.Mask, BitTestBB, CB.BB, CB.ExtraProb));
7998   }
7999   BitTestCases.emplace_back(std::move(LowBound), std::move(CmpRange),
8000                             SI->getCondition(), -1U, MVT::Other, false,
8001                             ContiguousRange, nullptr, nullptr, std::move(BTI),
8002                             TotalProb);
8003
8004   BTCluster = CaseCluster::bitTests(Clusters[First].Low, Clusters[Last].High,
8005                                     BitTestCases.size() - 1, TotalProb);
8006   return true;
8007 }
8008
8009 void SelectionDAGBuilder::findBitTestClusters(CaseClusterVector &Clusters,
8010                                               const SwitchInst *SI) {
8011 // Partition Clusters into as few subsets as possible, where each subset has a
8012 // range that fits in a machine word and has <= 3 unique destinations.
8013
8014 #ifndef NDEBUG
8015   // Clusters must be sorted and contain Range or JumpTable clusters.
8016   assert(!Clusters.empty());
8017   assert(Clusters[0].Kind == CC_Range || Clusters[0].Kind == CC_JumpTable);
8018   for (const CaseCluster &C : Clusters)
8019     assert(C.Kind == CC_Range || C.Kind == CC_JumpTable);
8020   for (unsigned i = 1; i < Clusters.size(); ++i)
8021     assert(Clusters[i-1].High->getValue().slt(Clusters[i].Low->getValue()));
8022 #endif
8023
8024   // The algorithm below is not suitable for -O0.
8025   if (TM.getOptLevel() == CodeGenOpt::None)
8026     return;
8027
8028   // If target does not have legal shift left, do not emit bit tests at all.
8029   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
8030   EVT PTy = TLI.getPointerTy(DAG.getDataLayout());
8031   if (!TLI.isOperationLegal(ISD::SHL, PTy))
8032     return;
8033
8034   int BitWidth = PTy.getSizeInBits();
8035   const int64_t N = Clusters.size();
8036
8037   // MinPartitions[i] is the minimum nbr of partitions of Clusters[i..N-1].
8038   SmallVector<unsigned, 8> MinPartitions(N);
8039   // LastElement[i] is the last element of the partition starting at i.
8040   SmallVector<unsigned, 8> LastElement(N);
8041
8042   // FIXME: This might not be the best algorithm for finding bit test clusters.
8043
8044   // Base case: There is only one way to partition Clusters[N-1].
8045   MinPartitions[N - 1] = 1;
8046   LastElement[N - 1] = N - 1;
8047
8048   // Note: loop indexes are signed to avoid underflow.
8049   for (int64_t i = N - 2; i >= 0; --i) {
8050     // Find optimal partitioning of Clusters[i..N-1].
8051     // Baseline: Put Clusters[i] into a partition on its own.
8052     MinPartitions[i] = MinPartitions[i + 1] + 1;
8053     LastElement[i] = i;
8054
8055     // Search for a solution that results in fewer partitions.
8056     // Note: the search is limited by BitWidth, reducing time complexity.
8057     for (int64_t j = std::min(N - 1, i + BitWidth - 1); j > i; --j) {
8058       // Try building a partition from Clusters[i..j].
8059
8060       // Check the range.
8061       if (!rangeFitsInWord(Clusters[i].Low->getValue(),
8062                            Clusters[j].High->getValue()))
8063         continue;
8064
8065       // Check nbr of destinations and cluster types.
8066       // FIXME: This works, but doesn't seem very efficient.
8067       bool RangesOnly = true;
8068       BitVector Dests(FuncInfo.MF->getNumBlockIDs());
8069       for (int64_t k = i; k <= j; k++) {
8070         if (Clusters[k].Kind != CC_Range) {
8071           RangesOnly = false;
8072           break;
8073         }
8074         Dests.set(Clusters[k].MBB->getNumber());
8075       }
8076       if (!RangesOnly || Dests.count() > 3)
8077         break;
8078
8079       // Check if it's a better partition.
8080       unsigned NumPartitions = 1 + (j == N - 1 ? 0 : MinPartitions[j + 1]);
8081       if (NumPartitions < MinPartitions[i]) {
8082         // Found a better partition.
8083         MinPartitions[i] = NumPartitions;
8084         LastElement[i] = j;
8085       }
8086     }
8087   }
8088
8089   // Iterate over the partitions, replacing with bit-test clusters in-place.
8090   unsigned DstIndex = 0;
8091   for (unsigned First = 0, Last; First < N; First = Last + 1) {
8092     Last = LastElement[First];
8093     assert(First <= Last);
8094     assert(DstIndex <= First);
8095
8096     CaseCluster BitTestCluster;
8097     if (buildBitTests(Clusters, First, Last, SI, BitTestCluster)) {
8098       Clusters[DstIndex++] = BitTestCluster;
8099     } else {
8100       size_t NumClusters = Last - First + 1;
8101       std::memmove(&Clusters[DstIndex], &Clusters[First],
8102                    sizeof(Clusters[0]) * NumClusters);
8103       DstIndex += NumClusters;
8104     }
8105   }
8106   Clusters.resize(DstIndex);
8107 }
8108
8109 void SelectionDAGBuilder::lowerWorkItem(SwitchWorkListItem W, Value *Cond,
8110                                         MachineBasicBlock *SwitchMBB,
8111                                         MachineBasicBlock *DefaultMBB) {
8112   MachineFunction *CurMF = FuncInfo.MF;
8113   MachineBasicBlock *NextMBB = nullptr;
8114   MachineFunction::iterator BBI(W.MBB);
8115   if (++BBI != FuncInfo.MF->end())
8116     NextMBB = &*BBI;
8117
8118   unsigned Size = W.LastCluster - W.FirstCluster + 1;
8119
8120   BranchProbabilityInfo *BPI = FuncInfo.BPI;
8121
8122   if (Size == 2 && W.MBB == SwitchMBB) {
8123     // If any two of the cases has the same destination, and if one value
8124     // is the same as the other, but has one bit unset that the other has set,
8125     // use bit manipulation to do two compares at once.  For example:
8126     // "if (X == 6 || X == 4)" -> "if ((X|2) == 6)"
8127     // TODO: This could be extended to merge any 2 cases in switches with 3
8128     // cases.
8129     // TODO: Handle cases where W.CaseBB != SwitchBB.
8130     CaseCluster &Small = *W.FirstCluster;
8131     CaseCluster &Big = *W.LastCluster;
8132
8133     if (Small.Low == Small.High && Big.Low == Big.High &&
8134         Small.MBB == Big.MBB) {
8135       const APInt &SmallValue = Small.Low->getValue();
8136       const APInt &BigValue = Big.Low->getValue();
8137
8138       // Check that there is only one bit different.
8139       APInt CommonBit = BigValue ^ SmallValue;
8140       if (CommonBit.isPowerOf2()) {
8141         SDValue CondLHS = getValue(Cond);
8142         EVT VT = CondLHS.getValueType();
8143         SDLoc DL = getCurSDLoc();
8144
8145         SDValue Or = DAG.getNode(ISD::OR, DL, VT, CondLHS,
8146                                  DAG.getConstant(CommonBit, DL, VT));
8147         SDValue Cond = DAG.getSetCC(
8148             DL, MVT::i1, Or, DAG.getConstant(BigValue | SmallValue, DL, VT),
8149             ISD::SETEQ);
8150
8151         // Update successor info.
8152         // Both Small and Big will jump to Small.BB, so we sum up the
8153         // probabilities.
8154         addSuccessorWithProb(SwitchMBB, Small.MBB, Small.Prob + Big.Prob);
8155         if (BPI)
8156           addSuccessorWithProb(
8157               SwitchMBB, DefaultMBB,
8158               // The default destination is the first successor in IR.
8159               BPI->getEdgeProbability(SwitchMBB->getBasicBlock(), (unsigned)0));
8160         else
8161           addSuccessorWithProb(SwitchMBB, DefaultMBB);
8162
8163         // Insert the true branch.
8164         SDValue BrCond =
8165             DAG.getNode(ISD::BRCOND, DL, MVT::Other, getControlRoot(), Cond,
8166                         DAG.getBasicBlock(Small.MBB));
8167         // Insert the false branch.
8168         BrCond = DAG.getNode(ISD::BR, DL, MVT::Other, BrCond,
8169                              DAG.getBasicBlock(DefaultMBB));
8170
8171         DAG.setRoot(BrCond);
8172         return;
8173       }
8174     }
8175   }
8176
8177   if (TM.getOptLevel() != CodeGenOpt::None) {
8178     // Order cases by probability so the most likely case will be checked first.
8179     std::sort(W.FirstCluster, W.LastCluster + 1,
8180               [](const CaseCluster &a, const CaseCluster &b) {
8181       return a.Prob > b.Prob;
8182     });
8183
8184     // Rearrange the case blocks so that the last one falls through if possible
8185     // without without changing the order of probabilities.
8186     for (CaseClusterIt I = W.LastCluster; I > W.FirstCluster; ) {
8187       --I;
8188       if (I->Prob > W.LastCluster->Prob)
8189         break;
8190       if (I->Kind == CC_Range && I->MBB == NextMBB) {
8191         std::swap(*I, *W.LastCluster);
8192         break;
8193       }
8194     }
8195   }
8196
8197   // Compute total probability.
8198   BranchProbability DefaultProb = W.DefaultProb;
8199   BranchProbability UnhandledProbs = DefaultProb;
8200   for (CaseClusterIt I = W.FirstCluster; I <= W.LastCluster; ++I)
8201     UnhandledProbs += I->Prob;
8202
8203   MachineBasicBlock *CurMBB = W.MBB;
8204   for (CaseClusterIt I = W.FirstCluster, E = W.LastCluster; I <= E; ++I) {
8205     MachineBasicBlock *Fallthrough;
8206     if (I == W.LastCluster) {
8207       // For the last cluster, fall through to the default destination.
8208       Fallthrough = DefaultMBB;
8209     } else {
8210       Fallthrough = CurMF->CreateMachineBasicBlock(CurMBB->getBasicBlock());
8211       CurMF->insert(BBI, Fallthrough);
8212       // Put Cond in a virtual register to make it available from the new blocks.
8213       ExportFromCurrentBlock(Cond);
8214     }
8215     UnhandledProbs -= I->Prob;
8216
8217     switch (I->Kind) {
8218       case CC_JumpTable: {
8219         // FIXME: Optimize away range check based on pivot comparisons.
8220         JumpTableHeader *JTH = &JTCases[I->JTCasesIndex].first;
8221         JumpTable *JT = &JTCases[I->JTCasesIndex].second;
8222
8223         // The jump block hasn't been inserted yet; insert it here.
8224         MachineBasicBlock *JumpMBB = JT->MBB;
8225         CurMF->insert(BBI, JumpMBB);
8226
8227         auto JumpProb = I->Prob;
8228         auto FallthroughProb = UnhandledProbs;
8229
8230         // If the default statement is a target of the jump table, we evenly
8231         // distribute the default probability to successors of CurMBB. Also
8232         // update the probability on the edge from JumpMBB to Fallthrough.
8233         for (MachineBasicBlock::succ_iterator SI = JumpMBB->succ_begin(),
8234                                               SE = JumpMBB->succ_end();
8235              SI != SE; ++SI) {
8236           if (*SI == DefaultMBB) {
8237             JumpProb += DefaultProb / 2;
8238             FallthroughProb -= DefaultProb / 2;
8239             JumpMBB->setSuccProbability(SI, DefaultProb / 2);
8240             JumpMBB->normalizeSuccProbs();
8241             break;
8242           }
8243         }
8244
8245         addSuccessorWithProb(CurMBB, Fallthrough, FallthroughProb);
8246         addSuccessorWithProb(CurMBB, JumpMBB, JumpProb);
8247         CurMBB->normalizeSuccProbs();
8248
8249         // The jump table header will be inserted in our current block, do the
8250         // range check, and fall through to our fallthrough block.
8251         JTH->HeaderBB = CurMBB;
8252         JT->Default = Fallthrough; // FIXME: Move Default to JumpTableHeader.
8253
8254         // If we're in the right place, emit the jump table header right now.
8255         if (CurMBB == SwitchMBB) {
8256           visitJumpTableHeader(*JT, *JTH, SwitchMBB);
8257           JTH->Emitted = true;
8258         }
8259         break;
8260       }
8261       case CC_BitTests: {
8262         // FIXME: Optimize away range check based on pivot comparisons.
8263         BitTestBlock *BTB = &BitTestCases[I->BTCasesIndex];
8264
8265         // The bit test blocks haven't been inserted yet; insert them here.
8266         for (BitTestCase &BTC : BTB->Cases)
8267           CurMF->insert(BBI, BTC.ThisBB);
8268
8269         // Fill in fields of the BitTestBlock.
8270         BTB->Parent = CurMBB;
8271         BTB->Default = Fallthrough;
8272
8273         BTB->DefaultProb = UnhandledProbs;
8274         // If the cases in bit test don't form a contiguous range, we evenly
8275         // distribute the probability on the edge to Fallthrough to two
8276         // successors of CurMBB.
8277         if (!BTB->ContiguousRange) {
8278           BTB->Prob += DefaultProb / 2;
8279           BTB->DefaultProb -= DefaultProb / 2;
8280         }
8281
8282         // If we're in the right place, emit the bit test header right now.
8283         if (CurMBB == SwitchMBB) {
8284           visitBitTestHeader(*BTB, SwitchMBB);
8285           BTB->Emitted = true;
8286         }
8287         break;
8288       }
8289       case CC_Range: {
8290         const Value *RHS, *LHS, *MHS;
8291         ISD::CondCode CC;
8292         if (I->Low == I->High) {
8293           // Check Cond == I->Low.
8294           CC = ISD::SETEQ;
8295           LHS = Cond;
8296           RHS=I->Low;
8297           MHS = nullptr;
8298         } else {
8299           // Check I->Low <= Cond <= I->High.
8300           CC = ISD::SETLE;
8301           LHS = I->Low;
8302           MHS = Cond;
8303           RHS = I->High;
8304         }
8305
8306         // The false probability is the sum of all unhandled cases.
8307         CaseBlock CB(CC, LHS, RHS, MHS, I->MBB, Fallthrough, CurMBB, I->Prob,
8308                      UnhandledProbs);
8309
8310         if (CurMBB == SwitchMBB)
8311           visitSwitchCase(CB, SwitchMBB);
8312         else
8313           SwitchCases.push_back(CB);
8314
8315         break;
8316       }
8317     }
8318     CurMBB = Fallthrough;
8319   }
8320 }
8321
8322 unsigned SelectionDAGBuilder::caseClusterRank(const CaseCluster &CC,
8323                                               CaseClusterIt First,
8324                                               CaseClusterIt Last) {
8325   return std::count_if(First, Last + 1, [&](const CaseCluster &X) {
8326     if (X.Prob != CC.Prob)
8327       return X.Prob > CC.Prob;
8328
8329     // Ties are broken by comparing the case value.
8330     return X.Low->getValue().slt(CC.Low->getValue());
8331   });
8332 }
8333
8334 void SelectionDAGBuilder::splitWorkItem(SwitchWorkList &WorkList,
8335                                         const SwitchWorkListItem &W,
8336                                         Value *Cond,
8337                                         MachineBasicBlock *SwitchMBB) {
8338   assert(W.FirstCluster->Low->getValue().slt(W.LastCluster->Low->getValue()) &&
8339          "Clusters not sorted?");
8340
8341   assert(W.LastCluster - W.FirstCluster + 1 >= 2 && "Too small to split!");
8342
8343   // Balance the tree based on branch probabilities to create a near-optimal (in
8344   // terms of search time given key frequency) binary search tree. See e.g. Kurt
8345   // Mehlhorn "Nearly Optimal Binary Search Trees" (1975).
8346   CaseClusterIt LastLeft = W.FirstCluster;
8347   CaseClusterIt FirstRight = W.LastCluster;
8348   auto LeftProb = LastLeft->Prob + W.DefaultProb / 2;
8349   auto RightProb = FirstRight->Prob + W.DefaultProb / 2;
8350
8351   // Move LastLeft and FirstRight towards each other from opposite directions to
8352   // find a partitioning of the clusters which balances the probability on both
8353   // sides. If LeftProb and RightProb are equal, alternate which side is
8354   // taken to ensure 0-probability nodes are distributed evenly.
8355   unsigned I = 0;
8356   while (LastLeft + 1 < FirstRight) {
8357     if (LeftProb < RightProb || (LeftProb == RightProb && (I & 1)))
8358       LeftProb += (++LastLeft)->Prob;
8359     else
8360       RightProb += (--FirstRight)->Prob;
8361     I++;
8362   }
8363
8364   for (;;) {
8365     // Our binary search tree differs from a typical BST in that ours can have up
8366     // to three values in each leaf. The pivot selection above doesn't take that
8367     // into account, which means the tree might require more nodes and be less
8368     // efficient. We compensate for this here.
8369
8370     unsigned NumLeft = LastLeft - W.FirstCluster + 1;
8371     unsigned NumRight = W.LastCluster - FirstRight + 1;
8372
8373     if (std::min(NumLeft, NumRight) < 3 && std::max(NumLeft, NumRight) > 3) {
8374       // If one side has less than 3 clusters, and the other has more than 3,
8375       // consider taking a cluster from the other side.
8376
8377       if (NumLeft < NumRight) {
8378         // Consider moving the first cluster on the right to the left side.
8379         CaseCluster &CC = *FirstRight;
8380         unsigned RightSideRank = caseClusterRank(CC, FirstRight, W.LastCluster);
8381         unsigned LeftSideRank = caseClusterRank(CC, W.FirstCluster, LastLeft);
8382         if (LeftSideRank <= RightSideRank) {
8383           // Moving the cluster to the left does not demote it.
8384           ++LastLeft;
8385           ++FirstRight;
8386           continue;
8387         }
8388       } else {
8389         assert(NumRight < NumLeft);
8390         // Consider moving the last element on the left to the right side.
8391         CaseCluster &CC = *LastLeft;
8392         unsigned LeftSideRank = caseClusterRank(CC, W.FirstCluster, LastLeft);
8393         unsigned RightSideRank = caseClusterRank(CC, FirstRight, W.LastCluster);
8394         if (RightSideRank <= LeftSideRank) {
8395           // Moving the cluster to the right does not demot it.
8396           --LastLeft;
8397           --FirstRight;
8398           continue;
8399         }
8400       }
8401     }
8402     break;
8403   }
8404
8405   assert(LastLeft + 1 == FirstRight);
8406   assert(LastLeft >= W.FirstCluster);
8407   assert(FirstRight <= W.LastCluster);
8408
8409   // Use the first element on the right as pivot since we will make less-than
8410   // comparisons against it.
8411   CaseClusterIt PivotCluster = FirstRight;
8412   assert(PivotCluster > W.FirstCluster);
8413   assert(PivotCluster <= W.LastCluster);
8414
8415   CaseClusterIt FirstLeft = W.FirstCluster;
8416   CaseClusterIt LastRight = W.LastCluster;
8417
8418   const ConstantInt *Pivot = PivotCluster->Low;
8419
8420   // New blocks will be inserted immediately after the current one.
8421   MachineFunction::iterator BBI(W.MBB);
8422   ++BBI;
8423
8424   // We will branch to the LHS if Value < Pivot. If LHS is a single cluster,
8425   // we can branch to its destination directly if it's squeezed exactly in
8426   // between the known lower bound and Pivot - 1.
8427   MachineBasicBlock *LeftMBB;
8428   if (FirstLeft == LastLeft && FirstLeft->Kind == CC_Range &&
8429       FirstLeft->Low == W.GE &&
8430       (FirstLeft->High->getValue() + 1LL) == Pivot->getValue()) {
8431     LeftMBB = FirstLeft->MBB;
8432   } else {
8433     LeftMBB = FuncInfo.MF->CreateMachineBasicBlock(W.MBB->getBasicBlock());
8434     FuncInfo.MF->insert(BBI, LeftMBB);
8435     WorkList.push_back(
8436         {LeftMBB, FirstLeft, LastLeft, W.GE, Pivot, W.DefaultProb / 2});
8437     // Put Cond in a virtual register to make it available from the new blocks.
8438     ExportFromCurrentBlock(Cond);
8439   }
8440
8441   // Similarly, we will branch to the RHS if Value >= Pivot. If RHS is a
8442   // single cluster, RHS.Low == Pivot, and we can branch to its destination
8443   // directly if RHS.High equals the current upper bound.
8444   MachineBasicBlock *RightMBB;
8445   if (FirstRight == LastRight && FirstRight->Kind == CC_Range &&
8446       W.LT && (FirstRight->High->getValue() + 1ULL) == W.LT->getValue()) {
8447     RightMBB = FirstRight->MBB;
8448   } else {
8449     RightMBB = FuncInfo.MF->CreateMachineBasicBlock(W.MBB->getBasicBlock());
8450     FuncInfo.MF->insert(BBI, RightMBB);
8451     WorkList.push_back(
8452         {RightMBB, FirstRight, LastRight, Pivot, W.LT, W.DefaultProb / 2});
8453     // Put Cond in a virtual register to make it available from the new blocks.
8454     ExportFromCurrentBlock(Cond);
8455   }
8456
8457   // Create the CaseBlock record that will be used to lower the branch.
8458   CaseBlock CB(ISD::SETLT, Cond, Pivot, nullptr, LeftMBB, RightMBB, W.MBB,
8459                LeftProb, RightProb);
8460
8461   if (W.MBB == SwitchMBB)
8462     visitSwitchCase(CB, SwitchMBB);
8463   else
8464     SwitchCases.push_back(CB);
8465 }
8466
8467 void SelectionDAGBuilder::visitSwitch(const SwitchInst &SI) {
8468   // Extract cases from the switch.
8469   BranchProbabilityInfo *BPI = FuncInfo.BPI;
8470   CaseClusterVector Clusters;
8471   Clusters.reserve(SI.getNumCases());
8472   for (auto I : SI.cases()) {
8473     MachineBasicBlock *Succ = FuncInfo.MBBMap[I.getCaseSuccessor()];
8474     const ConstantInt *CaseVal = I.getCaseValue();
8475     BranchProbability Prob =
8476         BPI ? BPI->getEdgeProbability(SI.getParent(), I.getSuccessorIndex())
8477             : BranchProbability(1, SI.getNumCases() + 1);
8478     Clusters.push_back(CaseCluster::range(CaseVal, CaseVal, Succ, Prob));
8479   }
8480
8481   MachineBasicBlock *DefaultMBB = FuncInfo.MBBMap[SI.getDefaultDest()];
8482
8483   // Cluster adjacent cases with the same destination. We do this at all
8484   // optimization levels because it's cheap to do and will make codegen faster
8485   // if there are many clusters.
8486   sortAndRangeify(Clusters);
8487
8488   if (TM.getOptLevel() != CodeGenOpt::None) {
8489     // Replace an unreachable default with the most popular destination.
8490     // FIXME: Exploit unreachable default more aggressively.
8491     bool UnreachableDefault =
8492         isa<UnreachableInst>(SI.getDefaultDest()->getFirstNonPHIOrDbg());
8493     if (UnreachableDefault && !Clusters.empty()) {
8494       DenseMap<const BasicBlock *, unsigned> Popularity;
8495       unsigned MaxPop = 0;
8496       const BasicBlock *MaxBB = nullptr;
8497       for (auto I : SI.cases()) {
8498         const BasicBlock *BB = I.getCaseSuccessor();
8499         if (++Popularity[BB] > MaxPop) {
8500           MaxPop = Popularity[BB];
8501           MaxBB = BB;
8502         }
8503       }
8504       // Set new default.
8505       assert(MaxPop > 0 && MaxBB);
8506       DefaultMBB = FuncInfo.MBBMap[MaxBB];
8507
8508       // Remove cases that were pointing to the destination that is now the
8509       // default.
8510       CaseClusterVector New;
8511       New.reserve(Clusters.size());
8512       for (CaseCluster &CC : Clusters) {
8513         if (CC.MBB != DefaultMBB)
8514           New.push_back(CC);
8515       }
8516       Clusters = std::move(New);
8517     }
8518   }
8519
8520   // If there is only the default destination, jump there directly.
8521   MachineBasicBlock *SwitchMBB = FuncInfo.MBB;
8522   if (Clusters.empty()) {
8523     SwitchMBB->addSuccessor(DefaultMBB);
8524     if (DefaultMBB != NextBlock(SwitchMBB)) {
8525       DAG.setRoot(DAG.getNode(ISD::BR, getCurSDLoc(), MVT::Other,
8526                               getControlRoot(), DAG.getBasicBlock(DefaultMBB)));
8527     }
8528     return;
8529   }
8530
8531   findJumpTables(Clusters, &SI, DefaultMBB);
8532   findBitTestClusters(Clusters, &SI);
8533
8534   DEBUG({
8535     dbgs() << "Case clusters: ";
8536     for (const CaseCluster &C : Clusters) {
8537       if (C.Kind == CC_JumpTable) dbgs() << "JT:";
8538       if (C.Kind == CC_BitTests) dbgs() << "BT:";
8539
8540       C.Low->getValue().print(dbgs(), true);
8541       if (C.Low != C.High) {
8542         dbgs() << '-';
8543         C.High->getValue().print(dbgs(), true);
8544       }
8545       dbgs() << ' ';
8546     }
8547     dbgs() << '\n';
8548   });
8549
8550   assert(!Clusters.empty());
8551   SwitchWorkList WorkList;
8552   CaseClusterIt First = Clusters.begin();
8553   CaseClusterIt Last = Clusters.end() - 1;
8554   auto DefaultProb = getEdgeProbability(SwitchMBB, DefaultMBB);
8555   WorkList.push_back({SwitchMBB, First, Last, nullptr, nullptr, DefaultProb});
8556
8557   while (!WorkList.empty()) {
8558     SwitchWorkListItem W = WorkList.back();
8559     WorkList.pop_back();
8560     unsigned NumClusters = W.LastCluster - W.FirstCluster + 1;
8561
8562     if (NumClusters > 3 && TM.getOptLevel() != CodeGenOpt::None) {
8563       // For optimized builds, lower large range as a balanced binary tree.
8564       splitWorkItem(WorkList, W, SI.getCondition(), SwitchMBB);
8565       continue;
8566     }
8567
8568     lowerWorkItem(W, SI.getCondition(), SwitchMBB, DefaultMBB);
8569   }
8570 }