533efbd8aab6b36fb272fb2f23a289b8ac9a157c
[oota-llvm.git] / lib / CodeGen / SelectionDAG / LegalizeDAG.cpp
1 //===-- LegalizeDAG.cpp - Implement SelectionDAG::Legalize ----------------===//
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 file implements the SelectionDAG::Legalize method.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/CodeGen/SelectionDAG.h"
15 #include "llvm/ADT/SetVector.h"
16 #include "llvm/ADT/SmallPtrSet.h"
17 #include "llvm/ADT/SmallSet.h"
18 #include "llvm/ADT/SmallVector.h"
19 #include "llvm/ADT/Triple.h"
20 #include "llvm/CodeGen/Analysis.h"
21 #include "llvm/CodeGen/MachineFunction.h"
22 #include "llvm/CodeGen/MachineJumpTableInfo.h"
23 #include "llvm/IR/CallingConv.h"
24 #include "llvm/IR/Constants.h"
25 #include "llvm/IR/DataLayout.h"
26 #include "llvm/IR/DebugInfo.h"
27 #include "llvm/IR/DerivedTypes.h"
28 #include "llvm/IR/Function.h"
29 #include "llvm/IR/LLVMContext.h"
30 #include "llvm/Support/Debug.h"
31 #include "llvm/Support/ErrorHandling.h"
32 #include "llvm/Support/MathExtras.h"
33 #include "llvm/Support/raw_ostream.h"
34 #include "llvm/Target/TargetFrameLowering.h"
35 #include "llvm/Target/TargetLowering.h"
36 #include "llvm/Target/TargetMachine.h"
37 #include "llvm/Target/TargetSubtargetInfo.h"
38 using namespace llvm;
39
40 #define DEBUG_TYPE "legalizedag"
41
42 //===----------------------------------------------------------------------===//
43 /// This takes an arbitrary SelectionDAG as input and
44 /// hacks on it until the target machine can handle it.  This involves
45 /// eliminating value sizes the machine cannot handle (promoting small sizes to
46 /// large sizes or splitting up large values into small values) as well as
47 /// eliminating operations the machine cannot handle.
48 ///
49 /// This code also does a small amount of optimization and recognition of idioms
50 /// as part of its processing.  For example, if a target does not support a
51 /// 'setcc' instruction efficiently, but does support 'brcc' instruction, this
52 /// will attempt merge setcc and brc instructions into brcc's.
53 ///
54 namespace {
55 class SelectionDAGLegalize {
56   const TargetMachine &TM;
57   const TargetLowering &TLI;
58   SelectionDAG &DAG;
59
60   /// \brief The set of nodes which have already been legalized. We hold a
61   /// reference to it in order to update as necessary on node deletion.
62   SmallPtrSetImpl<SDNode *> &LegalizedNodes;
63
64   /// \brief A set of all the nodes updated during legalization.
65   SmallSetVector<SDNode *, 16> *UpdatedNodes;
66
67   EVT getSetCCResultType(EVT VT) const {
68     return TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT);
69   }
70
71   // Libcall insertion helpers.
72
73 public:
74   SelectionDAGLegalize(SelectionDAG &DAG,
75                        SmallPtrSetImpl<SDNode *> &LegalizedNodes,
76                        SmallSetVector<SDNode *, 16> *UpdatedNodes = nullptr)
77       : TM(DAG.getTarget()), TLI(DAG.getTargetLoweringInfo()), DAG(DAG),
78         LegalizedNodes(LegalizedNodes), UpdatedNodes(UpdatedNodes) {}
79
80   /// \brief Legalizes the given operation.
81   void LegalizeOp(SDNode *Node);
82
83 private:
84   SDValue OptimizeFloatStore(StoreSDNode *ST);
85
86   void LegalizeLoadOps(SDNode *Node);
87   void LegalizeStoreOps(SDNode *Node);
88
89   /// Some targets cannot handle a variable
90   /// insertion index for the INSERT_VECTOR_ELT instruction.  In this case, it
91   /// is necessary to spill the vector being inserted into to memory, perform
92   /// the insert there, and then read the result back.
93   SDValue PerformInsertVectorEltInMemory(SDValue Vec, SDValue Val,
94                                          SDValue Idx, SDLoc dl);
95   SDValue ExpandINSERT_VECTOR_ELT(SDValue Vec, SDValue Val,
96                                   SDValue Idx, SDLoc dl);
97
98   /// Return a vector shuffle operation which
99   /// performs the same shuffe in terms of order or result bytes, but on a type
100   /// whose vector element type is narrower than the original shuffle type.
101   /// e.g. <v4i32> <0, 1, 0, 1> -> v8i16 <0, 1, 2, 3, 0, 1, 2, 3>
102   SDValue ShuffleWithNarrowerEltType(EVT NVT, EVT VT, SDLoc dl,
103                                      SDValue N1, SDValue N2,
104                                      ArrayRef<int> Mask) const;
105
106   bool LegalizeSetCCCondCode(EVT VT, SDValue &LHS, SDValue &RHS, SDValue &CC,
107                              bool &NeedInvert, SDLoc dl);
108
109   SDValue ExpandLibCall(RTLIB::Libcall LC, SDNode *Node, bool isSigned);
110   SDValue ExpandLibCall(RTLIB::Libcall LC, EVT RetVT, const SDValue *Ops,
111                         unsigned NumOps, bool isSigned, SDLoc dl);
112
113   std::pair<SDValue, SDValue> ExpandChainLibCall(RTLIB::Libcall LC,
114                                                  SDNode *Node, bool isSigned);
115   SDValue ExpandFPLibCall(SDNode *Node, RTLIB::Libcall Call_F32,
116                           RTLIB::Libcall Call_F64, RTLIB::Libcall Call_F80,
117                           RTLIB::Libcall Call_F128,
118                           RTLIB::Libcall Call_PPCF128);
119   SDValue ExpandIntLibCall(SDNode *Node, bool isSigned,
120                            RTLIB::Libcall Call_I8,
121                            RTLIB::Libcall Call_I16,
122                            RTLIB::Libcall Call_I32,
123                            RTLIB::Libcall Call_I64,
124                            RTLIB::Libcall Call_I128);
125   void ExpandDivRemLibCall(SDNode *Node, SmallVectorImpl<SDValue> &Results);
126   void ExpandSinCosLibCall(SDNode *Node, SmallVectorImpl<SDValue> &Results);
127
128   SDValue EmitStackConvert(SDValue SrcOp, EVT SlotVT, EVT DestVT, SDLoc dl);
129   SDValue ExpandBUILD_VECTOR(SDNode *Node);
130   SDValue ExpandSCALAR_TO_VECTOR(SDNode *Node);
131   void ExpandDYNAMIC_STACKALLOC(SDNode *Node,
132                                 SmallVectorImpl<SDValue> &Results);
133   SDValue ExpandFCOPYSIGN(SDNode *Node);
134   SDValue ExpandLegalINT_TO_FP(bool isSigned, SDValue LegalOp, EVT DestVT,
135                                SDLoc dl);
136   SDValue PromoteLegalINT_TO_FP(SDValue LegalOp, EVT DestVT, bool isSigned,
137                                 SDLoc dl);
138   SDValue PromoteLegalFP_TO_INT(SDValue LegalOp, EVT DestVT, bool isSigned,
139                                 SDLoc dl);
140
141   SDValue ExpandBSWAP(SDValue Op, SDLoc dl);
142   SDValue ExpandBitCount(unsigned Opc, SDValue Op, SDLoc dl);
143
144   SDValue ExpandExtractFromVectorThroughStack(SDValue Op);
145   SDValue ExpandInsertToVectorThroughStack(SDValue Op);
146   SDValue ExpandVectorBuildThroughStack(SDNode* Node);
147
148   SDValue ExpandConstantFP(ConstantFPSDNode *CFP, bool UseCP);
149
150   std::pair<SDValue, SDValue> ExpandAtomic(SDNode *Node);
151
152   void ExpandNode(SDNode *Node);
153   void PromoteNode(SDNode *Node);
154
155 public:
156   // Node replacement helpers
157   void ReplacedNode(SDNode *N) {
158     LegalizedNodes.erase(N);
159     if (UpdatedNodes)
160       UpdatedNodes->insert(N);
161   }
162   void ReplaceNode(SDNode *Old, SDNode *New) {
163     DEBUG(dbgs() << " ... replacing: "; Old->dump(&DAG);
164           dbgs() << "     with:      "; New->dump(&DAG));
165
166     assert(Old->getNumValues() == New->getNumValues() &&
167            "Replacing one node with another that produces a different number "
168            "of values!");
169     DAG.ReplaceAllUsesWith(Old, New);
170     for (unsigned i = 0, e = Old->getNumValues(); i != e; ++i)
171       DAG.TransferDbgValues(SDValue(Old, i), SDValue(New, i));
172     if (UpdatedNodes)
173       UpdatedNodes->insert(New);
174     ReplacedNode(Old);
175   }
176   void ReplaceNode(SDValue Old, SDValue New) {
177     DEBUG(dbgs() << " ... replacing: "; Old->dump(&DAG);
178           dbgs() << "     with:      "; New->dump(&DAG));
179
180     DAG.ReplaceAllUsesWith(Old, New);
181     DAG.TransferDbgValues(Old, New);
182     if (UpdatedNodes)
183       UpdatedNodes->insert(New.getNode());
184     ReplacedNode(Old.getNode());
185   }
186   void ReplaceNode(SDNode *Old, const SDValue *New) {
187     DEBUG(dbgs() << " ... replacing: "; Old->dump(&DAG));
188
189     DAG.ReplaceAllUsesWith(Old, New);
190     for (unsigned i = 0, e = Old->getNumValues(); i != e; ++i) {
191       DEBUG(dbgs() << (i == 0 ? "     with:      "
192                               : "      and:      ");
193             New[i]->dump(&DAG));
194       DAG.TransferDbgValues(SDValue(Old, i), New[i]);
195       if (UpdatedNodes)
196         UpdatedNodes->insert(New[i].getNode());
197     }
198     ReplacedNode(Old);
199   }
200 };
201 }
202
203 /// Return a vector shuffle operation which
204 /// performs the same shuffe in terms of order or result bytes, but on a type
205 /// whose vector element type is narrower than the original shuffle type.
206 /// e.g. <v4i32> <0, 1, 0, 1> -> v8i16 <0, 1, 2, 3, 0, 1, 2, 3>
207 SDValue
208 SelectionDAGLegalize::ShuffleWithNarrowerEltType(EVT NVT, EVT VT,  SDLoc dl,
209                                                  SDValue N1, SDValue N2,
210                                                  ArrayRef<int> Mask) const {
211   unsigned NumMaskElts = VT.getVectorNumElements();
212   unsigned NumDestElts = NVT.getVectorNumElements();
213   unsigned NumEltsGrowth = NumDestElts / NumMaskElts;
214
215   assert(NumEltsGrowth && "Cannot promote to vector type with fewer elts!");
216
217   if (NumEltsGrowth == 1)
218     return DAG.getVectorShuffle(NVT, dl, N1, N2, &Mask[0]);
219
220   SmallVector<int, 8> NewMask;
221   for (unsigned i = 0; i != NumMaskElts; ++i) {
222     int Idx = Mask[i];
223     for (unsigned j = 0; j != NumEltsGrowth; ++j) {
224       if (Idx < 0)
225         NewMask.push_back(-1);
226       else
227         NewMask.push_back(Idx * NumEltsGrowth + j);
228     }
229   }
230   assert(NewMask.size() == NumDestElts && "Non-integer NumEltsGrowth?");
231   assert(TLI.isShuffleMaskLegal(NewMask, NVT) && "Shuffle not legal?");
232   return DAG.getVectorShuffle(NVT, dl, N1, N2, &NewMask[0]);
233 }
234
235 /// Expands the ConstantFP node to an integer constant or
236 /// a load from the constant pool.
237 SDValue
238 SelectionDAGLegalize::ExpandConstantFP(ConstantFPSDNode *CFP, bool UseCP) {
239   bool Extend = false;
240   SDLoc dl(CFP);
241
242   // If a FP immediate is precise when represented as a float and if the
243   // target can do an extending load from float to double, we put it into
244   // the constant pool as a float, even if it's is statically typed as a
245   // double.  This shrinks FP constants and canonicalizes them for targets where
246   // an FP extending load is the same cost as a normal load (such as on the x87
247   // fp stack or PPC FP unit).
248   EVT VT = CFP->getValueType(0);
249   ConstantFP *LLVMC = const_cast<ConstantFP*>(CFP->getConstantFPValue());
250   if (!UseCP) {
251     assert((VT == MVT::f64 || VT == MVT::f32) && "Invalid type expansion");
252     return DAG.getConstant(LLVMC->getValueAPF().bitcastToAPInt(), dl,
253                            (VT == MVT::f64) ? MVT::i64 : MVT::i32);
254   }
255
256   EVT OrigVT = VT;
257   EVT SVT = VT;
258   while (SVT != MVT::f32 && SVT != MVT::f16) {
259     SVT = (MVT::SimpleValueType)(SVT.getSimpleVT().SimpleTy - 1);
260     if (ConstantFPSDNode::isValueValidForType(SVT, CFP->getValueAPF()) &&
261         // Only do this if the target has a native EXTLOAD instruction from
262         // smaller type.
263         TLI.isLoadExtLegal(ISD::EXTLOAD, OrigVT, SVT) &&
264         TLI.ShouldShrinkFPConstant(OrigVT)) {
265       Type *SType = SVT.getTypeForEVT(*DAG.getContext());
266       LLVMC = cast<ConstantFP>(ConstantExpr::getFPTrunc(LLVMC, SType));
267       VT = SVT;
268       Extend = true;
269     }
270   }
271
272   SDValue CPIdx =
273       DAG.getConstantPool(LLVMC, TLI.getPointerTy(DAG.getDataLayout()));
274   unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
275   if (Extend) {
276     SDValue Result =
277       DAG.getExtLoad(ISD::EXTLOAD, dl, OrigVT,
278                      DAG.getEntryNode(),
279                      CPIdx, MachinePointerInfo::getConstantPool(),
280                      VT, false, false, false, Alignment);
281     return Result;
282   }
283   SDValue Result =
284     DAG.getLoad(OrigVT, dl, DAG.getEntryNode(), CPIdx,
285                 MachinePointerInfo::getConstantPool(), false, false, false,
286                 Alignment);
287   return Result;
288 }
289
290 /// Expands an unaligned store to 2 half-size stores.
291 static void ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG,
292                                  const TargetLowering &TLI,
293                                  SelectionDAGLegalize *DAGLegalize) {
294   assert(ST->getAddressingMode() == ISD::UNINDEXED &&
295          "unaligned indexed stores not implemented!");
296   SDValue Chain = ST->getChain();
297   SDValue Ptr = ST->getBasePtr();
298   SDValue Val = ST->getValue();
299   EVT VT = Val.getValueType();
300   int Alignment = ST->getAlignment();
301   unsigned AS = ST->getAddressSpace();
302
303   SDLoc dl(ST);
304   if (ST->getMemoryVT().isFloatingPoint() ||
305       ST->getMemoryVT().isVector()) {
306     EVT intVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits());
307     if (TLI.isTypeLegal(intVT)) {
308       // Expand to a bitconvert of the value to the integer type of the
309       // same size, then a (misaligned) int store.
310       // FIXME: Does not handle truncating floating point stores!
311       SDValue Result = DAG.getNode(ISD::BITCAST, dl, intVT, Val);
312       Result = DAG.getStore(Chain, dl, Result, Ptr, ST->getPointerInfo(),
313                            ST->isVolatile(), ST->isNonTemporal(), Alignment);
314       DAGLegalize->ReplaceNode(SDValue(ST, 0), Result);
315       return;
316     }
317     // Do a (aligned) store to a stack slot, then copy from the stack slot
318     // to the final destination using (unaligned) integer loads and stores.
319     EVT StoredVT = ST->getMemoryVT();
320     MVT RegVT =
321       TLI.getRegisterType(*DAG.getContext(),
322                           EVT::getIntegerVT(*DAG.getContext(),
323                                             StoredVT.getSizeInBits()));
324     unsigned StoredBytes = StoredVT.getSizeInBits() / 8;
325     unsigned RegBytes = RegVT.getSizeInBits() / 8;
326     unsigned NumRegs = (StoredBytes + RegBytes - 1) / RegBytes;
327
328     // Make sure the stack slot is also aligned for the register type.
329     SDValue StackPtr = DAG.CreateStackTemporary(StoredVT, RegVT);
330
331     // Perform the original store, only redirected to the stack slot.
332     SDValue Store = DAG.getTruncStore(Chain, dl,
333                                       Val, StackPtr, MachinePointerInfo(),
334                                       StoredVT, false, false, 0);
335     SDValue Increment = DAG.getConstant(
336         RegBytes, dl, TLI.getPointerTy(DAG.getDataLayout(), AS));
337     SmallVector<SDValue, 8> Stores;
338     unsigned Offset = 0;
339
340     // Do all but one copies using the full register width.
341     for (unsigned i = 1; i < NumRegs; i++) {
342       // Load one integer register's worth from the stack slot.
343       SDValue Load = DAG.getLoad(RegVT, dl, Store, StackPtr,
344                                  MachinePointerInfo(),
345                                  false, false, false, 0);
346       // Store it to the final location.  Remember the store.
347       Stores.push_back(DAG.getStore(Load.getValue(1), dl, Load, Ptr,
348                                   ST->getPointerInfo().getWithOffset(Offset),
349                                     ST->isVolatile(), ST->isNonTemporal(),
350                                     MinAlign(ST->getAlignment(), Offset)));
351       // Increment the pointers.
352       Offset += RegBytes;
353       StackPtr = DAG.getNode(ISD::ADD, dl, StackPtr.getValueType(), StackPtr,
354                              Increment);
355       Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr, Increment);
356     }
357
358     // The last store may be partial.  Do a truncating store.  On big-endian
359     // machines this requires an extending load from the stack slot to ensure
360     // that the bits are in the right place.
361     EVT MemVT = EVT::getIntegerVT(*DAG.getContext(),
362                                   8 * (StoredBytes - Offset));
363
364     // Load from the stack slot.
365     SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, RegVT, Store, StackPtr,
366                                   MachinePointerInfo(),
367                                   MemVT, false, false, false, 0);
368
369     Stores.push_back(DAG.getTruncStore(Load.getValue(1), dl, Load, Ptr,
370                                        ST->getPointerInfo()
371                                          .getWithOffset(Offset),
372                                        MemVT, ST->isVolatile(),
373                                        ST->isNonTemporal(),
374                                        MinAlign(ST->getAlignment(), Offset),
375                                        ST->getAAInfo()));
376     // The order of the stores doesn't matter - say it with a TokenFactor.
377     SDValue Result = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
378     DAGLegalize->ReplaceNode(SDValue(ST, 0), Result);
379     return;
380   }
381   assert(ST->getMemoryVT().isInteger() &&
382          !ST->getMemoryVT().isVector() &&
383          "Unaligned store of unknown type.");
384   // Get the half-size VT
385   EVT NewStoredVT = ST->getMemoryVT().getHalfSizedIntegerVT(*DAG.getContext());
386   int NumBits = NewStoredVT.getSizeInBits();
387   int IncrementSize = NumBits / 8;
388
389   // Divide the stored value in two parts.
390   SDValue ShiftAmount = DAG.getConstant(NumBits, dl,
391                                       TLI.getShiftAmountTy(Val.getValueType()));
392   SDValue Lo = Val;
393   SDValue Hi = DAG.getNode(ISD::SRL, dl, VT, Val, ShiftAmount);
394
395   // Store the two parts
396   SDValue Store1, Store2;
397   Store1 = DAG.getTruncStore(Chain, dl,
398                              DAG.getDataLayout().isLittleEndian() ? Lo : Hi,
399                              Ptr, ST->getPointerInfo(), NewStoredVT,
400                              ST->isVolatile(), ST->isNonTemporal(), Alignment);
401
402   Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
403                     DAG.getConstant(IncrementSize, dl,
404                                     TLI.getPointerTy(DAG.getDataLayout(), AS)));
405   Alignment = MinAlign(Alignment, IncrementSize);
406   Store2 = DAG.getTruncStore(
407       Chain, dl, DAG.getDataLayout().isLittleEndian() ? Hi : Lo, Ptr,
408       ST->getPointerInfo().getWithOffset(IncrementSize), NewStoredVT,
409       ST->isVolatile(), ST->isNonTemporal(), Alignment, ST->getAAInfo());
410
411   SDValue Result =
412     DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Store1, Store2);
413   DAGLegalize->ReplaceNode(SDValue(ST, 0), Result);
414 }
415
416 /// Expands an unaligned load to 2 half-size loads.
417 static void
418 ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
419                     const TargetLowering &TLI,
420                     SDValue &ValResult, SDValue &ChainResult) {
421   assert(LD->getAddressingMode() == ISD::UNINDEXED &&
422          "unaligned indexed loads not implemented!");
423   SDValue Chain = LD->getChain();
424   SDValue Ptr = LD->getBasePtr();
425   EVT VT = LD->getValueType(0);
426   EVT LoadedVT = LD->getMemoryVT();
427   SDLoc dl(LD);
428   if (VT.isFloatingPoint() || VT.isVector()) {
429     EVT intVT = EVT::getIntegerVT(*DAG.getContext(), LoadedVT.getSizeInBits());
430     if (TLI.isTypeLegal(intVT) && TLI.isTypeLegal(LoadedVT)) {
431       // Expand to a (misaligned) integer load of the same size,
432       // then bitconvert to floating point or vector.
433       SDValue newLoad = DAG.getLoad(intVT, dl, Chain, Ptr,
434                                     LD->getMemOperand());
435       SDValue Result = DAG.getNode(ISD::BITCAST, dl, LoadedVT, newLoad);
436       if (LoadedVT != VT)
437         Result = DAG.getNode(VT.isFloatingPoint() ? ISD::FP_EXTEND :
438                              ISD::ANY_EXTEND, dl, VT, Result);
439
440       ValResult = Result;
441       ChainResult = Chain;
442       return;
443     }
444
445     // Copy the value to a (aligned) stack slot using (unaligned) integer
446     // loads and stores, then do a (aligned) load from the stack slot.
447     MVT RegVT = TLI.getRegisterType(*DAG.getContext(), intVT);
448     unsigned LoadedBytes = LoadedVT.getSizeInBits() / 8;
449     unsigned RegBytes = RegVT.getSizeInBits() / 8;
450     unsigned NumRegs = (LoadedBytes + RegBytes - 1) / RegBytes;
451
452     // Make sure the stack slot is also aligned for the register type.
453     SDValue StackBase = DAG.CreateStackTemporary(LoadedVT, RegVT);
454
455     SDValue Increment =
456         DAG.getConstant(RegBytes, dl, TLI.getPointerTy(DAG.getDataLayout()));
457     SmallVector<SDValue, 8> Stores;
458     SDValue StackPtr = StackBase;
459     unsigned Offset = 0;
460
461     // Do all but one copies using the full register width.
462     for (unsigned i = 1; i < NumRegs; i++) {
463       // Load one integer register's worth from the original location.
464       SDValue Load = DAG.getLoad(RegVT, dl, Chain, Ptr,
465                                  LD->getPointerInfo().getWithOffset(Offset),
466                                  LD->isVolatile(), LD->isNonTemporal(),
467                                  LD->isInvariant(),
468                                  MinAlign(LD->getAlignment(), Offset),
469                                  LD->getAAInfo());
470       // Follow the load with a store to the stack slot.  Remember the store.
471       Stores.push_back(DAG.getStore(Load.getValue(1), dl, Load, StackPtr,
472                                     MachinePointerInfo(), false, false, 0));
473       // Increment the pointers.
474       Offset += RegBytes;
475       Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr, Increment);
476       StackPtr = DAG.getNode(ISD::ADD, dl, StackPtr.getValueType(), StackPtr,
477                              Increment);
478     }
479
480     // The last copy may be partial.  Do an extending load.
481     EVT MemVT = EVT::getIntegerVT(*DAG.getContext(),
482                                   8 * (LoadedBytes - Offset));
483     SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, RegVT, Chain, Ptr,
484                                   LD->getPointerInfo().getWithOffset(Offset),
485                                   MemVT, LD->isVolatile(),
486                                   LD->isNonTemporal(),
487                                   LD->isInvariant(),
488                                   MinAlign(LD->getAlignment(), Offset),
489                                   LD->getAAInfo());
490     // Follow the load with a store to the stack slot.  Remember the store.
491     // On big-endian machines this requires a truncating store to ensure
492     // that the bits end up in the right place.
493     Stores.push_back(DAG.getTruncStore(Load.getValue(1), dl, Load, StackPtr,
494                                        MachinePointerInfo(), MemVT,
495                                        false, false, 0));
496
497     // The order of the stores doesn't matter - say it with a TokenFactor.
498     SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
499
500     // Finally, perform the original load only redirected to the stack slot.
501     Load = DAG.getExtLoad(LD->getExtensionType(), dl, VT, TF, StackBase,
502                           MachinePointerInfo(), LoadedVT, false,false, false,
503                           0);
504
505     // Callers expect a MERGE_VALUES node.
506     ValResult = Load;
507     ChainResult = TF;
508     return;
509   }
510   assert(LoadedVT.isInteger() && !LoadedVT.isVector() &&
511          "Unaligned load of unsupported type.");
512
513   // Compute the new VT that is half the size of the old one.  This is an
514   // integer MVT.
515   unsigned NumBits = LoadedVT.getSizeInBits();
516   EVT NewLoadedVT;
517   NewLoadedVT = EVT::getIntegerVT(*DAG.getContext(), NumBits/2);
518   NumBits >>= 1;
519
520   unsigned Alignment = LD->getAlignment();
521   unsigned IncrementSize = NumBits / 8;
522   ISD::LoadExtType HiExtType = LD->getExtensionType();
523
524   // If the original load is NON_EXTLOAD, the hi part load must be ZEXTLOAD.
525   if (HiExtType == ISD::NON_EXTLOAD)
526     HiExtType = ISD::ZEXTLOAD;
527
528   // Load the value in two parts
529   SDValue Lo, Hi;
530   if (DAG.getDataLayout().isLittleEndian()) {
531     Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, VT, Chain, Ptr, LD->getPointerInfo(),
532                         NewLoadedVT, LD->isVolatile(),
533                         LD->isNonTemporal(), LD->isInvariant(), Alignment,
534                         LD->getAAInfo());
535     Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
536                       DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
537     Hi = DAG.getExtLoad(HiExtType, dl, VT, Chain, Ptr,
538                         LD->getPointerInfo().getWithOffset(IncrementSize),
539                         NewLoadedVT, LD->isVolatile(),
540                         LD->isNonTemporal(),LD->isInvariant(),
541                         MinAlign(Alignment, IncrementSize), LD->getAAInfo());
542   } else {
543     Hi = DAG.getExtLoad(HiExtType, dl, VT, Chain, Ptr, LD->getPointerInfo(),
544                         NewLoadedVT, LD->isVolatile(),
545                         LD->isNonTemporal(), LD->isInvariant(), Alignment,
546                         LD->getAAInfo());
547     Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
548                       DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
549     Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, VT, Chain, Ptr,
550                         LD->getPointerInfo().getWithOffset(IncrementSize),
551                         NewLoadedVT, LD->isVolatile(),
552                         LD->isNonTemporal(), LD->isInvariant(),
553                         MinAlign(Alignment, IncrementSize), LD->getAAInfo());
554   }
555
556   // aggregate the two parts
557   SDValue ShiftAmount = DAG.getConstant(NumBits, dl,
558                                        TLI.getShiftAmountTy(Hi.getValueType()));
559   SDValue Result = DAG.getNode(ISD::SHL, dl, VT, Hi, ShiftAmount);
560   Result = DAG.getNode(ISD::OR, dl, VT, Result, Lo);
561
562   SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo.getValue(1),
563                              Hi.getValue(1));
564
565   ValResult = Result;
566   ChainResult = TF;
567 }
568
569 /// Some target cannot handle a variable insertion index for the
570 /// INSERT_VECTOR_ELT instruction.  In this case, it
571 /// is necessary to spill the vector being inserted into to memory, perform
572 /// the insert there, and then read the result back.
573 SDValue SelectionDAGLegalize::
574 PerformInsertVectorEltInMemory(SDValue Vec, SDValue Val, SDValue Idx,
575                                SDLoc dl) {
576   SDValue Tmp1 = Vec;
577   SDValue Tmp2 = Val;
578   SDValue Tmp3 = Idx;
579
580   // If the target doesn't support this, we have to spill the input vector
581   // to a temporary stack slot, update the element, then reload it.  This is
582   // badness.  We could also load the value into a vector register (either
583   // with a "move to register" or "extload into register" instruction, then
584   // permute it into place, if the idx is a constant and if the idx is
585   // supported by the target.
586   EVT VT    = Tmp1.getValueType();
587   EVT EltVT = VT.getVectorElementType();
588   EVT IdxVT = Tmp3.getValueType();
589   EVT PtrVT = TLI.getPointerTy(DAG.getDataLayout());
590   SDValue StackPtr = DAG.CreateStackTemporary(VT);
591
592   int SPFI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
593
594   // Store the vector.
595   SDValue Ch = DAG.getStore(DAG.getEntryNode(), dl, Tmp1, StackPtr,
596                             MachinePointerInfo::getFixedStack(SPFI),
597                             false, false, 0);
598
599   // Truncate or zero extend offset to target pointer type.
600   unsigned CastOpc = IdxVT.bitsGT(PtrVT) ? ISD::TRUNCATE : ISD::ZERO_EXTEND;
601   Tmp3 = DAG.getNode(CastOpc, dl, PtrVT, Tmp3);
602   // Add the offset to the index.
603   unsigned EltSize = EltVT.getSizeInBits()/8;
604   Tmp3 = DAG.getNode(ISD::MUL, dl, IdxVT, Tmp3,
605                      DAG.getConstant(EltSize, dl, IdxVT));
606   SDValue StackPtr2 = DAG.getNode(ISD::ADD, dl, IdxVT, Tmp3, StackPtr);
607   // Store the scalar value.
608   Ch = DAG.getTruncStore(Ch, dl, Tmp2, StackPtr2, MachinePointerInfo(), EltVT,
609                          false, false, 0);
610   // Load the updated vector.
611   return DAG.getLoad(VT, dl, Ch, StackPtr,
612                      MachinePointerInfo::getFixedStack(SPFI), false, false,
613                      false, 0);
614 }
615
616
617 SDValue SelectionDAGLegalize::
618 ExpandINSERT_VECTOR_ELT(SDValue Vec, SDValue Val, SDValue Idx, SDLoc dl) {
619   if (ConstantSDNode *InsertPos = dyn_cast<ConstantSDNode>(Idx)) {
620     // SCALAR_TO_VECTOR requires that the type of the value being inserted
621     // match the element type of the vector being created, except for
622     // integers in which case the inserted value can be over width.
623     EVT EltVT = Vec.getValueType().getVectorElementType();
624     if (Val.getValueType() == EltVT ||
625         (EltVT.isInteger() && Val.getValueType().bitsGE(EltVT))) {
626       SDValue ScVec = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl,
627                                   Vec.getValueType(), Val);
628
629       unsigned NumElts = Vec.getValueType().getVectorNumElements();
630       // We generate a shuffle of InVec and ScVec, so the shuffle mask
631       // should be 0,1,2,3,4,5... with the appropriate element replaced with
632       // elt 0 of the RHS.
633       SmallVector<int, 8> ShufOps;
634       for (unsigned i = 0; i != NumElts; ++i)
635         ShufOps.push_back(i != InsertPos->getZExtValue() ? i : NumElts);
636
637       return DAG.getVectorShuffle(Vec.getValueType(), dl, Vec, ScVec,
638                                   &ShufOps[0]);
639     }
640   }
641   return PerformInsertVectorEltInMemory(Vec, Val, Idx, dl);
642 }
643
644 SDValue SelectionDAGLegalize::OptimizeFloatStore(StoreSDNode* ST) {
645   // Turn 'store float 1.0, Ptr' -> 'store int 0x12345678, Ptr'
646   // FIXME: We shouldn't do this for TargetConstantFP's.
647   // FIXME: move this to the DAG Combiner!  Note that we can't regress due
648   // to phase ordering between legalized code and the dag combiner.  This
649   // probably means that we need to integrate dag combiner and legalizer
650   // together.
651   // We generally can't do this one for long doubles.
652   SDValue Chain = ST->getChain();
653   SDValue Ptr = ST->getBasePtr();
654   unsigned Alignment = ST->getAlignment();
655   bool isVolatile = ST->isVolatile();
656   bool isNonTemporal = ST->isNonTemporal();
657   AAMDNodes AAInfo = ST->getAAInfo();
658   SDLoc dl(ST);
659   if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(ST->getValue())) {
660     if (CFP->getValueType(0) == MVT::f32 &&
661         TLI.isTypeLegal(MVT::i32)) {
662       SDValue Con = DAG.getConstant(CFP->getValueAPF().
663                                       bitcastToAPInt().zextOrTrunc(32),
664                                     SDLoc(CFP), MVT::i32);
665       return DAG.getStore(Chain, dl, Con, Ptr, ST->getPointerInfo(),
666                           isVolatile, isNonTemporal, Alignment, AAInfo);
667     }
668
669     if (CFP->getValueType(0) == MVT::f64) {
670       // If this target supports 64-bit registers, do a single 64-bit store.
671       if (TLI.isTypeLegal(MVT::i64)) {
672         SDValue Con = DAG.getConstant(CFP->getValueAPF().bitcastToAPInt().
673                                       zextOrTrunc(64), SDLoc(CFP), MVT::i64);
674         return DAG.getStore(Chain, dl, Con, Ptr, ST->getPointerInfo(),
675                             isVolatile, isNonTemporal, Alignment, AAInfo);
676       }
677
678       if (TLI.isTypeLegal(MVT::i32) && !ST->isVolatile()) {
679         // Otherwise, if the target supports 32-bit registers, use 2 32-bit
680         // stores.  If the target supports neither 32- nor 64-bits, this
681         // xform is certainly not worth it.
682         const APInt &IntVal = CFP->getValueAPF().bitcastToAPInt();
683         SDValue Lo = DAG.getConstant(IntVal.trunc(32), dl, MVT::i32);
684         SDValue Hi = DAG.getConstant(IntVal.lshr(32).trunc(32), dl, MVT::i32);
685         if (DAG.getDataLayout().isBigEndian())
686           std::swap(Lo, Hi);
687
688         Lo = DAG.getStore(Chain, dl, Lo, Ptr, ST->getPointerInfo(), isVolatile,
689                           isNonTemporal, Alignment, AAInfo);
690         Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
691                           DAG.getConstant(4, dl, Ptr.getValueType()));
692         Hi = DAG.getStore(Chain, dl, Hi, Ptr,
693                           ST->getPointerInfo().getWithOffset(4),
694                           isVolatile, isNonTemporal, MinAlign(Alignment, 4U),
695                           AAInfo);
696
697         return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo, Hi);
698       }
699     }
700   }
701   return SDValue(nullptr, 0);
702 }
703
704 void SelectionDAGLegalize::LegalizeStoreOps(SDNode *Node) {
705     StoreSDNode *ST = cast<StoreSDNode>(Node);
706     SDValue Chain = ST->getChain();
707     SDValue Ptr = ST->getBasePtr();
708     SDLoc dl(Node);
709
710     unsigned Alignment = ST->getAlignment();
711     bool isVolatile = ST->isVolatile();
712     bool isNonTemporal = ST->isNonTemporal();
713     AAMDNodes AAInfo = ST->getAAInfo();
714
715     if (!ST->isTruncatingStore()) {
716       if (SDNode *OptStore = OptimizeFloatStore(ST).getNode()) {
717         ReplaceNode(ST, OptStore);
718         return;
719       }
720
721       {
722         SDValue Value = ST->getValue();
723         MVT VT = Value.getSimpleValueType();
724         switch (TLI.getOperationAction(ISD::STORE, VT)) {
725         default: llvm_unreachable("This action is not supported yet!");
726         case TargetLowering::Legal: {
727           // If this is an unaligned store and the target doesn't support it,
728           // expand it.
729           unsigned AS = ST->getAddressSpace();
730           unsigned Align = ST->getAlignment();
731           if (!TLI.allowsMisalignedMemoryAccesses(ST->getMemoryVT(), AS, Align)) {
732             Type *Ty = ST->getMemoryVT().getTypeForEVT(*DAG.getContext());
733             unsigned ABIAlignment = DAG.getDataLayout().getABITypeAlignment(Ty);
734             if (Align < ABIAlignment)
735               ExpandUnalignedStore(cast<StoreSDNode>(Node), DAG, TLI, this);
736           }
737           break;
738         }
739         case TargetLowering::Custom: {
740           SDValue Res = TLI.LowerOperation(SDValue(Node, 0), DAG);
741           if (Res && Res != SDValue(Node, 0))
742             ReplaceNode(SDValue(Node, 0), Res);
743           return;
744         }
745         case TargetLowering::Promote: {
746           MVT NVT = TLI.getTypeToPromoteTo(ISD::STORE, VT);
747           assert(NVT.getSizeInBits() == VT.getSizeInBits() &&
748                  "Can only promote stores to same size type");
749           Value = DAG.getNode(ISD::BITCAST, dl, NVT, Value);
750           SDValue Result =
751             DAG.getStore(Chain, dl, Value, Ptr,
752                          ST->getPointerInfo(), isVolatile,
753                          isNonTemporal, Alignment, AAInfo);
754           ReplaceNode(SDValue(Node, 0), Result);
755           break;
756         }
757         }
758         return;
759       }
760     } else {
761       SDValue Value = ST->getValue();
762
763       EVT StVT = ST->getMemoryVT();
764       unsigned StWidth = StVT.getSizeInBits();
765       auto &DL = DAG.getDataLayout();
766
767       if (StWidth != StVT.getStoreSizeInBits()) {
768         // Promote to a byte-sized store with upper bits zero if not
769         // storing an integral number of bytes.  For example, promote
770         // TRUNCSTORE:i1 X -> TRUNCSTORE:i8 (and X, 1)
771         EVT NVT = EVT::getIntegerVT(*DAG.getContext(),
772                                     StVT.getStoreSizeInBits());
773         Value = DAG.getZeroExtendInReg(Value, dl, StVT);
774         SDValue Result =
775           DAG.getTruncStore(Chain, dl, Value, Ptr, ST->getPointerInfo(),
776                             NVT, isVolatile, isNonTemporal, Alignment, AAInfo);
777         ReplaceNode(SDValue(Node, 0), Result);
778       } else if (StWidth & (StWidth - 1)) {
779         // If not storing a power-of-2 number of bits, expand as two stores.
780         assert(!StVT.isVector() && "Unsupported truncstore!");
781         unsigned RoundWidth = 1 << Log2_32(StWidth);
782         assert(RoundWidth < StWidth);
783         unsigned ExtraWidth = StWidth - RoundWidth;
784         assert(ExtraWidth < RoundWidth);
785         assert(!(RoundWidth % 8) && !(ExtraWidth % 8) &&
786                "Store size not an integral number of bytes!");
787         EVT RoundVT = EVT::getIntegerVT(*DAG.getContext(), RoundWidth);
788         EVT ExtraVT = EVT::getIntegerVT(*DAG.getContext(), ExtraWidth);
789         SDValue Lo, Hi;
790         unsigned IncrementSize;
791
792         if (DL.isLittleEndian()) {
793           // TRUNCSTORE:i24 X -> TRUNCSTORE:i16 X, TRUNCSTORE@+2:i8 (srl X, 16)
794           // Store the bottom RoundWidth bits.
795           Lo = DAG.getTruncStore(Chain, dl, Value, Ptr, ST->getPointerInfo(),
796                                  RoundVT,
797                                  isVolatile, isNonTemporal, Alignment,
798                                  AAInfo);
799
800           // Store the remaining ExtraWidth bits.
801           IncrementSize = RoundWidth / 8;
802           Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
803                             DAG.getConstant(IncrementSize, dl,
804                                             Ptr.getValueType()));
805           Hi = DAG.getNode(ISD::SRL, dl, Value.getValueType(), Value,
806                            DAG.getConstant(RoundWidth, dl,
807                                    TLI.getShiftAmountTy(Value.getValueType())));
808           Hi = DAG.getTruncStore(Chain, dl, Hi, Ptr,
809                              ST->getPointerInfo().getWithOffset(IncrementSize),
810                                  ExtraVT, isVolatile, isNonTemporal,
811                                  MinAlign(Alignment, IncrementSize), AAInfo);
812         } else {
813           // Big endian - avoid unaligned stores.
814           // TRUNCSTORE:i24 X -> TRUNCSTORE:i16 (srl X, 8), TRUNCSTORE@+2:i8 X
815           // Store the top RoundWidth bits.
816           Hi = DAG.getNode(ISD::SRL, dl, Value.getValueType(), Value,
817                            DAG.getConstant(ExtraWidth, dl,
818                                    TLI.getShiftAmountTy(Value.getValueType())));
819           Hi = DAG.getTruncStore(Chain, dl, Hi, Ptr, ST->getPointerInfo(),
820                                  RoundVT, isVolatile, isNonTemporal, Alignment,
821                                  AAInfo);
822
823           // Store the remaining ExtraWidth bits.
824           IncrementSize = RoundWidth / 8;
825           Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
826                             DAG.getConstant(IncrementSize, dl,
827                                             Ptr.getValueType()));
828           Lo = DAG.getTruncStore(Chain, dl, Value, Ptr,
829                               ST->getPointerInfo().getWithOffset(IncrementSize),
830                                  ExtraVT, isVolatile, isNonTemporal,
831                                  MinAlign(Alignment, IncrementSize), AAInfo);
832         }
833
834         // The order of the stores doesn't matter.
835         SDValue Result = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo, Hi);
836         ReplaceNode(SDValue(Node, 0), Result);
837       } else {
838         switch (TLI.getTruncStoreAction(ST->getValue().getSimpleValueType(),
839                                         StVT.getSimpleVT())) {
840         default: llvm_unreachable("This action is not supported yet!");
841         case TargetLowering::Legal: {
842           unsigned AS = ST->getAddressSpace();
843           unsigned Align = ST->getAlignment();
844           // If this is an unaligned store and the target doesn't support it,
845           // expand it.
846           if (!TLI.allowsMisalignedMemoryAccesses(ST->getMemoryVT(), AS, Align)) {
847             Type *Ty = ST->getMemoryVT().getTypeForEVT(*DAG.getContext());
848             unsigned ABIAlignment = DL.getABITypeAlignment(Ty);
849             if (Align < ABIAlignment)
850               ExpandUnalignedStore(cast<StoreSDNode>(Node), DAG, TLI, this);
851           }
852           break;
853         }
854         case TargetLowering::Custom: {
855           SDValue Res = TLI.LowerOperation(SDValue(Node, 0), DAG);
856           if (Res && Res != SDValue(Node, 0))
857             ReplaceNode(SDValue(Node, 0), Res);
858           return;
859         }
860         case TargetLowering::Expand:
861           assert(!StVT.isVector() &&
862                  "Vector Stores are handled in LegalizeVectorOps");
863
864           // TRUNCSTORE:i16 i32 -> STORE i16
865           assert(TLI.isTypeLegal(StVT) &&
866                  "Do not know how to expand this store!");
867           Value = DAG.getNode(ISD::TRUNCATE, dl, StVT, Value);
868           SDValue Result =
869             DAG.getStore(Chain, dl, Value, Ptr, ST->getPointerInfo(),
870                          isVolatile, isNonTemporal, Alignment, AAInfo);
871           ReplaceNode(SDValue(Node, 0), Result);
872           break;
873         }
874       }
875     }
876 }
877
878 void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
879   LoadSDNode *LD = cast<LoadSDNode>(Node);
880   SDValue Chain = LD->getChain();  // The chain.
881   SDValue Ptr = LD->getBasePtr();  // The base pointer.
882   SDValue Value;                   // The value returned by the load op.
883   SDLoc dl(Node);
884
885   ISD::LoadExtType ExtType = LD->getExtensionType();
886   if (ExtType == ISD::NON_EXTLOAD) {
887     MVT VT = Node->getSimpleValueType(0);
888     SDValue RVal = SDValue(Node, 0);
889     SDValue RChain = SDValue(Node, 1);
890
891     switch (TLI.getOperationAction(Node->getOpcode(), VT)) {
892     default: llvm_unreachable("This action is not supported yet!");
893     case TargetLowering::Legal: {
894       unsigned AS = LD->getAddressSpace();
895       unsigned Align = LD->getAlignment();
896       // If this is an unaligned load and the target doesn't support it,
897       // expand it.
898       if (!TLI.allowsMisalignedMemoryAccesses(LD->getMemoryVT(), AS, Align)) {
899         Type *Ty = LD->getMemoryVT().getTypeForEVT(*DAG.getContext());
900         unsigned ABIAlignment = DAG.getDataLayout().getABITypeAlignment(Ty);
901         if (Align < ABIAlignment){
902           ExpandUnalignedLoad(cast<LoadSDNode>(Node), DAG, TLI, RVal, RChain);
903         }
904       }
905       break;
906     }
907     case TargetLowering::Custom: {
908       SDValue Res = TLI.LowerOperation(RVal, DAG);
909       if (Res.getNode()) {
910         RVal = Res;
911         RChain = Res.getValue(1);
912       }
913       break;
914     }
915     case TargetLowering::Promote: {
916       MVT NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), VT);
917       assert(NVT.getSizeInBits() == VT.getSizeInBits() &&
918              "Can only promote loads to same size type");
919
920       SDValue Res = DAG.getLoad(NVT, dl, Chain, Ptr, LD->getMemOperand());
921       RVal = DAG.getNode(ISD::BITCAST, dl, VT, Res);
922       RChain = Res.getValue(1);
923       break;
924     }
925     }
926     if (RChain.getNode() != Node) {
927       assert(RVal.getNode() != Node && "Load must be completely replaced");
928       DAG.ReplaceAllUsesOfValueWith(SDValue(Node, 0), RVal);
929       DAG.ReplaceAllUsesOfValueWith(SDValue(Node, 1), RChain);
930       if (UpdatedNodes) {
931         UpdatedNodes->insert(RVal.getNode());
932         UpdatedNodes->insert(RChain.getNode());
933       }
934       ReplacedNode(Node);
935     }
936     return;
937   }
938
939   EVT SrcVT = LD->getMemoryVT();
940   unsigned SrcWidth = SrcVT.getSizeInBits();
941   unsigned Alignment = LD->getAlignment();
942   bool isVolatile = LD->isVolatile();
943   bool isNonTemporal = LD->isNonTemporal();
944   bool isInvariant = LD->isInvariant();
945   AAMDNodes AAInfo = LD->getAAInfo();
946
947   if (SrcWidth != SrcVT.getStoreSizeInBits() &&
948       // Some targets pretend to have an i1 loading operation, and actually
949       // load an i8.  This trick is correct for ZEXTLOAD because the top 7
950       // bits are guaranteed to be zero; it helps the optimizers understand
951       // that these bits are zero.  It is also useful for EXTLOAD, since it
952       // tells the optimizers that those bits are undefined.  It would be
953       // nice to have an effective generic way of getting these benefits...
954       // Until such a way is found, don't insist on promoting i1 here.
955       (SrcVT != MVT::i1 ||
956        TLI.getLoadExtAction(ExtType, Node->getValueType(0), MVT::i1) ==
957          TargetLowering::Promote)) {
958     // Promote to a byte-sized load if not loading an integral number of
959     // bytes.  For example, promote EXTLOAD:i20 -> EXTLOAD:i24.
960     unsigned NewWidth = SrcVT.getStoreSizeInBits();
961     EVT NVT = EVT::getIntegerVT(*DAG.getContext(), NewWidth);
962     SDValue Ch;
963
964     // The extra bits are guaranteed to be zero, since we stored them that
965     // way.  A zext load from NVT thus automatically gives zext from SrcVT.
966
967     ISD::LoadExtType NewExtType =
968       ExtType == ISD::ZEXTLOAD ? ISD::ZEXTLOAD : ISD::EXTLOAD;
969
970     SDValue Result =
971       DAG.getExtLoad(NewExtType, dl, Node->getValueType(0),
972                      Chain, Ptr, LD->getPointerInfo(),
973                      NVT, isVolatile, isNonTemporal, isInvariant, Alignment,
974                      AAInfo);
975
976     Ch = Result.getValue(1); // The chain.
977
978     if (ExtType == ISD::SEXTLOAD)
979       // Having the top bits zero doesn't help when sign extending.
980       Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl,
981                            Result.getValueType(),
982                            Result, DAG.getValueType(SrcVT));
983     else if (ExtType == ISD::ZEXTLOAD || NVT == Result.getValueType())
984       // All the top bits are guaranteed to be zero - inform the optimizers.
985       Result = DAG.getNode(ISD::AssertZext, dl,
986                            Result.getValueType(), Result,
987                            DAG.getValueType(SrcVT));
988
989     Value = Result;
990     Chain = Ch;
991   } else if (SrcWidth & (SrcWidth - 1)) {
992     // If not loading a power-of-2 number of bits, expand as two loads.
993     assert(!SrcVT.isVector() && "Unsupported extload!");
994     unsigned RoundWidth = 1 << Log2_32(SrcWidth);
995     assert(RoundWidth < SrcWidth);
996     unsigned ExtraWidth = SrcWidth - RoundWidth;
997     assert(ExtraWidth < RoundWidth);
998     assert(!(RoundWidth % 8) && !(ExtraWidth % 8) &&
999            "Load size not an integral number of bytes!");
1000     EVT RoundVT = EVT::getIntegerVT(*DAG.getContext(), RoundWidth);
1001     EVT ExtraVT = EVT::getIntegerVT(*DAG.getContext(), ExtraWidth);
1002     SDValue Lo, Hi, Ch;
1003     unsigned IncrementSize;
1004     auto &DL = DAG.getDataLayout();
1005
1006     if (DL.isLittleEndian()) {
1007       // EXTLOAD:i24 -> ZEXTLOAD:i16 | (shl EXTLOAD@+2:i8, 16)
1008       // Load the bottom RoundWidth bits.
1009       Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, Node->getValueType(0),
1010                           Chain, Ptr,
1011                           LD->getPointerInfo(), RoundVT, isVolatile,
1012                           isNonTemporal, isInvariant, Alignment, AAInfo);
1013
1014       // Load the remaining ExtraWidth bits.
1015       IncrementSize = RoundWidth / 8;
1016       Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
1017                          DAG.getConstant(IncrementSize, dl,
1018                                          Ptr.getValueType()));
1019       Hi = DAG.getExtLoad(ExtType, dl, Node->getValueType(0), Chain, Ptr,
1020                           LD->getPointerInfo().getWithOffset(IncrementSize),
1021                           ExtraVT, isVolatile, isNonTemporal, isInvariant,
1022                           MinAlign(Alignment, IncrementSize), AAInfo);
1023
1024       // Build a factor node to remember that this load is independent of
1025       // the other one.
1026       Ch = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo.getValue(1),
1027                        Hi.getValue(1));
1028
1029       // Move the top bits to the right place.
1030       Hi = DAG.getNode(ISD::SHL, dl, Hi.getValueType(), Hi,
1031                        DAG.getConstant(RoundWidth, dl,
1032                                       TLI.getShiftAmountTy(Hi.getValueType())));
1033
1034       // Join the hi and lo parts.
1035       Value = DAG.getNode(ISD::OR, dl, Node->getValueType(0), Lo, Hi);
1036     } else {
1037       // Big endian - avoid unaligned loads.
1038       // EXTLOAD:i24 -> (shl EXTLOAD:i16, 8) | ZEXTLOAD@+2:i8
1039       // Load the top RoundWidth bits.
1040       Hi = DAG.getExtLoad(ExtType, dl, Node->getValueType(0), Chain, Ptr,
1041                           LD->getPointerInfo(), RoundVT, isVolatile,
1042                           isNonTemporal, isInvariant, Alignment, AAInfo);
1043
1044       // Load the remaining ExtraWidth bits.
1045       IncrementSize = RoundWidth / 8;
1046       Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
1047                          DAG.getConstant(IncrementSize, dl,
1048                                          Ptr.getValueType()));
1049       Lo = DAG.getExtLoad(ISD::ZEXTLOAD,
1050                           dl, Node->getValueType(0), Chain, Ptr,
1051                           LD->getPointerInfo().getWithOffset(IncrementSize),
1052                           ExtraVT, isVolatile, isNonTemporal, isInvariant,
1053                           MinAlign(Alignment, IncrementSize), AAInfo);
1054
1055       // Build a factor node to remember that this load is independent of
1056       // the other one.
1057       Ch = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo.getValue(1),
1058                        Hi.getValue(1));
1059
1060       // Move the top bits to the right place.
1061       Hi = DAG.getNode(ISD::SHL, dl, Hi.getValueType(), Hi,
1062                        DAG.getConstant(ExtraWidth, dl,
1063                                       TLI.getShiftAmountTy(Hi.getValueType())));
1064
1065       // Join the hi and lo parts.
1066       Value = DAG.getNode(ISD::OR, dl, Node->getValueType(0), Lo, Hi);
1067     }
1068
1069     Chain = Ch;
1070   } else {
1071     bool isCustom = false;
1072     switch (TLI.getLoadExtAction(ExtType, Node->getValueType(0),
1073                                  SrcVT.getSimpleVT())) {
1074     default: llvm_unreachable("This action is not supported yet!");
1075     case TargetLowering::Custom:
1076       isCustom = true;
1077       // FALLTHROUGH
1078     case TargetLowering::Legal: {
1079       Value = SDValue(Node, 0);
1080       Chain = SDValue(Node, 1);
1081
1082       if (isCustom) {
1083         SDValue Res = TLI.LowerOperation(SDValue(Node, 0), DAG);
1084         if (Res.getNode()) {
1085           Value = Res;
1086           Chain = Res.getValue(1);
1087         }
1088       } else {
1089         // If this is an unaligned load and the target doesn't support
1090         // it, expand it.
1091         EVT MemVT = LD->getMemoryVT();
1092         unsigned AS = LD->getAddressSpace();
1093         unsigned Align = LD->getAlignment();
1094         if (!TLI.allowsMisalignedMemoryAccesses(MemVT, AS, Align)) {
1095           Type *Ty = LD->getMemoryVT().getTypeForEVT(*DAG.getContext());
1096           unsigned ABIAlignment = DAG.getDataLayout().getABITypeAlignment(Ty);
1097           if (Align < ABIAlignment){
1098             ExpandUnalignedLoad(cast<LoadSDNode>(Node), DAG, TLI, Value, Chain);
1099           }
1100         }
1101       }
1102       break;
1103     }
1104     case TargetLowering::Expand:
1105       if (!TLI.isLoadExtLegal(ISD::EXTLOAD, Node->getValueType(0), SrcVT)) {
1106         // If the source type is not legal, see if there is a legal extload to
1107         // an intermediate type that we can then extend further.
1108         EVT LoadVT = TLI.getRegisterType(SrcVT.getSimpleVT());
1109         if (TLI.isTypeLegal(SrcVT) || // Same as SrcVT == LoadVT?
1110             TLI.isLoadExtLegal(ExtType, LoadVT, SrcVT)) {
1111           // If we are loading a legal type, this is a non-extload followed by a
1112           // full extend.
1113           ISD::LoadExtType MidExtType =
1114               (LoadVT == SrcVT) ? ISD::NON_EXTLOAD : ExtType;
1115
1116           SDValue Load = DAG.getExtLoad(MidExtType, dl, LoadVT, Chain, Ptr,
1117                                         SrcVT, LD->getMemOperand());
1118           unsigned ExtendOp =
1119               ISD::getExtForLoadExtType(SrcVT.isFloatingPoint(), ExtType);
1120           Value = DAG.getNode(ExtendOp, dl, Node->getValueType(0), Load);
1121           Chain = Load.getValue(1);
1122           break;
1123         }
1124       }
1125
1126       assert(!SrcVT.isVector() &&
1127              "Vector Loads are handled in LegalizeVectorOps");
1128
1129       // FIXME: This does not work for vectors on most targets.  Sign-
1130       // and zero-extend operations are currently folded into extending
1131       // loads, whether they are legal or not, and then we end up here
1132       // without any support for legalizing them.
1133       assert(ExtType != ISD::EXTLOAD &&
1134              "EXTLOAD should always be supported!");
1135       // Turn the unsupported load into an EXTLOAD followed by an
1136       // explicit zero/sign extend inreg.
1137       SDValue Result = DAG.getExtLoad(ISD::EXTLOAD, dl,
1138                                       Node->getValueType(0),
1139                                       Chain, Ptr, SrcVT,
1140                                       LD->getMemOperand());
1141       SDValue ValRes;
1142       if (ExtType == ISD::SEXTLOAD)
1143         ValRes = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl,
1144                              Result.getValueType(),
1145                              Result, DAG.getValueType(SrcVT));
1146       else
1147         ValRes = DAG.getZeroExtendInReg(Result, dl, SrcVT.getScalarType());
1148       Value = ValRes;
1149       Chain = Result.getValue(1);
1150       break;
1151     }
1152   }
1153
1154   // Since loads produce two values, make sure to remember that we legalized
1155   // both of them.
1156   if (Chain.getNode() != Node) {
1157     assert(Value.getNode() != Node && "Load must be completely replaced");
1158     DAG.ReplaceAllUsesOfValueWith(SDValue(Node, 0), Value);
1159     DAG.ReplaceAllUsesOfValueWith(SDValue(Node, 1), Chain);
1160     if (UpdatedNodes) {
1161       UpdatedNodes->insert(Value.getNode());
1162       UpdatedNodes->insert(Chain.getNode());
1163     }
1164     ReplacedNode(Node);
1165   }
1166 }
1167
1168 /// Return a legal replacement for the given operation, with all legal operands.
1169 void SelectionDAGLegalize::LegalizeOp(SDNode *Node) {
1170   DEBUG(dbgs() << "\nLegalizing: "; Node->dump(&DAG));
1171
1172   if (Node->getOpcode() == ISD::TargetConstant) // Allow illegal target nodes.
1173     return;
1174
1175 #ifndef NDEBUG
1176   for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
1177     assert(TLI.getTypeAction(*DAG.getContext(), Node->getValueType(i)) ==
1178              TargetLowering::TypeLegal &&
1179            "Unexpected illegal type!");
1180
1181   for (const SDValue &Op : Node->op_values())
1182     assert((TLI.getTypeAction(*DAG.getContext(),
1183                               Op.getValueType()) == TargetLowering::TypeLegal ||
1184                               Op.getOpcode() == ISD::TargetConstant) &&
1185                               "Unexpected illegal type!");
1186 #endif
1187
1188   // Figure out the correct action; the way to query this varies by opcode
1189   TargetLowering::LegalizeAction Action = TargetLowering::Legal;
1190   bool SimpleFinishLegalizing = true;
1191   switch (Node->getOpcode()) {
1192   case ISD::INTRINSIC_W_CHAIN:
1193   case ISD::INTRINSIC_WO_CHAIN:
1194   case ISD::INTRINSIC_VOID:
1195   case ISD::STACKSAVE:
1196     Action = TLI.getOperationAction(Node->getOpcode(), MVT::Other);
1197     break;
1198   case ISD::VAARG:
1199     Action = TLI.getOperationAction(Node->getOpcode(),
1200                                     Node->getValueType(0));
1201     if (Action != TargetLowering::Promote)
1202       Action = TLI.getOperationAction(Node->getOpcode(), MVT::Other);
1203     break;
1204   case ISD::FP_TO_FP16:
1205   case ISD::SINT_TO_FP:
1206   case ISD::UINT_TO_FP:
1207   case ISD::EXTRACT_VECTOR_ELT:
1208     Action = TLI.getOperationAction(Node->getOpcode(),
1209                                     Node->getOperand(0).getValueType());
1210     break;
1211   case ISD::FP_ROUND_INREG:
1212   case ISD::SIGN_EXTEND_INREG: {
1213     EVT InnerType = cast<VTSDNode>(Node->getOperand(1))->getVT();
1214     Action = TLI.getOperationAction(Node->getOpcode(), InnerType);
1215     break;
1216   }
1217   case ISD::ATOMIC_STORE: {
1218     Action = TLI.getOperationAction(Node->getOpcode(),
1219                                     Node->getOperand(2).getValueType());
1220     break;
1221   }
1222   case ISD::SELECT_CC:
1223   case ISD::SETCC:
1224   case ISD::BR_CC: {
1225     unsigned CCOperand = Node->getOpcode() == ISD::SELECT_CC ? 4 :
1226                          Node->getOpcode() == ISD::SETCC ? 2 : 1;
1227     unsigned CompareOperand = Node->getOpcode() == ISD::BR_CC ? 2 : 0;
1228     MVT OpVT = Node->getOperand(CompareOperand).getSimpleValueType();
1229     ISD::CondCode CCCode =
1230         cast<CondCodeSDNode>(Node->getOperand(CCOperand))->get();
1231     Action = TLI.getCondCodeAction(CCCode, OpVT);
1232     if (Action == TargetLowering::Legal) {
1233       if (Node->getOpcode() == ISD::SELECT_CC)
1234         Action = TLI.getOperationAction(Node->getOpcode(),
1235                                         Node->getValueType(0));
1236       else
1237         Action = TLI.getOperationAction(Node->getOpcode(), OpVT);
1238     }
1239     break;
1240   }
1241   case ISD::LOAD:
1242   case ISD::STORE:
1243     // FIXME: Model these properly.  LOAD and STORE are complicated, and
1244     // STORE expects the unlegalized operand in some cases.
1245     SimpleFinishLegalizing = false;
1246     break;
1247   case ISD::CALLSEQ_START:
1248   case ISD::CALLSEQ_END:
1249     // FIXME: This shouldn't be necessary.  These nodes have special properties
1250     // dealing with the recursive nature of legalization.  Removing this
1251     // special case should be done as part of making LegalizeDAG non-recursive.
1252     SimpleFinishLegalizing = false;
1253     break;
1254   case ISD::EXTRACT_ELEMENT:
1255   case ISD::FLT_ROUNDS_:
1256   case ISD::FPOWI:
1257   case ISD::MERGE_VALUES:
1258   case ISD::EH_RETURN:
1259   case ISD::FRAME_TO_ARGS_OFFSET:
1260   case ISD::EH_SJLJ_SETJMP:
1261   case ISD::EH_SJLJ_LONGJMP:
1262     // These operations lie about being legal: when they claim to be legal,
1263     // they should actually be expanded.
1264     Action = TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0));
1265     if (Action == TargetLowering::Legal)
1266       Action = TargetLowering::Expand;
1267     break;
1268   case ISD::INIT_TRAMPOLINE:
1269   case ISD::ADJUST_TRAMPOLINE:
1270   case ISD::FRAMEADDR:
1271   case ISD::RETURNADDR:
1272     // These operations lie about being legal: when they claim to be legal,
1273     // they should actually be custom-lowered.
1274     Action = TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0));
1275     if (Action == TargetLowering::Legal)
1276       Action = TargetLowering::Custom;
1277     break;
1278   case ISD::READ_REGISTER:
1279   case ISD::WRITE_REGISTER:
1280     // Named register is legal in the DAG, but blocked by register name
1281     // selection if not implemented by target (to chose the correct register)
1282     // They'll be converted to Copy(To/From)Reg.
1283     Action = TargetLowering::Legal;
1284     break;
1285   case ISD::DEBUGTRAP:
1286     Action = TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0));
1287     if (Action == TargetLowering::Expand) {
1288       // replace ISD::DEBUGTRAP with ISD::TRAP
1289       SDValue NewVal;
1290       NewVal = DAG.getNode(ISD::TRAP, SDLoc(Node), Node->getVTList(),
1291                            Node->getOperand(0));
1292       ReplaceNode(Node, NewVal.getNode());
1293       LegalizeOp(NewVal.getNode());
1294       return;
1295     }
1296     break;
1297
1298   default:
1299     if (Node->getOpcode() >= ISD::BUILTIN_OP_END) {
1300       Action = TargetLowering::Legal;
1301     } else {
1302       Action = TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0));
1303     }
1304     break;
1305   }
1306
1307   if (SimpleFinishLegalizing) {
1308     SDNode *NewNode = Node;
1309     switch (Node->getOpcode()) {
1310     default: break;
1311     case ISD::SHL:
1312     case ISD::SRL:
1313     case ISD::SRA:
1314     case ISD::ROTL:
1315     case ISD::ROTR:
1316       // Legalizing shifts/rotates requires adjusting the shift amount
1317       // to the appropriate width.
1318       if (!Node->getOperand(1).getValueType().isVector()) {
1319         SDValue SAO =
1320           DAG.getShiftAmountOperand(Node->getOperand(0).getValueType(),
1321                                     Node->getOperand(1));
1322         HandleSDNode Handle(SAO);
1323         LegalizeOp(SAO.getNode());
1324         NewNode = DAG.UpdateNodeOperands(Node, Node->getOperand(0),
1325                                          Handle.getValue());
1326       }
1327       break;
1328     case ISD::SRL_PARTS:
1329     case ISD::SRA_PARTS:
1330     case ISD::SHL_PARTS:
1331       // Legalizing shifts/rotates requires adjusting the shift amount
1332       // to the appropriate width.
1333       if (!Node->getOperand(2).getValueType().isVector()) {
1334         SDValue SAO =
1335           DAG.getShiftAmountOperand(Node->getOperand(0).getValueType(),
1336                                     Node->getOperand(2));
1337         HandleSDNode Handle(SAO);
1338         LegalizeOp(SAO.getNode());
1339         NewNode = DAG.UpdateNodeOperands(Node, Node->getOperand(0),
1340                                          Node->getOperand(1),
1341                                          Handle.getValue());
1342       }
1343       break;
1344     }
1345
1346     if (NewNode != Node) {
1347       ReplaceNode(Node, NewNode);
1348       Node = NewNode;
1349     }
1350     switch (Action) {
1351     case TargetLowering::Legal:
1352       return;
1353     case TargetLowering::Custom: {
1354       // FIXME: The handling for custom lowering with multiple results is
1355       // a complete mess.
1356       SDValue Res = TLI.LowerOperation(SDValue(Node, 0), DAG);
1357       if (Res.getNode()) {
1358         if (!(Res.getNode() != Node || Res.getResNo() != 0))
1359           return;
1360
1361         if (Node->getNumValues() == 1) {
1362           // We can just directly replace this node with the lowered value.
1363           ReplaceNode(SDValue(Node, 0), Res);
1364           return;
1365         }
1366
1367         SmallVector<SDValue, 8> ResultVals;
1368         for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
1369           ResultVals.push_back(Res.getValue(i));
1370         ReplaceNode(Node, ResultVals.data());
1371         return;
1372       }
1373     }
1374       // FALL THROUGH
1375     case TargetLowering::Expand:
1376       ExpandNode(Node);
1377       return;
1378     case TargetLowering::Promote:
1379       PromoteNode(Node);
1380       return;
1381     }
1382   }
1383
1384   switch (Node->getOpcode()) {
1385   default:
1386 #ifndef NDEBUG
1387     dbgs() << "NODE: ";
1388     Node->dump( &DAG);
1389     dbgs() << "\n";
1390 #endif
1391     llvm_unreachable("Do not know how to legalize this operator!");
1392
1393   case ISD::CALLSEQ_START:
1394   case ISD::CALLSEQ_END:
1395     break;
1396   case ISD::LOAD: {
1397     return LegalizeLoadOps(Node);
1398   }
1399   case ISD::STORE: {
1400     return LegalizeStoreOps(Node);
1401   }
1402   }
1403 }
1404
1405 SDValue SelectionDAGLegalize::ExpandExtractFromVectorThroughStack(SDValue Op) {
1406   SDValue Vec = Op.getOperand(0);
1407   SDValue Idx = Op.getOperand(1);
1408   SDLoc dl(Op);
1409
1410   // Before we generate a new store to a temporary stack slot, see if there is
1411   // already one that we can use. There often is because when we scalarize
1412   // vector operations (using SelectionDAG::UnrollVectorOp for example) a whole
1413   // series of EXTRACT_VECTOR_ELT nodes are generated, one for each element in
1414   // the vector. If all are expanded here, we don't want one store per vector
1415   // element.
1416   SDValue StackPtr, Ch;
1417   for (SDNode::use_iterator UI = Vec.getNode()->use_begin(),
1418        UE = Vec.getNode()->use_end(); UI != UE; ++UI) {
1419     SDNode *User = *UI;
1420     if (StoreSDNode *ST = dyn_cast<StoreSDNode>(User)) {
1421       if (ST->isIndexed() || ST->isTruncatingStore() ||
1422           ST->getValue() != Vec)
1423         continue;
1424
1425       // Make sure that nothing else could have stored into the destination of
1426       // this store.
1427       if (!ST->getChain().reachesChainWithoutSideEffects(DAG.getEntryNode()))
1428         continue;
1429
1430       StackPtr = ST->getBasePtr();
1431       Ch = SDValue(ST, 0);
1432       break;
1433     }
1434   }
1435
1436   if (!Ch.getNode()) {
1437     // Store the value to a temporary stack slot, then LOAD the returned part.
1438     StackPtr = DAG.CreateStackTemporary(Vec.getValueType());
1439     Ch = DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr,
1440                       MachinePointerInfo(), false, false, 0);
1441   }
1442
1443   // Add the offset to the index.
1444   unsigned EltSize =
1445       Vec.getValueType().getVectorElementType().getSizeInBits()/8;
1446   Idx = DAG.getNode(ISD::MUL, dl, Idx.getValueType(), Idx,
1447                     DAG.getConstant(EltSize, SDLoc(Vec), Idx.getValueType()));
1448
1449   Idx = DAG.getZExtOrTrunc(Idx, dl, TLI.getPointerTy(DAG.getDataLayout()));
1450   StackPtr = DAG.getNode(ISD::ADD, dl, Idx.getValueType(), Idx, StackPtr);
1451
1452   SDValue NewLoad;
1453
1454   if (Op.getValueType().isVector())
1455     NewLoad = DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr,
1456                           MachinePointerInfo(), false, false, false, 0);
1457   else
1458     NewLoad = DAG.getExtLoad(
1459         ISD::EXTLOAD, dl, Op.getValueType(), Ch, StackPtr, MachinePointerInfo(),
1460         Vec.getValueType().getVectorElementType(), false, false, false, 0);
1461
1462   // Replace the chain going out of the store, by the one out of the load.
1463   DAG.ReplaceAllUsesOfValueWith(Ch, SDValue(NewLoad.getNode(), 1));
1464
1465   // We introduced a cycle though, so update the loads operands, making sure
1466   // to use the original store's chain as an incoming chain.
1467   SmallVector<SDValue, 6> NewLoadOperands(NewLoad->op_begin(),
1468                                           NewLoad->op_end());
1469   NewLoadOperands[0] = Ch;
1470   NewLoad =
1471       SDValue(DAG.UpdateNodeOperands(NewLoad.getNode(), NewLoadOperands), 0);
1472   return NewLoad;
1473 }
1474
1475 SDValue SelectionDAGLegalize::ExpandInsertToVectorThroughStack(SDValue Op) {
1476   assert(Op.getValueType().isVector() && "Non-vector insert subvector!");
1477
1478   SDValue Vec  = Op.getOperand(0);
1479   SDValue Part = Op.getOperand(1);
1480   SDValue Idx  = Op.getOperand(2);
1481   SDLoc dl(Op);
1482
1483   // Store the value to a temporary stack slot, then LOAD the returned part.
1484
1485   SDValue StackPtr = DAG.CreateStackTemporary(Vec.getValueType());
1486   int FI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
1487   MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(FI);
1488
1489   // First store the whole vector.
1490   SDValue Ch = DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr, PtrInfo,
1491                             false, false, 0);
1492
1493   // Then store the inserted part.
1494
1495   // Add the offset to the index.
1496   unsigned EltSize =
1497       Vec.getValueType().getVectorElementType().getSizeInBits()/8;
1498
1499   Idx = DAG.getNode(ISD::MUL, dl, Idx.getValueType(), Idx,
1500                     DAG.getConstant(EltSize, SDLoc(Vec), Idx.getValueType()));
1501   Idx = DAG.getZExtOrTrunc(Idx, dl, TLI.getPointerTy(DAG.getDataLayout()));
1502
1503   SDValue SubStackPtr = DAG.getNode(ISD::ADD, dl, Idx.getValueType(), Idx,
1504                                     StackPtr);
1505
1506   // Store the subvector.
1507   Ch = DAG.getStore(Ch, dl, Part, SubStackPtr,
1508                     MachinePointerInfo(), false, false, 0);
1509
1510   // Finally, load the updated vector.
1511   return DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr, PtrInfo,
1512                      false, false, false, 0);
1513 }
1514
1515 SDValue SelectionDAGLegalize::ExpandVectorBuildThroughStack(SDNode* Node) {
1516   // We can't handle this case efficiently.  Allocate a sufficiently
1517   // aligned object on the stack, store each element into it, then load
1518   // the result as a vector.
1519   // Create the stack frame object.
1520   EVT VT = Node->getValueType(0);
1521   EVT EltVT = VT.getVectorElementType();
1522   SDLoc dl(Node);
1523   SDValue FIPtr = DAG.CreateStackTemporary(VT);
1524   int FI = cast<FrameIndexSDNode>(FIPtr.getNode())->getIndex();
1525   MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(FI);
1526
1527   // Emit a store of each element to the stack slot.
1528   SmallVector<SDValue, 8> Stores;
1529   unsigned TypeByteSize = EltVT.getSizeInBits() / 8;
1530   // Store (in the right endianness) the elements to memory.
1531   for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
1532     // Ignore undef elements.
1533     if (Node->getOperand(i).getOpcode() == ISD::UNDEF) continue;
1534
1535     unsigned Offset = TypeByteSize*i;
1536
1537     SDValue Idx = DAG.getConstant(Offset, dl, FIPtr.getValueType());
1538     Idx = DAG.getNode(ISD::ADD, dl, FIPtr.getValueType(), FIPtr, Idx);
1539
1540     // If the destination vector element type is narrower than the source
1541     // element type, only store the bits necessary.
1542     if (EltVT.bitsLT(Node->getOperand(i).getValueType().getScalarType())) {
1543       Stores.push_back(DAG.getTruncStore(DAG.getEntryNode(), dl,
1544                                          Node->getOperand(i), Idx,
1545                                          PtrInfo.getWithOffset(Offset),
1546                                          EltVT, false, false, 0));
1547     } else
1548       Stores.push_back(DAG.getStore(DAG.getEntryNode(), dl,
1549                                     Node->getOperand(i), Idx,
1550                                     PtrInfo.getWithOffset(Offset),
1551                                     false, false, 0));
1552   }
1553
1554   SDValue StoreChain;
1555   if (!Stores.empty())    // Not all undef elements?
1556     StoreChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
1557   else
1558     StoreChain = DAG.getEntryNode();
1559
1560   // Result is a load from the stack slot.
1561   return DAG.getLoad(VT, dl, StoreChain, FIPtr, PtrInfo,
1562                      false, false, false, 0);
1563 }
1564
1565 SDValue SelectionDAGLegalize::ExpandFCOPYSIGN(SDNode* Node) {
1566   SDLoc dl(Node);
1567   SDValue Tmp1 = Node->getOperand(0);
1568   SDValue Tmp2 = Node->getOperand(1);
1569
1570   // Get the sign bit of the RHS.  First obtain a value that has the same
1571   // sign as the sign bit, i.e. negative if and only if the sign bit is 1.
1572   SDValue SignBit;
1573   EVT FloatVT = Tmp2.getValueType();
1574   EVT IVT = EVT::getIntegerVT(*DAG.getContext(), FloatVT.getSizeInBits());
1575   if (TLI.isTypeLegal(IVT)) {
1576     // Convert to an integer with the same sign bit.
1577     SignBit = DAG.getNode(ISD::BITCAST, dl, IVT, Tmp2);
1578   } else {
1579     auto &DL = DAG.getDataLayout();
1580     // Store the float to memory, then load the sign part out as an integer.
1581     MVT LoadTy = TLI.getPointerTy(DL);
1582     // First create a temporary that is aligned for both the load and store.
1583     SDValue StackPtr = DAG.CreateStackTemporary(FloatVT, LoadTy);
1584     // Then store the float to it.
1585     SDValue Ch =
1586       DAG.getStore(DAG.getEntryNode(), dl, Tmp2, StackPtr, MachinePointerInfo(),
1587                    false, false, 0);
1588     if (DL.isBigEndian()) {
1589       assert(FloatVT.isByteSized() && "Unsupported floating point type!");
1590       // Load out a legal integer with the same sign bit as the float.
1591       SignBit = DAG.getLoad(LoadTy, dl, Ch, StackPtr, MachinePointerInfo(),
1592                             false, false, false, 0);
1593     } else { // Little endian
1594       SDValue LoadPtr = StackPtr;
1595       // The float may be wider than the integer we are going to load.  Advance
1596       // the pointer so that the loaded integer will contain the sign bit.
1597       unsigned Strides = (FloatVT.getSizeInBits()-1)/LoadTy.getSizeInBits();
1598       unsigned ByteOffset = (Strides * LoadTy.getSizeInBits()) / 8;
1599       LoadPtr = DAG.getNode(ISD::ADD, dl, LoadPtr.getValueType(), LoadPtr,
1600                            DAG.getConstant(ByteOffset, dl,
1601                                            LoadPtr.getValueType()));
1602       // Load a legal integer containing the sign bit.
1603       SignBit = DAG.getLoad(LoadTy, dl, Ch, LoadPtr, MachinePointerInfo(),
1604                             false, false, false, 0);
1605       // Move the sign bit to the top bit of the loaded integer.
1606       unsigned BitShift = LoadTy.getSizeInBits() -
1607         (FloatVT.getSizeInBits() - 8 * ByteOffset);
1608       assert(BitShift < LoadTy.getSizeInBits() && "Pointer advanced wrong?");
1609       if (BitShift)
1610         SignBit = DAG.getNode(ISD::SHL, dl, LoadTy, SignBit,
1611                               DAG.getConstant(BitShift, dl,
1612                                  TLI.getShiftAmountTy(SignBit.getValueType())));
1613     }
1614   }
1615   // Now get the sign bit proper, by seeing whether the value is negative.
1616   SignBit = DAG.getSetCC(dl, getSetCCResultType(SignBit.getValueType()),
1617                          SignBit,
1618                          DAG.getConstant(0, dl, SignBit.getValueType()),
1619                          ISD::SETLT);
1620   // Get the absolute value of the result.
1621   SDValue AbsVal = DAG.getNode(ISD::FABS, dl, Tmp1.getValueType(), Tmp1);
1622   // Select between the nabs and abs value based on the sign bit of
1623   // the input.
1624   return DAG.getSelect(dl, AbsVal.getValueType(), SignBit,
1625                       DAG.getNode(ISD::FNEG, dl, AbsVal.getValueType(), AbsVal),
1626                       AbsVal);
1627 }
1628
1629 void SelectionDAGLegalize::ExpandDYNAMIC_STACKALLOC(SDNode* Node,
1630                                            SmallVectorImpl<SDValue> &Results) {
1631   unsigned SPReg = TLI.getStackPointerRegisterToSaveRestore();
1632   assert(SPReg && "Target cannot require DYNAMIC_STACKALLOC expansion and"
1633           " not tell us which reg is the stack pointer!");
1634   SDLoc dl(Node);
1635   EVT VT = Node->getValueType(0);
1636   SDValue Tmp1 = SDValue(Node, 0);
1637   SDValue Tmp2 = SDValue(Node, 1);
1638   SDValue Tmp3 = Node->getOperand(2);
1639   SDValue Chain = Tmp1.getOperand(0);
1640
1641   // Chain the dynamic stack allocation so that it doesn't modify the stack
1642   // pointer when other instructions are using the stack.
1643   Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(0, dl, true), dl);
1644
1645   SDValue Size  = Tmp2.getOperand(1);
1646   SDValue SP = DAG.getCopyFromReg(Chain, dl, SPReg, VT);
1647   Chain = SP.getValue(1);
1648   unsigned Align = cast<ConstantSDNode>(Tmp3)->getZExtValue();
1649   unsigned StackAlign =
1650       DAG.getSubtarget().getFrameLowering()->getStackAlignment();
1651   Tmp1 = DAG.getNode(ISD::SUB, dl, VT, SP, Size);       // Value
1652   if (Align > StackAlign)
1653     Tmp1 = DAG.getNode(ISD::AND, dl, VT, Tmp1,
1654                        DAG.getConstant(-(uint64_t)Align, dl, VT));
1655   Chain = DAG.getCopyToReg(Chain, dl, SPReg, Tmp1);     // Output chain
1656
1657   Tmp2 = DAG.getCALLSEQ_END(Chain, DAG.getIntPtrConstant(0, dl, true),
1658                             DAG.getIntPtrConstant(0, dl, true), SDValue(), dl);
1659
1660   Results.push_back(Tmp1);
1661   Results.push_back(Tmp2);
1662 }
1663
1664 /// Legalize a SETCC with given LHS and RHS and condition code CC on the current
1665 /// target.
1666 ///
1667 /// If the SETCC has been legalized using AND / OR, then the legalized node
1668 /// will be stored in LHS. RHS and CC will be set to SDValue(). NeedInvert
1669 /// will be set to false.
1670 ///
1671 /// If the SETCC has been legalized by using getSetCCSwappedOperands(),
1672 /// then the values of LHS and RHS will be swapped, CC will be set to the
1673 /// new condition, and NeedInvert will be set to false.
1674 ///
1675 /// If the SETCC has been legalized using the inverse condcode, then LHS and
1676 /// RHS will be unchanged, CC will set to the inverted condcode, and NeedInvert
1677 /// will be set to true. The caller must invert the result of the SETCC with
1678 /// SelectionDAG::getLogicalNOT() or take equivalent action to swap the effect
1679 /// of a true/false result.
1680 ///
1681 /// \returns true if the SetCC has been legalized, false if it hasn't.
1682 bool SelectionDAGLegalize::LegalizeSetCCCondCode(EVT VT,
1683                                                  SDValue &LHS, SDValue &RHS,
1684                                                  SDValue &CC,
1685                                                  bool &NeedInvert,
1686                                                  SDLoc dl) {
1687   MVT OpVT = LHS.getSimpleValueType();
1688   ISD::CondCode CCCode = cast<CondCodeSDNode>(CC)->get();
1689   NeedInvert = false;
1690   switch (TLI.getCondCodeAction(CCCode, OpVT)) {
1691   default: llvm_unreachable("Unknown condition code action!");
1692   case TargetLowering::Legal:
1693     // Nothing to do.
1694     break;
1695   case TargetLowering::Expand: {
1696     ISD::CondCode InvCC = ISD::getSetCCSwappedOperands(CCCode);
1697     if (TLI.isCondCodeLegal(InvCC, OpVT)) {
1698       std::swap(LHS, RHS);
1699       CC = DAG.getCondCode(InvCC);
1700       return true;
1701     }
1702     ISD::CondCode CC1 = ISD::SETCC_INVALID, CC2 = ISD::SETCC_INVALID;
1703     unsigned Opc = 0;
1704     switch (CCCode) {
1705     default: llvm_unreachable("Don't know how to expand this condition!");
1706     case ISD::SETO:
1707         assert(TLI.getCondCodeAction(ISD::SETOEQ, OpVT)
1708             == TargetLowering::Legal
1709             && "If SETO is expanded, SETOEQ must be legal!");
1710         CC1 = ISD::SETOEQ; CC2 = ISD::SETOEQ; Opc = ISD::AND; break;
1711     case ISD::SETUO:
1712         assert(TLI.getCondCodeAction(ISD::SETUNE, OpVT)
1713             == TargetLowering::Legal
1714             && "If SETUO is expanded, SETUNE must be legal!");
1715         CC1 = ISD::SETUNE; CC2 = ISD::SETUNE; Opc = ISD::OR;  break;
1716     case ISD::SETOEQ:
1717     case ISD::SETOGT:
1718     case ISD::SETOGE:
1719     case ISD::SETOLT:
1720     case ISD::SETOLE:
1721     case ISD::SETONE:
1722     case ISD::SETUEQ:
1723     case ISD::SETUNE:
1724     case ISD::SETUGT:
1725     case ISD::SETUGE:
1726     case ISD::SETULT:
1727     case ISD::SETULE:
1728         // If we are floating point, assign and break, otherwise fall through.
1729         if (!OpVT.isInteger()) {
1730           // We can use the 4th bit to tell if we are the unordered
1731           // or ordered version of the opcode.
1732           CC2 = ((unsigned)CCCode & 0x8U) ? ISD::SETUO : ISD::SETO;
1733           Opc = ((unsigned)CCCode & 0x8U) ? ISD::OR : ISD::AND;
1734           CC1 = (ISD::CondCode)(((int)CCCode & 0x7) | 0x10);
1735           break;
1736         }
1737         // Fallthrough if we are unsigned integer.
1738     case ISD::SETLE:
1739     case ISD::SETGT:
1740     case ISD::SETGE:
1741     case ISD::SETLT:
1742       // We only support using the inverted operation, which is computed above
1743       // and not a different manner of supporting expanding these cases.
1744       llvm_unreachable("Don't know how to expand this condition!");
1745     case ISD::SETNE:
1746     case ISD::SETEQ:
1747       // Try inverting the result of the inverse condition.
1748       InvCC = CCCode == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ;
1749       if (TLI.isCondCodeLegal(InvCC, OpVT)) {
1750         CC = DAG.getCondCode(InvCC);
1751         NeedInvert = true;
1752         return true;
1753       }
1754       // If inverting the condition didn't work then we have no means to expand
1755       // the condition.
1756       llvm_unreachable("Don't know how to expand this condition!");
1757     }
1758
1759     SDValue SetCC1, SetCC2;
1760     if (CCCode != ISD::SETO && CCCode != ISD::SETUO) {
1761       // If we aren't the ordered or unorder operation,
1762       // then the pattern is (LHS CC1 RHS) Opc (LHS CC2 RHS).
1763       SetCC1 = DAG.getSetCC(dl, VT, LHS, RHS, CC1);
1764       SetCC2 = DAG.getSetCC(dl, VT, LHS, RHS, CC2);
1765     } else {
1766       // Otherwise, the pattern is (LHS CC1 LHS) Opc (RHS CC2 RHS)
1767       SetCC1 = DAG.getSetCC(dl, VT, LHS, LHS, CC1);
1768       SetCC2 = DAG.getSetCC(dl, VT, RHS, RHS, CC2);
1769     }
1770     LHS = DAG.getNode(Opc, dl, VT, SetCC1, SetCC2);
1771     RHS = SDValue();
1772     CC  = SDValue();
1773     return true;
1774   }
1775   }
1776   return false;
1777 }
1778
1779 /// Emit a store/load combination to the stack.  This stores
1780 /// SrcOp to a stack slot of type SlotVT, truncating it if needed.  It then does
1781 /// a load from the stack slot to DestVT, extending it if needed.
1782 /// The resultant code need not be legal.
1783 SDValue SelectionDAGLegalize::EmitStackConvert(SDValue SrcOp,
1784                                                EVT SlotVT,
1785                                                EVT DestVT,
1786                                                SDLoc dl) {
1787   // Create the stack frame object.
1788   unsigned SrcAlign = DAG.getDataLayout().getPrefTypeAlignment(
1789       SrcOp.getValueType().getTypeForEVT(*DAG.getContext()));
1790   SDValue FIPtr = DAG.CreateStackTemporary(SlotVT, SrcAlign);
1791
1792   FrameIndexSDNode *StackPtrFI = cast<FrameIndexSDNode>(FIPtr);
1793   int SPFI = StackPtrFI->getIndex();
1794   MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(SPFI);
1795
1796   unsigned SrcSize = SrcOp.getValueType().getSizeInBits();
1797   unsigned SlotSize = SlotVT.getSizeInBits();
1798   unsigned DestSize = DestVT.getSizeInBits();
1799   Type *DestType = DestVT.getTypeForEVT(*DAG.getContext());
1800   unsigned DestAlign = DAG.getDataLayout().getPrefTypeAlignment(DestType);
1801
1802   // Emit a store to the stack slot.  Use a truncstore if the input value is
1803   // later than DestVT.
1804   SDValue Store;
1805
1806   if (SrcSize > SlotSize)
1807     Store = DAG.getTruncStore(DAG.getEntryNode(), dl, SrcOp, FIPtr,
1808                               PtrInfo, SlotVT, false, false, SrcAlign);
1809   else {
1810     assert(SrcSize == SlotSize && "Invalid store");
1811     Store = DAG.getStore(DAG.getEntryNode(), dl, SrcOp, FIPtr,
1812                          PtrInfo, false, false, SrcAlign);
1813   }
1814
1815   // Result is a load from the stack slot.
1816   if (SlotSize == DestSize)
1817     return DAG.getLoad(DestVT, dl, Store, FIPtr, PtrInfo,
1818                        false, false, false, DestAlign);
1819
1820   assert(SlotSize < DestSize && "Unknown extension!");
1821   return DAG.getExtLoad(ISD::EXTLOAD, dl, DestVT, Store, FIPtr,
1822                         PtrInfo, SlotVT, false, false, false, DestAlign);
1823 }
1824
1825 SDValue SelectionDAGLegalize::ExpandSCALAR_TO_VECTOR(SDNode *Node) {
1826   SDLoc dl(Node);
1827   // Create a vector sized/aligned stack slot, store the value to element #0,
1828   // then load the whole vector back out.
1829   SDValue StackPtr = DAG.CreateStackTemporary(Node->getValueType(0));
1830
1831   FrameIndexSDNode *StackPtrFI = cast<FrameIndexSDNode>(StackPtr);
1832   int SPFI = StackPtrFI->getIndex();
1833
1834   SDValue Ch = DAG.getTruncStore(DAG.getEntryNode(), dl, Node->getOperand(0),
1835                                  StackPtr,
1836                                  MachinePointerInfo::getFixedStack(SPFI),
1837                                  Node->getValueType(0).getVectorElementType(),
1838                                  false, false, 0);
1839   return DAG.getLoad(Node->getValueType(0), dl, Ch, StackPtr,
1840                      MachinePointerInfo::getFixedStack(SPFI),
1841                      false, false, false, 0);
1842 }
1843
1844 static bool
1845 ExpandBVWithShuffles(SDNode *Node, SelectionDAG &DAG,
1846                      const TargetLowering &TLI, SDValue &Res) {
1847   unsigned NumElems = Node->getNumOperands();
1848   SDLoc dl(Node);
1849   EVT VT = Node->getValueType(0);
1850
1851   // Try to group the scalars into pairs, shuffle the pairs together, then
1852   // shuffle the pairs of pairs together, etc. until the vector has
1853   // been built. This will work only if all of the necessary shuffle masks
1854   // are legal.
1855
1856   // We do this in two phases; first to check the legality of the shuffles,
1857   // and next, assuming that all shuffles are legal, to create the new nodes.
1858   for (int Phase = 0; Phase < 2; ++Phase) {
1859     SmallVector<std::pair<SDValue, SmallVector<int, 16> >, 16> IntermedVals,
1860                                                                NewIntermedVals;
1861     for (unsigned i = 0; i < NumElems; ++i) {
1862       SDValue V = Node->getOperand(i);
1863       if (V.getOpcode() == ISD::UNDEF)
1864         continue;
1865
1866       SDValue Vec;
1867       if (Phase)
1868         Vec = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, VT, V);
1869       IntermedVals.push_back(std::make_pair(Vec, SmallVector<int, 16>(1, i)));
1870     }
1871
1872     while (IntermedVals.size() > 2) {
1873       NewIntermedVals.clear();
1874       for (unsigned i = 0, e = (IntermedVals.size() & ~1u); i < e; i += 2) {
1875         // This vector and the next vector are shuffled together (simply to
1876         // append the one to the other).
1877         SmallVector<int, 16> ShuffleVec(NumElems, -1);
1878
1879         SmallVector<int, 16> FinalIndices;
1880         FinalIndices.reserve(IntermedVals[i].second.size() +
1881                              IntermedVals[i+1].second.size());
1882         
1883         int k = 0;
1884         for (unsigned j = 0, f = IntermedVals[i].second.size(); j != f;
1885              ++j, ++k) {
1886           ShuffleVec[k] = j;
1887           FinalIndices.push_back(IntermedVals[i].second[j]);
1888         }
1889         for (unsigned j = 0, f = IntermedVals[i+1].second.size(); j != f;
1890              ++j, ++k) {
1891           ShuffleVec[k] = NumElems + j;
1892           FinalIndices.push_back(IntermedVals[i+1].second[j]);
1893         }
1894
1895         SDValue Shuffle;
1896         if (Phase)
1897           Shuffle = DAG.getVectorShuffle(VT, dl, IntermedVals[i].first,
1898                                          IntermedVals[i+1].first,
1899                                          ShuffleVec.data());
1900         else if (!TLI.isShuffleMaskLegal(ShuffleVec, VT))
1901           return false;
1902         NewIntermedVals.push_back(
1903             std::make_pair(Shuffle, std::move(FinalIndices)));
1904       }
1905
1906       // If we had an odd number of defined values, then append the last
1907       // element to the array of new vectors.
1908       if ((IntermedVals.size() & 1) != 0)
1909         NewIntermedVals.push_back(IntermedVals.back());
1910
1911       IntermedVals.swap(NewIntermedVals);
1912     }
1913
1914     assert(IntermedVals.size() <= 2 && IntermedVals.size() > 0 &&
1915            "Invalid number of intermediate vectors");
1916     SDValue Vec1 = IntermedVals[0].first;
1917     SDValue Vec2;
1918     if (IntermedVals.size() > 1)
1919       Vec2 = IntermedVals[1].first;
1920     else if (Phase)
1921       Vec2 = DAG.getUNDEF(VT);
1922
1923     SmallVector<int, 16> ShuffleVec(NumElems, -1);
1924     for (unsigned i = 0, e = IntermedVals[0].second.size(); i != e; ++i)
1925       ShuffleVec[IntermedVals[0].second[i]] = i;
1926     for (unsigned i = 0, e = IntermedVals[1].second.size(); i != e; ++i)
1927       ShuffleVec[IntermedVals[1].second[i]] = NumElems + i;
1928
1929     if (Phase)
1930       Res = DAG.getVectorShuffle(VT, dl, Vec1, Vec2, ShuffleVec.data());
1931     else if (!TLI.isShuffleMaskLegal(ShuffleVec, VT))
1932       return false;
1933   }
1934
1935   return true;
1936 }
1937
1938 /// Expand a BUILD_VECTOR node on targets that don't
1939 /// support the operation, but do support the resultant vector type.
1940 SDValue SelectionDAGLegalize::ExpandBUILD_VECTOR(SDNode *Node) {
1941   unsigned NumElems = Node->getNumOperands();
1942   SDValue Value1, Value2;
1943   SDLoc dl(Node);
1944   EVT VT = Node->getValueType(0);
1945   EVT OpVT = Node->getOperand(0).getValueType();
1946   EVT EltVT = VT.getVectorElementType();
1947
1948   // If the only non-undef value is the low element, turn this into a
1949   // SCALAR_TO_VECTOR node.  If this is { X, X, X, X }, determine X.
1950   bool isOnlyLowElement = true;
1951   bool MoreThanTwoValues = false;
1952   bool isConstant = true;
1953   for (unsigned i = 0; i < NumElems; ++i) {
1954     SDValue V = Node->getOperand(i);
1955     if (V.getOpcode() == ISD::UNDEF)
1956       continue;
1957     if (i > 0)
1958       isOnlyLowElement = false;
1959     if (!isa<ConstantFPSDNode>(V) && !isa<ConstantSDNode>(V))
1960       isConstant = false;
1961
1962     if (!Value1.getNode()) {
1963       Value1 = V;
1964     } else if (!Value2.getNode()) {
1965       if (V != Value1)
1966         Value2 = V;
1967     } else if (V != Value1 && V != Value2) {
1968       MoreThanTwoValues = true;
1969     }
1970   }
1971
1972   if (!Value1.getNode())
1973     return DAG.getUNDEF(VT);
1974
1975   if (isOnlyLowElement)
1976     return DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, VT, Node->getOperand(0));
1977
1978   // If all elements are constants, create a load from the constant pool.
1979   if (isConstant) {
1980     SmallVector<Constant*, 16> CV;
1981     for (unsigned i = 0, e = NumElems; i != e; ++i) {
1982       if (ConstantFPSDNode *V =
1983           dyn_cast<ConstantFPSDNode>(Node->getOperand(i))) {
1984         CV.push_back(const_cast<ConstantFP *>(V->getConstantFPValue()));
1985       } else if (ConstantSDNode *V =
1986                  dyn_cast<ConstantSDNode>(Node->getOperand(i))) {
1987         if (OpVT==EltVT)
1988           CV.push_back(const_cast<ConstantInt *>(V->getConstantIntValue()));
1989         else {
1990           // If OpVT and EltVT don't match, EltVT is not legal and the
1991           // element values have been promoted/truncated earlier.  Undo this;
1992           // we don't want a v16i8 to become a v16i32 for example.
1993           const ConstantInt *CI = V->getConstantIntValue();
1994           CV.push_back(ConstantInt::get(EltVT.getTypeForEVT(*DAG.getContext()),
1995                                         CI->getZExtValue()));
1996         }
1997       } else {
1998         assert(Node->getOperand(i).getOpcode() == ISD::UNDEF);
1999         Type *OpNTy = EltVT.getTypeForEVT(*DAG.getContext());
2000         CV.push_back(UndefValue::get(OpNTy));
2001       }
2002     }
2003     Constant *CP = ConstantVector::get(CV);
2004     SDValue CPIdx =
2005         DAG.getConstantPool(CP, TLI.getPointerTy(DAG.getDataLayout()));
2006     unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
2007     return DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
2008                        MachinePointerInfo::getConstantPool(),
2009                        false, false, false, Alignment);
2010   }
2011
2012   SmallSet<SDValue, 16> DefinedValues;
2013   for (unsigned i = 0; i < NumElems; ++i) {
2014     if (Node->getOperand(i).getOpcode() == ISD::UNDEF)
2015       continue;
2016     DefinedValues.insert(Node->getOperand(i));
2017   }
2018
2019   if (TLI.shouldExpandBuildVectorWithShuffles(VT, DefinedValues.size())) {
2020     if (!MoreThanTwoValues) {
2021       SmallVector<int, 8> ShuffleVec(NumElems, -1);
2022       for (unsigned i = 0; i < NumElems; ++i) {
2023         SDValue V = Node->getOperand(i);
2024         if (V.getOpcode() == ISD::UNDEF)
2025           continue;
2026         ShuffleVec[i] = V == Value1 ? 0 : NumElems;
2027       }
2028       if (TLI.isShuffleMaskLegal(ShuffleVec, Node->getValueType(0))) {
2029         // Get the splatted value into the low element of a vector register.
2030         SDValue Vec1 = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, VT, Value1);
2031         SDValue Vec2;
2032         if (Value2.getNode())
2033           Vec2 = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, VT, Value2);
2034         else
2035           Vec2 = DAG.getUNDEF(VT);
2036
2037         // Return shuffle(LowValVec, undef, <0,0,0,0>)
2038         return DAG.getVectorShuffle(VT, dl, Vec1, Vec2, ShuffleVec.data());
2039       }
2040     } else {
2041       SDValue Res;
2042       if (ExpandBVWithShuffles(Node, DAG, TLI, Res))
2043         return Res;
2044     }
2045   }
2046
2047   // Otherwise, we can't handle this case efficiently.
2048   return ExpandVectorBuildThroughStack(Node);
2049 }
2050
2051 // Expand a node into a call to a libcall.  If the result value
2052 // does not fit into a register, return the lo part and set the hi part to the
2053 // by-reg argument.  If it does fit into a single register, return the result
2054 // and leave the Hi part unset.
2055 SDValue SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, SDNode *Node,
2056                                             bool isSigned) {
2057   TargetLowering::ArgListTy Args;
2058   TargetLowering::ArgListEntry Entry;
2059   for (const SDValue &Op : Node->op_values()) {
2060     EVT ArgVT = Op.getValueType();
2061     Type *ArgTy = ArgVT.getTypeForEVT(*DAG.getContext());
2062     Entry.Node = Op;
2063     Entry.Ty = ArgTy;
2064     Entry.isSExt = isSigned;
2065     Entry.isZExt = !isSigned;
2066     Args.push_back(Entry);
2067   }
2068   SDValue Callee = DAG.getExternalSymbol(TLI.getLibcallName(LC),
2069                                          TLI.getPointerTy(DAG.getDataLayout()));
2070
2071   Type *RetTy = Node->getValueType(0).getTypeForEVT(*DAG.getContext());
2072
2073   // By default, the input chain to this libcall is the entry node of the
2074   // function. If the libcall is going to be emitted as a tail call then
2075   // TLI.isUsedByReturnOnly will change it to the right chain if the return
2076   // node which is being folded has a non-entry input chain.
2077   SDValue InChain = DAG.getEntryNode();
2078
2079   // isTailCall may be true since the callee does not reference caller stack
2080   // frame. Check if it's in the right position.
2081   SDValue TCChain = InChain;
2082   bool isTailCall = TLI.isInTailCallPosition(DAG, Node, TCChain);
2083   if (isTailCall)
2084     InChain = TCChain;
2085
2086   TargetLowering::CallLoweringInfo CLI(DAG);
2087   CLI.setDebugLoc(SDLoc(Node)).setChain(InChain)
2088     .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args), 0)
2089     .setTailCall(isTailCall).setSExtResult(isSigned).setZExtResult(!isSigned);
2090
2091   std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);
2092
2093   if (!CallInfo.second.getNode())
2094     // It's a tailcall, return the chain (which is the DAG root).
2095     return DAG.getRoot();
2096
2097   return CallInfo.first;
2098 }
2099
2100 /// Generate a libcall taking the given operands as arguments
2101 /// and returning a result of type RetVT.
2102 SDValue SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, EVT RetVT,
2103                                             const SDValue *Ops, unsigned NumOps,
2104                                             bool isSigned, SDLoc dl) {
2105   TargetLowering::ArgListTy Args;
2106   Args.reserve(NumOps);
2107
2108   TargetLowering::ArgListEntry Entry;
2109   for (unsigned i = 0; i != NumOps; ++i) {
2110     Entry.Node = Ops[i];
2111     Entry.Ty = Entry.Node.getValueType().getTypeForEVT(*DAG.getContext());
2112     Entry.isSExt = isSigned;
2113     Entry.isZExt = !isSigned;
2114     Args.push_back(Entry);
2115   }
2116   SDValue Callee = DAG.getExternalSymbol(TLI.getLibcallName(LC),
2117                                          TLI.getPointerTy(DAG.getDataLayout()));
2118
2119   Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());
2120
2121   TargetLowering::CallLoweringInfo CLI(DAG);
2122   CLI.setDebugLoc(dl).setChain(DAG.getEntryNode())
2123     .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args), 0)
2124     .setSExtResult(isSigned).setZExtResult(!isSigned);
2125
2126   std::pair<SDValue,SDValue> CallInfo = TLI.LowerCallTo(CLI);
2127
2128   return CallInfo.first;
2129 }
2130
2131 // Expand a node into a call to a libcall. Similar to
2132 // ExpandLibCall except that the first operand is the in-chain.
2133 std::pair<SDValue, SDValue>
2134 SelectionDAGLegalize::ExpandChainLibCall(RTLIB::Libcall LC,
2135                                          SDNode *Node,
2136                                          bool isSigned) {
2137   SDValue InChain = Node->getOperand(0);
2138
2139   TargetLowering::ArgListTy Args;
2140   TargetLowering::ArgListEntry Entry;
2141   for (unsigned i = 1, e = Node->getNumOperands(); i != e; ++i) {
2142     EVT ArgVT = Node->getOperand(i).getValueType();
2143     Type *ArgTy = ArgVT.getTypeForEVT(*DAG.getContext());
2144     Entry.Node = Node->getOperand(i);
2145     Entry.Ty = ArgTy;
2146     Entry.isSExt = isSigned;
2147     Entry.isZExt = !isSigned;
2148     Args.push_back(Entry);
2149   }
2150   SDValue Callee = DAG.getExternalSymbol(TLI.getLibcallName(LC),
2151                                          TLI.getPointerTy(DAG.getDataLayout()));
2152
2153   Type *RetTy = Node->getValueType(0).getTypeForEVT(*DAG.getContext());
2154
2155   TargetLowering::CallLoweringInfo CLI(DAG);
2156   CLI.setDebugLoc(SDLoc(Node)).setChain(InChain)
2157     .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args), 0)
2158     .setSExtResult(isSigned).setZExtResult(!isSigned);
2159
2160   std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);
2161
2162   return CallInfo;
2163 }
2164
2165 SDValue SelectionDAGLegalize::ExpandFPLibCall(SDNode* Node,
2166                                               RTLIB::Libcall Call_F32,
2167                                               RTLIB::Libcall Call_F64,
2168                                               RTLIB::Libcall Call_F80,
2169                                               RTLIB::Libcall Call_F128,
2170                                               RTLIB::Libcall Call_PPCF128) {
2171   RTLIB::Libcall LC;
2172   switch (Node->getSimpleValueType(0).SimpleTy) {
2173   default: llvm_unreachable("Unexpected request for libcall!");
2174   case MVT::f32: LC = Call_F32; break;
2175   case MVT::f64: LC = Call_F64; break;
2176   case MVT::f80: LC = Call_F80; break;
2177   case MVT::f128: LC = Call_F128; break;
2178   case MVT::ppcf128: LC = Call_PPCF128; break;
2179   }
2180   return ExpandLibCall(LC, Node, false);
2181 }
2182
2183 SDValue SelectionDAGLegalize::ExpandIntLibCall(SDNode* Node, bool isSigned,
2184                                                RTLIB::Libcall Call_I8,
2185                                                RTLIB::Libcall Call_I16,
2186                                                RTLIB::Libcall Call_I32,
2187                                                RTLIB::Libcall Call_I64,
2188                                                RTLIB::Libcall Call_I128) {
2189   RTLIB::Libcall LC;
2190   switch (Node->getSimpleValueType(0).SimpleTy) {
2191   default: llvm_unreachable("Unexpected request for libcall!");
2192   case MVT::i8:   LC = Call_I8; break;
2193   case MVT::i16:  LC = Call_I16; break;
2194   case MVT::i32:  LC = Call_I32; break;
2195   case MVT::i64:  LC = Call_I64; break;
2196   case MVT::i128: LC = Call_I128; break;
2197   }
2198   return ExpandLibCall(LC, Node, isSigned);
2199 }
2200
2201 /// Return true if divmod libcall is available.
2202 static bool isDivRemLibcallAvailable(SDNode *Node, bool isSigned,
2203                                      const TargetLowering &TLI) {
2204   RTLIB::Libcall LC;
2205   switch (Node->getSimpleValueType(0).SimpleTy) {
2206   default: llvm_unreachable("Unexpected request for libcall!");
2207   case MVT::i8:   LC= isSigned ? RTLIB::SDIVREM_I8  : RTLIB::UDIVREM_I8;  break;
2208   case MVT::i16:  LC= isSigned ? RTLIB::SDIVREM_I16 : RTLIB::UDIVREM_I16; break;
2209   case MVT::i32:  LC= isSigned ? RTLIB::SDIVREM_I32 : RTLIB::UDIVREM_I32; break;
2210   case MVT::i64:  LC= isSigned ? RTLIB::SDIVREM_I64 : RTLIB::UDIVREM_I64; break;
2211   case MVT::i128: LC= isSigned ? RTLIB::SDIVREM_I128:RTLIB::UDIVREM_I128; break;
2212   }
2213
2214   return TLI.getLibcallName(LC) != nullptr;
2215 }
2216
2217 /// Only issue divrem libcall if both quotient and remainder are needed.
2218 static bool useDivRem(SDNode *Node, bool isSigned, bool isDIV) {
2219   // The other use might have been replaced with a divrem already.
2220   unsigned DivRemOpc = isSigned ? ISD::SDIVREM : ISD::UDIVREM;
2221   unsigned OtherOpcode = 0;
2222   if (isSigned)
2223     OtherOpcode = isDIV ? ISD::SREM : ISD::SDIV;
2224   else
2225     OtherOpcode = isDIV ? ISD::UREM : ISD::UDIV;
2226
2227   SDValue Op0 = Node->getOperand(0);
2228   SDValue Op1 = Node->getOperand(1);
2229   for (SDNode::use_iterator UI = Op0.getNode()->use_begin(),
2230          UE = Op0.getNode()->use_end(); UI != UE; ++UI) {
2231     SDNode *User = *UI;
2232     if (User == Node)
2233       continue;
2234     if ((User->getOpcode() == OtherOpcode || User->getOpcode() == DivRemOpc) &&
2235         User->getOperand(0) == Op0 &&
2236         User->getOperand(1) == Op1)
2237       return true;
2238   }
2239   return false;
2240 }
2241
2242 /// Issue libcalls to __{u}divmod to compute div / rem pairs.
2243 void
2244 SelectionDAGLegalize::ExpandDivRemLibCall(SDNode *Node,
2245                                           SmallVectorImpl<SDValue> &Results) {
2246   unsigned Opcode = Node->getOpcode();
2247   bool isSigned = Opcode == ISD::SDIVREM;
2248
2249   RTLIB::Libcall LC;
2250   switch (Node->getSimpleValueType(0).SimpleTy) {
2251   default: llvm_unreachable("Unexpected request for libcall!");
2252   case MVT::i8:   LC= isSigned ? RTLIB::SDIVREM_I8  : RTLIB::UDIVREM_I8;  break;
2253   case MVT::i16:  LC= isSigned ? RTLIB::SDIVREM_I16 : RTLIB::UDIVREM_I16; break;
2254   case MVT::i32:  LC= isSigned ? RTLIB::SDIVREM_I32 : RTLIB::UDIVREM_I32; break;
2255   case MVT::i64:  LC= isSigned ? RTLIB::SDIVREM_I64 : RTLIB::UDIVREM_I64; break;
2256   case MVT::i128: LC= isSigned ? RTLIB::SDIVREM_I128:RTLIB::UDIVREM_I128; break;
2257   }
2258
2259   // The input chain to this libcall is the entry node of the function.
2260   // Legalizing the call will automatically add the previous call to the
2261   // dependence.
2262   SDValue InChain = DAG.getEntryNode();
2263
2264   EVT RetVT = Node->getValueType(0);
2265   Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());
2266
2267   TargetLowering::ArgListTy Args;
2268   TargetLowering::ArgListEntry Entry;
2269   for (const SDValue &Op : Node->op_values()) {
2270     EVT ArgVT = Op.getValueType();
2271     Type *ArgTy = ArgVT.getTypeForEVT(*DAG.getContext());
2272     Entry.Node = Op;
2273     Entry.Ty = ArgTy;
2274     Entry.isSExt = isSigned;
2275     Entry.isZExt = !isSigned;
2276     Args.push_back(Entry);
2277   }
2278
2279   // Also pass the return address of the remainder.
2280   SDValue FIPtr = DAG.CreateStackTemporary(RetVT);
2281   Entry.Node = FIPtr;
2282   Entry.Ty = RetTy->getPointerTo();
2283   Entry.isSExt = isSigned;
2284   Entry.isZExt = !isSigned;
2285   Args.push_back(Entry);
2286
2287   SDValue Callee = DAG.getExternalSymbol(TLI.getLibcallName(LC),
2288                                          TLI.getPointerTy(DAG.getDataLayout()));
2289
2290   SDLoc dl(Node);
2291   TargetLowering::CallLoweringInfo CLI(DAG);
2292   CLI.setDebugLoc(dl).setChain(InChain)
2293     .setCallee(TLI.getLibcallCallingConv(LC), RetTy, Callee, std::move(Args), 0)
2294     .setSExtResult(isSigned).setZExtResult(!isSigned);
2295
2296   std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);
2297
2298   // Remainder is loaded back from the stack frame.
2299   SDValue Rem = DAG.getLoad(RetVT, dl, CallInfo.second, FIPtr,
2300                             MachinePointerInfo(), false, false, false, 0);
2301   Results.push_back(CallInfo.first);
2302   Results.push_back(Rem);
2303 }
2304
2305 /// Return true if sincos libcall is available.
2306 static bool isSinCosLibcallAvailable(SDNode *Node, const TargetLowering &TLI) {
2307   RTLIB::Libcall LC;
2308   switch (Node->getSimpleValueType(0).SimpleTy) {
2309   default: llvm_unreachable("Unexpected request for libcall!");
2310   case MVT::f32:     LC = RTLIB::SINCOS_F32; break;
2311   case MVT::f64:     LC = RTLIB::SINCOS_F64; break;
2312   case MVT::f80:     LC = RTLIB::SINCOS_F80; break;
2313   case MVT::f128:    LC = RTLIB::SINCOS_F128; break;
2314   case MVT::ppcf128: LC = RTLIB::SINCOS_PPCF128; break;
2315   }
2316   return TLI.getLibcallName(LC) != nullptr;
2317 }
2318
2319 /// Return true if sincos libcall is available and can be used to combine sin
2320 /// and cos.
2321 static bool canCombineSinCosLibcall(SDNode *Node, const TargetLowering &TLI,
2322                                     const TargetMachine &TM) {
2323   if (!isSinCosLibcallAvailable(Node, TLI))
2324     return false;
2325   // GNU sin/cos functions set errno while sincos does not. Therefore
2326   // combining sin and cos is only safe if unsafe-fpmath is enabled.
2327   bool isGNU = Triple(TM.getTargetTriple()).getEnvironment() == Triple::GNU;
2328   if (isGNU && !TM.Options.UnsafeFPMath)
2329     return false;
2330   return true;
2331 }
2332
2333 /// Only issue sincos libcall if both sin and cos are needed.
2334 static bool useSinCos(SDNode *Node) {
2335   unsigned OtherOpcode = Node->getOpcode() == ISD::FSIN
2336     ? ISD::FCOS : ISD::FSIN;
2337
2338   SDValue Op0 = Node->getOperand(0);
2339   for (SDNode::use_iterator UI = Op0.getNode()->use_begin(),
2340        UE = Op0.getNode()->use_end(); UI != UE; ++UI) {
2341     SDNode *User = *UI;
2342     if (User == Node)
2343       continue;
2344     // The other user might have been turned into sincos already.
2345     if (User->getOpcode() == OtherOpcode || User->getOpcode() == ISD::FSINCOS)
2346       return true;
2347   }
2348   return false;
2349 }
2350
2351 /// Issue libcalls to sincos to compute sin / cos pairs.
2352 void
2353 SelectionDAGLegalize::ExpandSinCosLibCall(SDNode *Node,
2354                                           SmallVectorImpl<SDValue> &Results) {
2355   RTLIB::Libcall LC;
2356   switch (Node->getSimpleValueType(0).SimpleTy) {
2357   default: llvm_unreachable("Unexpected request for libcall!");
2358   case MVT::f32:     LC = RTLIB::SINCOS_F32; break;
2359   case MVT::f64:     LC = RTLIB::SINCOS_F64; break;
2360   case MVT::f80:     LC = RTLIB::SINCOS_F80; break;
2361   case MVT::f128:    LC = RTLIB::SINCOS_F128; break;
2362   case MVT::ppcf128: LC = RTLIB::SINCOS_PPCF128; break;
2363   }
2364
2365   // The input chain to this libcall is the entry node of the function.
2366   // Legalizing the call will automatically add the previous call to the
2367   // dependence.
2368   SDValue InChain = DAG.getEntryNode();
2369
2370   EVT RetVT = Node->getValueType(0);
2371   Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext());
2372
2373   TargetLowering::ArgListTy Args;
2374   TargetLowering::ArgListEntry Entry;
2375
2376   // Pass the argument.
2377   Entry.Node = Node->getOperand(0);
2378   Entry.Ty = RetTy;
2379   Entry.isSExt = false;
2380   Entry.isZExt = false;
2381   Args.push_back(Entry);
2382
2383   // Pass the return address of sin.
2384   SDValue SinPtr = DAG.CreateStackTemporary(RetVT);
2385   Entry.Node = SinPtr;
2386   Entry.Ty = RetTy->getPointerTo();
2387   Entry.isSExt = false;
2388   Entry.isZExt = false;
2389   Args.push_back(Entry);
2390
2391   // Also pass the return address of the cos.
2392   SDValue CosPtr = DAG.CreateStackTemporary(RetVT);
2393   Entry.Node = CosPtr;
2394   Entry.Ty = RetTy->getPointerTo();
2395   Entry.isSExt = false;
2396   Entry.isZExt = false;
2397   Args.push_back(Entry);
2398
2399   SDValue Callee = DAG.getExternalSymbol(TLI.getLibcallName(LC),
2400                                          TLI.getPointerTy(DAG.getDataLayout()));
2401
2402   SDLoc dl(Node);
2403   TargetLowering::CallLoweringInfo CLI(DAG);
2404   CLI.setDebugLoc(dl).setChain(InChain)
2405     .setCallee(TLI.getLibcallCallingConv(LC),
2406                Type::getVoidTy(*DAG.getContext()), Callee, std::move(Args), 0);
2407
2408   std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);
2409
2410   Results.push_back(DAG.getLoad(RetVT, dl, CallInfo.second, SinPtr,
2411                                 MachinePointerInfo(), false, false, false, 0));
2412   Results.push_back(DAG.getLoad(RetVT, dl, CallInfo.second, CosPtr,
2413                                 MachinePointerInfo(), false, false, false, 0));
2414 }
2415
2416 /// This function is responsible for legalizing a
2417 /// INT_TO_FP operation of the specified operand when the target requests that
2418 /// we expand it.  At this point, we know that the result and operand types are
2419 /// legal for the target.
2420 SDValue SelectionDAGLegalize::ExpandLegalINT_TO_FP(bool isSigned,
2421                                                    SDValue Op0,
2422                                                    EVT DestVT,
2423                                                    SDLoc dl) {
2424   if (Op0.getValueType() == MVT::i32 && TLI.isTypeLegal(MVT::f64)) {
2425     // simple 32-bit [signed|unsigned] integer to float/double expansion
2426
2427     // Get the stack frame index of a 8 byte buffer.
2428     SDValue StackSlot = DAG.CreateStackTemporary(MVT::f64);
2429
2430     // word offset constant for Hi/Lo address computation
2431     SDValue WordOff = DAG.getConstant(sizeof(int), dl,
2432                                       StackSlot.getValueType());
2433     // set up Hi and Lo (into buffer) address based on endian
2434     SDValue Hi = StackSlot;
2435     SDValue Lo = DAG.getNode(ISD::ADD, dl, StackSlot.getValueType(),
2436                              StackSlot, WordOff);
2437     if (DAG.getDataLayout().isLittleEndian())
2438       std::swap(Hi, Lo);
2439
2440     // if signed map to unsigned space
2441     SDValue Op0Mapped;
2442     if (isSigned) {
2443       // constant used to invert sign bit (signed to unsigned mapping)
2444       SDValue SignBit = DAG.getConstant(0x80000000u, dl, MVT::i32);
2445       Op0Mapped = DAG.getNode(ISD::XOR, dl, MVT::i32, Op0, SignBit);
2446     } else {
2447       Op0Mapped = Op0;
2448     }
2449     // store the lo of the constructed double - based on integer input
2450     SDValue Store1 = DAG.getStore(DAG.getEntryNode(), dl,
2451                                   Op0Mapped, Lo, MachinePointerInfo(),
2452                                   false, false, 0);
2453     // initial hi portion of constructed double
2454     SDValue InitialHi = DAG.getConstant(0x43300000u, dl, MVT::i32);
2455     // store the hi of the constructed double - biased exponent
2456     SDValue Store2 = DAG.getStore(Store1, dl, InitialHi, Hi,
2457                                   MachinePointerInfo(),
2458                                   false, false, 0);
2459     // load the constructed double
2460     SDValue Load = DAG.getLoad(MVT::f64, dl, Store2, StackSlot,
2461                                MachinePointerInfo(), false, false, false, 0);
2462     // FP constant to bias correct the final result
2463     SDValue Bias = DAG.getConstantFP(isSigned ?
2464                                      BitsToDouble(0x4330000080000000ULL) :
2465                                      BitsToDouble(0x4330000000000000ULL),
2466                                      dl, MVT::f64);
2467     // subtract the bias
2468     SDValue Sub = DAG.getNode(ISD::FSUB, dl, MVT::f64, Load, Bias);
2469     // final result
2470     SDValue Result;
2471     // handle final rounding
2472     if (DestVT == MVT::f64) {
2473       // do nothing
2474       Result = Sub;
2475     } else if (DestVT.bitsLT(MVT::f64)) {
2476       Result = DAG.getNode(ISD::FP_ROUND, dl, DestVT, Sub,
2477                            DAG.getIntPtrConstant(0, dl));
2478     } else if (DestVT.bitsGT(MVT::f64)) {
2479       Result = DAG.getNode(ISD::FP_EXTEND, dl, DestVT, Sub);
2480     }
2481     return Result;
2482   }
2483   assert(!isSigned && "Legalize cannot Expand SINT_TO_FP for i64 yet");
2484   // Code below here assumes !isSigned without checking again.
2485
2486   // Implementation of unsigned i64 to f64 following the algorithm in
2487   // __floatundidf in compiler_rt. This implementation has the advantage
2488   // of performing rounding correctly, both in the default rounding mode
2489   // and in all alternate rounding modes.
2490   // TODO: Generalize this for use with other types.
2491   if (Op0.getValueType() == MVT::i64 && DestVT == MVT::f64) {
2492     SDValue TwoP52 =
2493       DAG.getConstant(UINT64_C(0x4330000000000000), dl, MVT::i64);
2494     SDValue TwoP84PlusTwoP52 =
2495       DAG.getConstantFP(BitsToDouble(UINT64_C(0x4530000000100000)), dl,
2496                         MVT::f64);
2497     SDValue TwoP84 =
2498       DAG.getConstant(UINT64_C(0x4530000000000000), dl, MVT::i64);
2499
2500     SDValue Lo = DAG.getZeroExtendInReg(Op0, dl, MVT::i32);
2501     SDValue Hi = DAG.getNode(ISD::SRL, dl, MVT::i64, Op0,
2502                              DAG.getConstant(32, dl, MVT::i64));
2503     SDValue LoOr = DAG.getNode(ISD::OR, dl, MVT::i64, Lo, TwoP52);
2504     SDValue HiOr = DAG.getNode(ISD::OR, dl, MVT::i64, Hi, TwoP84);
2505     SDValue LoFlt = DAG.getNode(ISD::BITCAST, dl, MVT::f64, LoOr);
2506     SDValue HiFlt = DAG.getNode(ISD::BITCAST, dl, MVT::f64, HiOr);
2507     SDValue HiSub = DAG.getNode(ISD::FSUB, dl, MVT::f64, HiFlt,
2508                                 TwoP84PlusTwoP52);
2509     return DAG.getNode(ISD::FADD, dl, MVT::f64, LoFlt, HiSub);
2510   }
2511
2512   // Implementation of unsigned i64 to f32.
2513   // TODO: Generalize this for use with other types.
2514   if (Op0.getValueType() == MVT::i64 && DestVT == MVT::f32) {
2515     // For unsigned conversions, convert them to signed conversions using the
2516     // algorithm from the x86_64 __floatundidf in compiler_rt.
2517     if (!isSigned) {
2518       SDValue Fast = DAG.getNode(ISD::SINT_TO_FP, dl, MVT::f32, Op0);
2519
2520       SDValue ShiftConst =
2521           DAG.getConstant(1, dl, TLI.getShiftAmountTy(Op0.getValueType()));
2522       SDValue Shr = DAG.getNode(ISD::SRL, dl, MVT::i64, Op0, ShiftConst);
2523       SDValue AndConst = DAG.getConstant(1, dl, MVT::i64);
2524       SDValue And = DAG.getNode(ISD::AND, dl, MVT::i64, Op0, AndConst);
2525       SDValue Or = DAG.getNode(ISD::OR, dl, MVT::i64, And, Shr);
2526
2527       SDValue SignCvt = DAG.getNode(ISD::SINT_TO_FP, dl, MVT::f32, Or);
2528       SDValue Slow = DAG.getNode(ISD::FADD, dl, MVT::f32, SignCvt, SignCvt);
2529
2530       // TODO: This really should be implemented using a branch rather than a
2531       // select.  We happen to get lucky and machinesink does the right
2532       // thing most of the time.  This would be a good candidate for a
2533       //pseudo-op, or, even better, for whole-function isel.
2534       SDValue SignBitTest = DAG.getSetCC(dl, getSetCCResultType(MVT::i64),
2535         Op0, DAG.getConstant(0, dl, MVT::i64), ISD::SETLT);
2536       return DAG.getSelect(dl, MVT::f32, SignBitTest, Slow, Fast);
2537     }
2538
2539     // Otherwise, implement the fully general conversion.
2540
2541     SDValue And = DAG.getNode(ISD::AND, dl, MVT::i64, Op0,
2542          DAG.getConstant(UINT64_C(0xfffffffffffff800), dl, MVT::i64));
2543     SDValue Or = DAG.getNode(ISD::OR, dl, MVT::i64, And,
2544          DAG.getConstant(UINT64_C(0x800), dl, MVT::i64));
2545     SDValue And2 = DAG.getNode(ISD::AND, dl, MVT::i64, Op0,
2546          DAG.getConstant(UINT64_C(0x7ff), dl, MVT::i64));
2547     SDValue Ne = DAG.getSetCC(dl, getSetCCResultType(MVT::i64), And2,
2548                               DAG.getConstant(UINT64_C(0), dl, MVT::i64),
2549                               ISD::SETNE);
2550     SDValue Sel = DAG.getSelect(dl, MVT::i64, Ne, Or, Op0);
2551     SDValue Ge = DAG.getSetCC(dl, getSetCCResultType(MVT::i64), Op0,
2552                               DAG.getConstant(UINT64_C(0x0020000000000000), dl,
2553                                               MVT::i64),
2554                               ISD::SETUGE);
2555     SDValue Sel2 = DAG.getSelect(dl, MVT::i64, Ge, Sel, Op0);
2556     EVT SHVT = TLI.getShiftAmountTy(Sel2.getValueType());
2557
2558     SDValue Sh = DAG.getNode(ISD::SRL, dl, MVT::i64, Sel2,
2559                              DAG.getConstant(32, dl, SHVT));
2560     SDValue Trunc = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Sh);
2561     SDValue Fcvt = DAG.getNode(ISD::UINT_TO_FP, dl, MVT::f64, Trunc);
2562     SDValue TwoP32 =
2563       DAG.getConstantFP(BitsToDouble(UINT64_C(0x41f0000000000000)), dl,
2564                         MVT::f64);
2565     SDValue Fmul = DAG.getNode(ISD::FMUL, dl, MVT::f64, TwoP32, Fcvt);
2566     SDValue Lo = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Sel2);
2567     SDValue Fcvt2 = DAG.getNode(ISD::UINT_TO_FP, dl, MVT::f64, Lo);
2568     SDValue Fadd = DAG.getNode(ISD::FADD, dl, MVT::f64, Fmul, Fcvt2);
2569     return DAG.getNode(ISD::FP_ROUND, dl, MVT::f32, Fadd,
2570                        DAG.getIntPtrConstant(0, dl));
2571   }
2572
2573   SDValue Tmp1 = DAG.getNode(ISD::SINT_TO_FP, dl, DestVT, Op0);
2574
2575   SDValue SignSet = DAG.getSetCC(dl, getSetCCResultType(Op0.getValueType()),
2576                                  Op0,
2577                                  DAG.getConstant(0, dl, Op0.getValueType()),
2578                                  ISD::SETLT);
2579   SDValue Zero = DAG.getIntPtrConstant(0, dl),
2580           Four = DAG.getIntPtrConstant(4, dl);
2581   SDValue CstOffset = DAG.getSelect(dl, Zero.getValueType(),
2582                                     SignSet, Four, Zero);
2583
2584   // If the sign bit of the integer is set, the large number will be treated
2585   // as a negative number.  To counteract this, the dynamic code adds an
2586   // offset depending on the data type.
2587   uint64_t FF;
2588   switch (Op0.getSimpleValueType().SimpleTy) {
2589   default: llvm_unreachable("Unsupported integer type!");
2590   case MVT::i8 : FF = 0x43800000ULL; break;  // 2^8  (as a float)
2591   case MVT::i16: FF = 0x47800000ULL; break;  // 2^16 (as a float)
2592   case MVT::i32: FF = 0x4F800000ULL; break;  // 2^32 (as a float)
2593   case MVT::i64: FF = 0x5F800000ULL; break;  // 2^64 (as a float)
2594   }
2595   if (DAG.getDataLayout().isLittleEndian())
2596     FF <<= 32;
2597   Constant *FudgeFactor = ConstantInt::get(
2598                                        Type::getInt64Ty(*DAG.getContext()), FF);
2599
2600   SDValue CPIdx =
2601       DAG.getConstantPool(FudgeFactor, TLI.getPointerTy(DAG.getDataLayout()));
2602   unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
2603   CPIdx = DAG.getNode(ISD::ADD, dl, CPIdx.getValueType(), CPIdx, CstOffset);
2604   Alignment = std::min(Alignment, 4u);
2605   SDValue FudgeInReg;
2606   if (DestVT == MVT::f32)
2607     FudgeInReg = DAG.getLoad(MVT::f32, dl, DAG.getEntryNode(), CPIdx,
2608                              MachinePointerInfo::getConstantPool(),
2609                              false, false, false, Alignment);
2610   else {
2611     SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, DestVT,
2612                                   DAG.getEntryNode(), CPIdx,
2613                                   MachinePointerInfo::getConstantPool(),
2614                                   MVT::f32, false, false, false, Alignment);
2615     HandleSDNode Handle(Load);
2616     LegalizeOp(Load.getNode());
2617     FudgeInReg = Handle.getValue();
2618   }
2619
2620   return DAG.getNode(ISD::FADD, dl, DestVT, Tmp1, FudgeInReg);
2621 }
2622
2623 /// This function is responsible for legalizing a
2624 /// *INT_TO_FP operation of the specified operand when the target requests that
2625 /// we promote it.  At this point, we know that the result and operand types are
2626 /// legal for the target, and that there is a legal UINT_TO_FP or SINT_TO_FP
2627 /// operation that takes a larger input.
2628 SDValue SelectionDAGLegalize::PromoteLegalINT_TO_FP(SDValue LegalOp,
2629                                                     EVT DestVT,
2630                                                     bool isSigned,
2631                                                     SDLoc dl) {
2632   // First step, figure out the appropriate *INT_TO_FP operation to use.
2633   EVT NewInTy = LegalOp.getValueType();
2634
2635   unsigned OpToUse = 0;
2636
2637   // Scan for the appropriate larger type to use.
2638   while (1) {
2639     NewInTy = (MVT::SimpleValueType)(NewInTy.getSimpleVT().SimpleTy+1);
2640     assert(NewInTy.isInteger() && "Ran out of possibilities!");
2641
2642     // If the target supports SINT_TO_FP of this type, use it.
2643     if (TLI.isOperationLegalOrCustom(ISD::SINT_TO_FP, NewInTy)) {
2644       OpToUse = ISD::SINT_TO_FP;
2645       break;
2646     }
2647     if (isSigned) continue;
2648
2649     // If the target supports UINT_TO_FP of this type, use it.
2650     if (TLI.isOperationLegalOrCustom(ISD::UINT_TO_FP, NewInTy)) {
2651       OpToUse = ISD::UINT_TO_FP;
2652       break;
2653     }
2654
2655     // Otherwise, try a larger type.
2656   }
2657
2658   // Okay, we found the operation and type to use.  Zero extend our input to the
2659   // desired type then run the operation on it.
2660   return DAG.getNode(OpToUse, dl, DestVT,
2661                      DAG.getNode(isSigned ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND,
2662                                  dl, NewInTy, LegalOp));
2663 }
2664
2665 /// This function is responsible for legalizing a
2666 /// FP_TO_*INT operation of the specified operand when the target requests that
2667 /// we promote it.  At this point, we know that the result and operand types are
2668 /// legal for the target, and that there is a legal FP_TO_UINT or FP_TO_SINT
2669 /// operation that returns a larger result.
2670 SDValue SelectionDAGLegalize::PromoteLegalFP_TO_INT(SDValue LegalOp,
2671                                                     EVT DestVT,
2672                                                     bool isSigned,
2673                                                     SDLoc dl) {
2674   // First step, figure out the appropriate FP_TO*INT operation to use.
2675   EVT NewOutTy = DestVT;
2676
2677   unsigned OpToUse = 0;
2678
2679   // Scan for the appropriate larger type to use.
2680   while (1) {
2681     NewOutTy = (MVT::SimpleValueType)(NewOutTy.getSimpleVT().SimpleTy+1);
2682     assert(NewOutTy.isInteger() && "Ran out of possibilities!");
2683
2684     // A larger signed type can hold all unsigned values of the requested type,
2685     // so using FP_TO_SINT is valid
2686     if (TLI.isOperationLegalOrCustom(ISD::FP_TO_SINT, NewOutTy)) {
2687       OpToUse = ISD::FP_TO_SINT;
2688       break;
2689     }
2690
2691     // However, if the value may be < 0.0, we *must* use some FP_TO_SINT.
2692     if (!isSigned && TLI.isOperationLegalOrCustom(ISD::FP_TO_UINT, NewOutTy)) {
2693       OpToUse = ISD::FP_TO_UINT;
2694       break;
2695     }
2696
2697     // Otherwise, try a larger type.
2698   }
2699
2700
2701   // Okay, we found the operation and type to use.
2702   SDValue Operation = DAG.getNode(OpToUse, dl, NewOutTy, LegalOp);
2703
2704   // Truncate the result of the extended FP_TO_*INT operation to the desired
2705   // size.
2706   return DAG.getNode(ISD::TRUNCATE, dl, DestVT, Operation);
2707 }
2708
2709 /// Open code the operations for BSWAP of the specified operation.
2710 SDValue SelectionDAGLegalize::ExpandBSWAP(SDValue Op, SDLoc dl) {
2711   EVT VT = Op.getValueType();
2712   EVT SHVT = TLI.getShiftAmountTy(VT);
2713   SDValue Tmp1, Tmp2, Tmp3, Tmp4, Tmp5, Tmp6, Tmp7, Tmp8;
2714   switch (VT.getSimpleVT().SimpleTy) {
2715   default: llvm_unreachable("Unhandled Expand type in BSWAP!");
2716   case MVT::i16:
2717     Tmp2 = DAG.getNode(ISD::SHL, dl, VT, Op, DAG.getConstant(8, dl, SHVT));
2718     Tmp1 = DAG.getNode(ISD::SRL, dl, VT, Op, DAG.getConstant(8, dl, SHVT));
2719     return DAG.getNode(ISD::OR, dl, VT, Tmp1, Tmp2);
2720   case MVT::i32:
2721     Tmp4 = DAG.getNode(ISD::SHL, dl, VT, Op, DAG.getConstant(24, dl, SHVT));
2722     Tmp3 = DAG.getNode(ISD::SHL, dl, VT, Op, DAG.getConstant(8, dl, SHVT));
2723     Tmp2 = DAG.getNode(ISD::SRL, dl, VT, Op, DAG.getConstant(8, dl, SHVT));
2724     Tmp1 = DAG.getNode(ISD::SRL, dl, VT, Op, DAG.getConstant(24, dl, SHVT));
2725     Tmp3 = DAG.getNode(ISD::AND, dl, VT, Tmp3,
2726                        DAG.getConstant(0xFF0000, dl, VT));
2727     Tmp2 = DAG.getNode(ISD::AND, dl, VT, Tmp2, DAG.getConstant(0xFF00, dl, VT));
2728     Tmp4 = DAG.getNode(ISD::OR, dl, VT, Tmp4, Tmp3);
2729     Tmp2 = DAG.getNode(ISD::OR, dl, VT, Tmp2, Tmp1);
2730     return DAG.getNode(ISD::OR, dl, VT, Tmp4, Tmp2);
2731   case MVT::i64:
2732     Tmp8 = DAG.getNode(ISD::SHL, dl, VT, Op, DAG.getConstant(56, dl, SHVT));
2733     Tmp7 = DAG.getNode(ISD::SHL, dl, VT, Op, DAG.getConstant(40, dl, SHVT));
2734     Tmp6 = DAG.getNode(ISD::SHL, dl, VT, Op, DAG.getConstant(24, dl, SHVT));
2735     Tmp5 = DAG.getNode(ISD::SHL, dl, VT, Op, DAG.getConstant(8, dl, SHVT));
2736     Tmp4 = DAG.getNode(ISD::SRL, dl, VT, Op, DAG.getConstant(8, dl, SHVT));
2737     Tmp3 = DAG.getNode(ISD::SRL, dl, VT, Op, DAG.getConstant(24, dl, SHVT));
2738     Tmp2 = DAG.getNode(ISD::SRL, dl, VT, Op, DAG.getConstant(40, dl, SHVT));
2739     Tmp1 = DAG.getNode(ISD::SRL, dl, VT, Op, DAG.getConstant(56, dl, SHVT));
2740     Tmp7 = DAG.getNode(ISD::AND, dl, VT, Tmp7,
2741                        DAG.getConstant(255ULL<<48, dl, VT));
2742     Tmp6 = DAG.getNode(ISD::AND, dl, VT, Tmp6,
2743                        DAG.getConstant(255ULL<<40, dl, VT));
2744     Tmp5 = DAG.getNode(ISD::AND, dl, VT, Tmp5,
2745                        DAG.getConstant(255ULL<<32, dl, VT));
2746     Tmp4 = DAG.getNode(ISD::AND, dl, VT, Tmp4,
2747                        DAG.getConstant(255ULL<<24, dl, VT));
2748     Tmp3 = DAG.getNode(ISD::AND, dl, VT, Tmp3,
2749                        DAG.getConstant(255ULL<<16, dl, VT));
2750     Tmp2 = DAG.getNode(ISD::AND, dl, VT, Tmp2,
2751                        DAG.getConstant(255ULL<<8 , dl, VT));
2752     Tmp8 = DAG.getNode(ISD::OR, dl, VT, Tmp8, Tmp7);
2753     Tmp6 = DAG.getNode(ISD::OR, dl, VT, Tmp6, Tmp5);
2754     Tmp4 = DAG.getNode(ISD::OR, dl, VT, Tmp4, Tmp3);
2755     Tmp2 = DAG.getNode(ISD::OR, dl, VT, Tmp2, Tmp1);
2756     Tmp8 = DAG.getNode(ISD::OR, dl, VT, Tmp8, Tmp6);
2757     Tmp4 = DAG.getNode(ISD::OR, dl, VT, Tmp4, Tmp2);
2758     return DAG.getNode(ISD::OR, dl, VT, Tmp8, Tmp4);
2759   }
2760 }
2761
2762 /// Expand the specified bitcount instruction into operations.
2763 SDValue SelectionDAGLegalize::ExpandBitCount(unsigned Opc, SDValue Op,
2764                                              SDLoc dl) {
2765   switch (Opc) {
2766   default: llvm_unreachable("Cannot expand this yet!");
2767   case ISD::CTPOP: {
2768     EVT VT = Op.getValueType();
2769     EVT ShVT = TLI.getShiftAmountTy(VT);
2770     unsigned Len = VT.getSizeInBits();
2771
2772     assert(VT.isInteger() && Len <= 128 && Len % 8 == 0 &&
2773            "CTPOP not implemented for this type.");
2774
2775     // This is the "best" algorithm from
2776     // http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
2777
2778     SDValue Mask55 = DAG.getConstant(APInt::getSplat(Len, APInt(8, 0x55)),
2779                                      dl, VT);
2780     SDValue Mask33 = DAG.getConstant(APInt::getSplat(Len, APInt(8, 0x33)),
2781                                      dl, VT);
2782     SDValue Mask0F = DAG.getConstant(APInt::getSplat(Len, APInt(8, 0x0F)),
2783                                      dl, VT);
2784     SDValue Mask01 = DAG.getConstant(APInt::getSplat(Len, APInt(8, 0x01)),
2785                                      dl, VT);
2786
2787     // v = v - ((v >> 1) & 0x55555555...)
2788     Op = DAG.getNode(ISD::SUB, dl, VT, Op,
2789                      DAG.getNode(ISD::AND, dl, VT,
2790                                  DAG.getNode(ISD::SRL, dl, VT, Op,
2791                                              DAG.getConstant(1, dl, ShVT)),
2792                                  Mask55));
2793     // v = (v & 0x33333333...) + ((v >> 2) & 0x33333333...)
2794     Op = DAG.getNode(ISD::ADD, dl, VT,
2795                      DAG.getNode(ISD::AND, dl, VT, Op, Mask33),
2796                      DAG.getNode(ISD::AND, dl, VT,
2797                                  DAG.getNode(ISD::SRL, dl, VT, Op,
2798                                              DAG.getConstant(2, dl, ShVT)),
2799                                  Mask33));
2800     // v = (v + (v >> 4)) & 0x0F0F0F0F...
2801     Op = DAG.getNode(ISD::AND, dl, VT,
2802                      DAG.getNode(ISD::ADD, dl, VT, Op,
2803                                  DAG.getNode(ISD::SRL, dl, VT, Op,
2804                                              DAG.getConstant(4, dl, ShVT))),
2805                      Mask0F);
2806     // v = (v * 0x01010101...) >> (Len - 8)
2807     Op = DAG.getNode(ISD::SRL, dl, VT,
2808                      DAG.getNode(ISD::MUL, dl, VT, Op, Mask01),
2809                      DAG.getConstant(Len - 8, dl, ShVT));
2810
2811     return Op;
2812   }
2813   case ISD::CTLZ_ZERO_UNDEF:
2814     // This trivially expands to CTLZ.
2815     return DAG.getNode(ISD::CTLZ, dl, Op.getValueType(), Op);
2816   case ISD::CTLZ: {
2817     // for now, we do this:
2818     // x = x | (x >> 1);
2819     // x = x | (x >> 2);
2820     // ...
2821     // x = x | (x >>16);
2822     // x = x | (x >>32); // for 64-bit input
2823     // return popcount(~x);
2824     //
2825     // Ref: "Hacker's Delight" by Henry Warren
2826     EVT VT = Op.getValueType();
2827     EVT ShVT = TLI.getShiftAmountTy(VT);
2828     unsigned len = VT.getSizeInBits();
2829     for (unsigned i = 0; (1U << i) <= (len / 2); ++i) {
2830       SDValue Tmp3 = DAG.getConstant(1ULL << i, dl, ShVT);
2831       Op = DAG.getNode(ISD::OR, dl, VT, Op,
2832                        DAG.getNode(ISD::SRL, dl, VT, Op, Tmp3));
2833     }
2834     Op = DAG.getNOT(dl, Op, VT);
2835     return DAG.getNode(ISD::CTPOP, dl, VT, Op);
2836   }
2837   case ISD::CTTZ_ZERO_UNDEF:
2838     // This trivially expands to CTTZ.
2839     return DAG.getNode(ISD::CTTZ, dl, Op.getValueType(), Op);
2840   case ISD::CTTZ: {
2841     // for now, we use: { return popcount(~x & (x - 1)); }
2842     // unless the target has ctlz but not ctpop, in which case we use:
2843     // { return 32 - nlz(~x & (x-1)); }
2844     // Ref: "Hacker's Delight" by Henry Warren
2845     EVT VT = Op.getValueType();
2846     SDValue Tmp3 = DAG.getNode(ISD::AND, dl, VT,
2847                                DAG.getNOT(dl, Op, VT),
2848                                DAG.getNode(ISD::SUB, dl, VT, Op,
2849                                            DAG.getConstant(1, dl, VT)));
2850     // If ISD::CTLZ is legal and CTPOP isn't, then do that instead.
2851     if (!TLI.isOperationLegalOrCustom(ISD::CTPOP, VT) &&
2852         TLI.isOperationLegalOrCustom(ISD::CTLZ, VT))
2853       return DAG.getNode(ISD::SUB, dl, VT,
2854                          DAG.getConstant(VT.getSizeInBits(), dl, VT),
2855                          DAG.getNode(ISD::CTLZ, dl, VT, Tmp3));
2856     return DAG.getNode(ISD::CTPOP, dl, VT, Tmp3);
2857   }
2858   }
2859 }
2860
2861 std::pair <SDValue, SDValue> SelectionDAGLegalize::ExpandAtomic(SDNode *Node) {
2862   unsigned Opc = Node->getOpcode();
2863   MVT VT = cast<AtomicSDNode>(Node)->getMemoryVT().getSimpleVT();
2864   RTLIB::Libcall LC = RTLIB::getATOMIC(Opc, VT);
2865   assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unexpected atomic op or value type!");
2866
2867   return ExpandChainLibCall(LC, Node, false);
2868 }
2869
2870 void SelectionDAGLegalize::ExpandNode(SDNode *Node) {
2871   SmallVector<SDValue, 8> Results;
2872   SDLoc dl(Node);
2873   SDValue Tmp1, Tmp2, Tmp3, Tmp4;
2874   bool NeedInvert;
2875   switch (Node->getOpcode()) {
2876   case ISD::CTPOP:
2877   case ISD::CTLZ:
2878   case ISD::CTLZ_ZERO_UNDEF:
2879   case ISD::CTTZ:
2880   case ISD::CTTZ_ZERO_UNDEF:
2881     Tmp1 = ExpandBitCount(Node->getOpcode(), Node->getOperand(0), dl);
2882     Results.push_back(Tmp1);
2883     break;
2884   case ISD::BSWAP:
2885     Results.push_back(ExpandBSWAP(Node->getOperand(0), dl));
2886     break;
2887   case ISD::FRAMEADDR:
2888   case ISD::RETURNADDR:
2889   case ISD::FRAME_TO_ARGS_OFFSET:
2890     Results.push_back(DAG.getConstant(0, dl, Node->getValueType(0)));
2891     break;
2892   case ISD::FLT_ROUNDS_:
2893     Results.push_back(DAG.getConstant(1, dl, Node->getValueType(0)));
2894     break;
2895   case ISD::EH_RETURN:
2896   case ISD::EH_LABEL:
2897   case ISD::PREFETCH:
2898   case ISD::VAEND:
2899   case ISD::EH_SJLJ_LONGJMP:
2900     // If the target didn't expand these, there's nothing to do, so just
2901     // preserve the chain and be done.
2902     Results.push_back(Node->getOperand(0));
2903     break;
2904   case ISD::EH_SJLJ_SETJMP:
2905     // If the target didn't expand this, just return 'zero' and preserve the
2906     // chain.
2907     Results.push_back(DAG.getConstant(0, dl, MVT::i32));
2908     Results.push_back(Node->getOperand(0));
2909     break;
2910   case ISD::ATOMIC_FENCE: {
2911     // If the target didn't lower this, lower it to '__sync_synchronize()' call
2912     // FIXME: handle "fence singlethread" more efficiently.
2913     TargetLowering::ArgListTy Args;
2914
2915     TargetLowering::CallLoweringInfo CLI(DAG);
2916     CLI.setDebugLoc(dl)
2917         .setChain(Node->getOperand(0))
2918         .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),
2919                    DAG.getExternalSymbol("__sync_synchronize",
2920                                          TLI.getPointerTy(DAG.getDataLayout())),
2921                    std::move(Args), 0);
2922
2923     std::pair<SDValue, SDValue> CallResult = TLI.LowerCallTo(CLI);
2924
2925     Results.push_back(CallResult.second);
2926     break;
2927   }
2928   case ISD::ATOMIC_LOAD: {
2929     // There is no libcall for atomic load; fake it with ATOMIC_CMP_SWAP.
2930     SDValue Zero = DAG.getConstant(0, dl, Node->getValueType(0));
2931     SDVTList VTs = DAG.getVTList(Node->getValueType(0), MVT::Other);
2932     SDValue Swap = DAG.getAtomicCmpSwap(
2933         ISD::ATOMIC_CMP_SWAP, dl, cast<AtomicSDNode>(Node)->getMemoryVT(), VTs,
2934         Node->getOperand(0), Node->getOperand(1), Zero, Zero,
2935         cast<AtomicSDNode>(Node)->getMemOperand(),
2936         cast<AtomicSDNode>(Node)->getOrdering(),
2937         cast<AtomicSDNode>(Node)->getOrdering(),
2938         cast<AtomicSDNode>(Node)->getSynchScope());
2939     Results.push_back(Swap.getValue(0));
2940     Results.push_back(Swap.getValue(1));
2941     break;
2942   }
2943   case ISD::ATOMIC_STORE: {
2944     // There is no libcall for atomic store; fake it with ATOMIC_SWAP.
2945     SDValue Swap = DAG.getAtomic(ISD::ATOMIC_SWAP, dl,
2946                                  cast<AtomicSDNode>(Node)->getMemoryVT(),
2947                                  Node->getOperand(0),
2948                                  Node->getOperand(1), Node->getOperand(2),
2949                                  cast<AtomicSDNode>(Node)->getMemOperand(),
2950                                  cast<AtomicSDNode>(Node)->getOrdering(),
2951                                  cast<AtomicSDNode>(Node)->getSynchScope());
2952     Results.push_back(Swap.getValue(1));
2953     break;
2954   }
2955   // By default, atomic intrinsics are marked Legal and lowered. Targets
2956   // which don't support them directly, however, may want libcalls, in which
2957   // case they mark them Expand, and we get here.
2958   case ISD::ATOMIC_SWAP:
2959   case ISD::ATOMIC_LOAD_ADD:
2960   case ISD::ATOMIC_LOAD_SUB:
2961   case ISD::ATOMIC_LOAD_AND:
2962   case ISD::ATOMIC_LOAD_OR:
2963   case ISD::ATOMIC_LOAD_XOR:
2964   case ISD::ATOMIC_LOAD_NAND:
2965   case ISD::ATOMIC_LOAD_MIN:
2966   case ISD::ATOMIC_LOAD_MAX:
2967   case ISD::ATOMIC_LOAD_UMIN:
2968   case ISD::ATOMIC_LOAD_UMAX:
2969   case ISD::ATOMIC_CMP_SWAP: {
2970     std::pair<SDValue, SDValue> Tmp = ExpandAtomic(Node);
2971     Results.push_back(Tmp.first);
2972     Results.push_back(Tmp.second);
2973     break;
2974   }
2975   case ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS: {
2976     // Expanding an ATOMIC_CMP_SWAP_WITH_SUCCESS produces an ATOMIC_CMP_SWAP and
2977     // splits out the success value as a comparison. Expanding the resulting
2978     // ATOMIC_CMP_SWAP will produce a libcall.
2979     SDVTList VTs = DAG.getVTList(Node->getValueType(0), MVT::Other);
2980     SDValue Res = DAG.getAtomicCmpSwap(
2981         ISD::ATOMIC_CMP_SWAP, dl, cast<AtomicSDNode>(Node)->getMemoryVT(), VTs,
2982         Node->getOperand(0), Node->getOperand(1), Node->getOperand(2),
2983         Node->getOperand(3), cast<MemSDNode>(Node)->getMemOperand(),
2984         cast<AtomicSDNode>(Node)->getSuccessOrdering(),
2985         cast<AtomicSDNode>(Node)->getFailureOrdering(),
2986         cast<AtomicSDNode>(Node)->getSynchScope());
2987
2988     SDValue Success = DAG.getSetCC(SDLoc(Node), Node->getValueType(1),
2989                                    Res, Node->getOperand(2), ISD::SETEQ);
2990
2991     Results.push_back(Res.getValue(0));
2992     Results.push_back(Success);
2993     Results.push_back(Res.getValue(1));
2994     break;
2995   }
2996   case ISD::DYNAMIC_STACKALLOC:
2997     ExpandDYNAMIC_STACKALLOC(Node, Results);
2998     break;
2999   case ISD::MERGE_VALUES:
3000     for (unsigned i = 0; i < Node->getNumValues(); i++)
3001       Results.push_back(Node->getOperand(i));
3002     break;
3003   case ISD::UNDEF: {
3004     EVT VT = Node->getValueType(0);
3005     if (VT.isInteger())
3006       Results.push_back(DAG.getConstant(0, dl, VT));
3007     else {
3008       assert(VT.isFloatingPoint() && "Unknown value type!");
3009       Results.push_back(DAG.getConstantFP(0, dl, VT));
3010     }
3011     break;
3012   }
3013   case ISD::TRAP: {
3014     // If this operation is not supported, lower it to 'abort()' call
3015     TargetLowering::ArgListTy Args;
3016     TargetLowering::CallLoweringInfo CLI(DAG);
3017     CLI.setDebugLoc(dl)
3018         .setChain(Node->getOperand(0))
3019         .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),
3020                    DAG.getExternalSymbol("abort",
3021                                          TLI.getPointerTy(DAG.getDataLayout())),
3022                    std::move(Args), 0);
3023     std::pair<SDValue, SDValue> CallResult = TLI.LowerCallTo(CLI);
3024
3025     Results.push_back(CallResult.second);
3026     break;
3027   }
3028   case ISD::FP_ROUND:
3029   case ISD::BITCAST:
3030     Tmp1 = EmitStackConvert(Node->getOperand(0), Node->getValueType(0),
3031                             Node->getValueType(0), dl);
3032     Results.push_back(Tmp1);
3033     break;
3034   case ISD::FP_EXTEND:
3035     Tmp1 = EmitStackConvert(Node->getOperand(0),
3036                             Node->getOperand(0).getValueType(),
3037                             Node->getValueType(0), dl);
3038     Results.push_back(Tmp1);
3039     break;
3040   case ISD::SIGN_EXTEND_INREG: {
3041     // NOTE: we could fall back on load/store here too for targets without
3042     // SAR.  However, it is doubtful that any exist.
3043     EVT ExtraVT = cast<VTSDNode>(Node->getOperand(1))->getVT();
3044     EVT VT = Node->getValueType(0);
3045     EVT ShiftAmountTy = TLI.getShiftAmountTy(VT);
3046     if (VT.isVector())
3047       ShiftAmountTy = VT;
3048     unsigned BitsDiff = VT.getScalarType().getSizeInBits() -
3049                         ExtraVT.getScalarType().getSizeInBits();
3050     SDValue ShiftCst = DAG.getConstant(BitsDiff, dl, ShiftAmountTy);
3051     Tmp1 = DAG.getNode(ISD::SHL, dl, Node->getValueType(0),
3052                        Node->getOperand(0), ShiftCst);
3053     Tmp1 = DAG.getNode(ISD::SRA, dl, Node->getValueType(0), Tmp1, ShiftCst);
3054     Results.push_back(Tmp1);
3055     break;
3056   }
3057   case ISD::FP_ROUND_INREG: {
3058     // The only way we can lower this is to turn it into a TRUNCSTORE,
3059     // EXTLOAD pair, targeting a temporary location (a stack slot).
3060
3061     // NOTE: there is a choice here between constantly creating new stack
3062     // slots and always reusing the same one.  We currently always create
3063     // new ones, as reuse may inhibit scheduling.
3064     EVT ExtraVT = cast<VTSDNode>(Node->getOperand(1))->getVT();
3065     Tmp1 = EmitStackConvert(Node->getOperand(0), ExtraVT,
3066                             Node->getValueType(0), dl);
3067     Results.push_back(Tmp1);
3068     break;
3069   }
3070   case ISD::SINT_TO_FP:
3071   case ISD::UINT_TO_FP:
3072     Tmp1 = ExpandLegalINT_TO_FP(Node->getOpcode() == ISD::SINT_TO_FP,
3073                                 Node->getOperand(0), Node->getValueType(0), dl);
3074     Results.push_back(Tmp1);
3075     break;
3076   case ISD::FP_TO_SINT:
3077     if (TLI.expandFP_TO_SINT(Node, Tmp1, DAG))
3078       Results.push_back(Tmp1);
3079     break;
3080   case ISD::FP_TO_UINT: {
3081     SDValue True, False;
3082     EVT VT =  Node->getOperand(0).getValueType();
3083     EVT NVT = Node->getValueType(0);
3084     APFloat apf(DAG.EVTToAPFloatSemantics(VT),
3085                 APInt::getNullValue(VT.getSizeInBits()));
3086     APInt x = APInt::getSignBit(NVT.getSizeInBits());
3087     (void)apf.convertFromAPInt(x, false, APFloat::rmNearestTiesToEven);
3088     Tmp1 = DAG.getConstantFP(apf, dl, VT);
3089     Tmp2 = DAG.getSetCC(dl, getSetCCResultType(VT),
3090                         Node->getOperand(0),
3091                         Tmp1, ISD::SETLT);
3092     True = DAG.getNode(ISD::FP_TO_SINT, dl, NVT, Node->getOperand(0));
3093     False = DAG.getNode(ISD::FP_TO_SINT, dl, NVT,
3094                         DAG.getNode(ISD::FSUB, dl, VT,
3095                                     Node->getOperand(0), Tmp1));
3096     False = DAG.getNode(ISD::XOR, dl, NVT, False,
3097                         DAG.getConstant(x, dl, NVT));
3098     Tmp1 = DAG.getSelect(dl, NVT, Tmp2, True, False);
3099     Results.push_back(Tmp1);
3100     break;
3101   }
3102   case ISD::VAARG: {
3103     const Value *V = cast<SrcValueSDNode>(Node->getOperand(2))->getValue();
3104     EVT VT = Node->getValueType(0);
3105     Tmp1 = Node->getOperand(0);
3106     Tmp2 = Node->getOperand(1);
3107     unsigned Align = Node->getConstantOperandVal(3);
3108
3109     SDValue VAListLoad =
3110         DAG.getLoad(TLI.getPointerTy(DAG.getDataLayout()), dl, Tmp1, Tmp2,
3111                     MachinePointerInfo(V), false, false, false, 0);
3112     SDValue VAList = VAListLoad;
3113
3114     if (Align > TLI.getMinStackArgumentAlignment()) {
3115       assert(((Align & (Align-1)) == 0) && "Expected Align to be a power of 2");
3116
3117       VAList = DAG.getNode(ISD::ADD, dl, VAList.getValueType(), VAList,
3118                            DAG.getConstant(Align - 1, dl,
3119                                            VAList.getValueType()));
3120
3121       VAList = DAG.getNode(ISD::AND, dl, VAList.getValueType(), VAList,
3122                            DAG.getConstant(-(int64_t)Align, dl,
3123                                            VAList.getValueType()));
3124     }
3125
3126     // Increment the pointer, VAList, to the next vaarg
3127     Tmp3 = DAG.getNode(ISD::ADD, dl, VAList.getValueType(), VAList,
3128                        DAG.getConstant(DAG.getDataLayout().getTypeAllocSize(
3129                                            VT.getTypeForEVT(*DAG.getContext())),
3130                                        dl, VAList.getValueType()));
3131     // Store the incremented VAList to the legalized pointer
3132     Tmp3 = DAG.getStore(VAListLoad.getValue(1), dl, Tmp3, Tmp2,
3133                         MachinePointerInfo(V), false, false, 0);
3134     // Load the actual argument out of the pointer VAList
3135     Results.push_back(DAG.getLoad(VT, dl, Tmp3, VAList, MachinePointerInfo(),
3136                                   false, false, false, 0));
3137     Results.push_back(Results[0].getValue(1));
3138     break;
3139   }
3140   case ISD::VACOPY: {
3141     // This defaults to loading a pointer from the input and storing it to the
3142     // output, returning the chain.
3143     const Value *VD = cast<SrcValueSDNode>(Node->getOperand(3))->getValue();
3144     const Value *VS = cast<SrcValueSDNode>(Node->getOperand(4))->getValue();
3145     Tmp1 = DAG.getLoad(TLI.getPointerTy(DAG.getDataLayout()), dl,
3146                        Node->getOperand(0), Node->getOperand(2),
3147                        MachinePointerInfo(VS), false, false, false, 0);
3148     Tmp1 = DAG.getStore(Tmp1.getValue(1), dl, Tmp1, Node->getOperand(1),
3149                         MachinePointerInfo(VD), false, false, 0);
3150     Results.push_back(Tmp1);
3151     break;
3152   }
3153   case ISD::EXTRACT_VECTOR_ELT:
3154     if (Node->getOperand(0).getValueType().getVectorNumElements() == 1)
3155       // This must be an access of the only element.  Return it.
3156       Tmp1 = DAG.getNode(ISD::BITCAST, dl, Node->getValueType(0),
3157                          Node->getOperand(0));
3158     else
3159       Tmp1 = ExpandExtractFromVectorThroughStack(SDValue(Node, 0));
3160     Results.push_back(Tmp1);
3161     break;
3162   case ISD::EXTRACT_SUBVECTOR:
3163     Results.push_back(ExpandExtractFromVectorThroughStack(SDValue(Node, 0)));
3164     break;
3165   case ISD::INSERT_SUBVECTOR:
3166     Results.push_back(ExpandInsertToVectorThroughStack(SDValue(Node, 0)));
3167     break;
3168   case ISD::CONCAT_VECTORS: {
3169     Results.push_back(ExpandVectorBuildThroughStack(Node));
3170     break;
3171   }
3172   case ISD::SCALAR_TO_VECTOR:
3173     Results.push_back(ExpandSCALAR_TO_VECTOR(Node));
3174     break;
3175   case ISD::INSERT_VECTOR_ELT:
3176     Results.push_back(ExpandINSERT_VECTOR_ELT(Node->getOperand(0),
3177                                               Node->getOperand(1),
3178                                               Node->getOperand(2), dl));
3179     break;
3180   case ISD::VECTOR_SHUFFLE: {
3181     SmallVector<int, 32> NewMask;
3182     ArrayRef<int> Mask = cast<ShuffleVectorSDNode>(Node)->getMask();
3183
3184     EVT VT = Node->getValueType(0);
3185     EVT EltVT = VT.getVectorElementType();
3186     SDValue Op0 = Node->getOperand(0);
3187     SDValue Op1 = Node->getOperand(1);
3188     if (!TLI.isTypeLegal(EltVT)) {
3189
3190       EVT NewEltVT = TLI.getTypeToTransformTo(*DAG.getContext(), EltVT);
3191
3192       // BUILD_VECTOR operands are allowed to be wider than the element type.
3193       // But if NewEltVT is smaller that EltVT the BUILD_VECTOR does not accept
3194       // it.
3195       if (NewEltVT.bitsLT(EltVT)) {
3196
3197         // Convert shuffle node.
3198         // If original node was v4i64 and the new EltVT is i32,
3199         // cast operands to v8i32 and re-build the mask.
3200
3201         // Calculate new VT, the size of the new VT should be equal to original.
3202         EVT NewVT =
3203             EVT::getVectorVT(*DAG.getContext(), NewEltVT,
3204                              VT.getSizeInBits() / NewEltVT.getSizeInBits());
3205         assert(NewVT.bitsEq(VT));
3206
3207         // cast operands to new VT
3208         Op0 = DAG.getNode(ISD::BITCAST, dl, NewVT, Op0);
3209         Op1 = DAG.getNode(ISD::BITCAST, dl, NewVT, Op1);
3210
3211         // Convert the shuffle mask
3212         unsigned int factor =
3213                          NewVT.getVectorNumElements()/VT.getVectorNumElements();
3214
3215         // EltVT gets smaller
3216         assert(factor > 0);
3217
3218         for (unsigned i = 0; i < VT.getVectorNumElements(); ++i) {
3219           if (Mask[i] < 0) {
3220             for (unsigned fi = 0; fi < factor; ++fi)
3221               NewMask.push_back(Mask[i]);
3222           }
3223           else {
3224             for (unsigned fi = 0; fi < factor; ++fi)
3225               NewMask.push_back(Mask[i]*factor+fi);
3226           }
3227         }
3228         Mask = NewMask;
3229         VT = NewVT;
3230       }
3231       EltVT = NewEltVT;
3232     }
3233     unsigned NumElems = VT.getVectorNumElements();
3234     SmallVector<SDValue, 16> Ops;
3235     for (unsigned i = 0; i != NumElems; ++i) {
3236       if (Mask[i] < 0) {
3237         Ops.push_back(DAG.getUNDEF(EltVT));
3238         continue;
3239       }
3240       unsigned Idx = Mask[i];
3241       if (Idx < NumElems)
3242         Ops.push_back(DAG.getNode(
3243             ISD::EXTRACT_VECTOR_ELT, dl, EltVT, Op0,
3244             DAG.getConstant(Idx, dl, TLI.getVectorIdxTy(DAG.getDataLayout()))));
3245       else
3246         Ops.push_back(DAG.getNode(
3247             ISD::EXTRACT_VECTOR_ELT, dl, EltVT, Op1,
3248             DAG.getConstant(Idx - NumElems, dl,
3249                             TLI.getVectorIdxTy(DAG.getDataLayout()))));
3250     }
3251
3252     Tmp1 = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, Ops);
3253     // We may have changed the BUILD_VECTOR type. Cast it back to the Node type.
3254     Tmp1 = DAG.getNode(ISD::BITCAST, dl, Node->getValueType(0), Tmp1);
3255     Results.push_back(Tmp1);
3256     break;
3257   }
3258   case ISD::EXTRACT_ELEMENT: {
3259     EVT OpTy = Node->getOperand(0).getValueType();
3260     if (cast<ConstantSDNode>(Node->getOperand(1))->getZExtValue()) {
3261       // 1 -> Hi
3262       Tmp1 = DAG.getNode(ISD::SRL, dl, OpTy, Node->getOperand(0),
3263                          DAG.getConstant(OpTy.getSizeInBits()/2, dl,
3264                     TLI.getShiftAmountTy(Node->getOperand(0).getValueType())));
3265       Tmp1 = DAG.getNode(ISD::TRUNCATE, dl, Node->getValueType(0), Tmp1);
3266     } else {
3267       // 0 -> Lo
3268       Tmp1 = DAG.getNode(ISD::TRUNCATE, dl, Node->getValueType(0),
3269                          Node->getOperand(0));
3270     }
3271     Results.push_back(Tmp1);
3272     break;
3273   }
3274   case ISD::STACKSAVE:
3275     // Expand to CopyFromReg if the target set
3276     // StackPointerRegisterToSaveRestore.
3277     if (unsigned SP = TLI.getStackPointerRegisterToSaveRestore()) {
3278       Results.push_back(DAG.getCopyFromReg(Node->getOperand(0), dl, SP,
3279                                            Node->getValueType(0)));
3280       Results.push_back(Results[0].getValue(1));
3281     } else {
3282       Results.push_back(DAG.getUNDEF(Node->getValueType(0)));
3283       Results.push_back(Node->getOperand(0));
3284     }
3285     break;
3286   case ISD::STACKRESTORE:
3287     // Expand to CopyToReg if the target set
3288     // StackPointerRegisterToSaveRestore.
3289     if (unsigned SP = TLI.getStackPointerRegisterToSaveRestore()) {
3290       Results.push_back(DAG.getCopyToReg(Node->getOperand(0), dl, SP,
3291                                          Node->getOperand(1)));
3292     } else {
3293       Results.push_back(Node->getOperand(0));
3294     }
3295     break;
3296   case ISD::FCOPYSIGN:
3297     Results.push_back(ExpandFCOPYSIGN(Node));
3298     break;
3299   case ISD::FNEG:
3300     // Expand Y = FNEG(X) ->  Y = SUB -0.0, X
3301     Tmp1 = DAG.getConstantFP(-0.0, dl, Node->getValueType(0));
3302     Tmp1 = DAG.getNode(ISD::FSUB, dl, Node->getValueType(0), Tmp1,
3303                        Node->getOperand(0));
3304     Results.push_back(Tmp1);
3305     break;
3306   case ISD::FABS: {
3307     // Expand Y = FABS(X) -> Y = (X >u 0.0) ? X : fneg(X).
3308     EVT VT = Node->getValueType(0);
3309     Tmp1 = Node->getOperand(0);
3310     Tmp2 = DAG.getConstantFP(0.0, dl, VT);
3311     Tmp2 = DAG.getSetCC(dl, getSetCCResultType(Tmp1.getValueType()),
3312                         Tmp1, Tmp2, ISD::SETUGT);
3313     Tmp3 = DAG.getNode(ISD::FNEG, dl, VT, Tmp1);
3314     Tmp1 = DAG.getSelect(dl, VT, Tmp2, Tmp1, Tmp3);
3315     Results.push_back(Tmp1);
3316     break;
3317   }
3318   case ISD::SMIN:
3319   case ISD::SMAX:
3320   case ISD::UMIN:
3321   case ISD::UMAX: {
3322     // Expand Y = MAX(A, B) -> Y = (A > B) ? A : B
3323     ISD::CondCode Pred;
3324     switch (Node->getOpcode()) {
3325     default: llvm_unreachable("How did we get here?");
3326     case ISD::SMAX: Pred = ISD::SETGT; break;
3327     case ISD::SMIN: Pred = ISD::SETLT; break;
3328     case ISD::UMAX: Pred = ISD::SETUGT; break;
3329     case ISD::UMIN: Pred = ISD::SETULT; break;
3330     }
3331     Tmp1 = Node->getOperand(0);
3332     Tmp2 = Node->getOperand(1);
3333     Tmp1 = DAG.getSelectCC(dl, Tmp1, Tmp2, Tmp1, Tmp2, Pred);
3334     Results.push_back(Tmp1);
3335     break;
3336   }
3337     
3338   case ISD::FMINNUM:
3339     Results.push_back(ExpandFPLibCall(Node, RTLIB::FMIN_F32, RTLIB::FMIN_F64,
3340                                       RTLIB::FMIN_F80, RTLIB::FMIN_F128,
3341                                       RTLIB::FMIN_PPCF128));
3342     break;
3343   case ISD::FMAXNUM:
3344     Results.push_back(ExpandFPLibCall(Node, RTLIB::FMAX_F32, RTLIB::FMAX_F64,
3345                                       RTLIB::FMAX_F80, RTLIB::FMAX_F128,
3346                                       RTLIB::FMAX_PPCF128));
3347     break;
3348   case ISD::FSQRT:
3349     Results.push_back(ExpandFPLibCall(Node, RTLIB::SQRT_F32, RTLIB::SQRT_F64,
3350                                       RTLIB::SQRT_F80, RTLIB::SQRT_F128,
3351                                       RTLIB::SQRT_PPCF128));
3352     break;
3353   case ISD::FSIN:
3354   case ISD::FCOS: {
3355     EVT VT = Node->getValueType(0);
3356     bool isSIN = Node->getOpcode() == ISD::FSIN;
3357     // Turn fsin / fcos into ISD::FSINCOS node if there are a pair of fsin /
3358     // fcos which share the same operand and both are used.
3359     if ((TLI.isOperationLegalOrCustom(ISD::FSINCOS, VT) ||
3360          canCombineSinCosLibcall(Node, TLI, TM))
3361         && useSinCos(Node)) {
3362       SDVTList VTs = DAG.getVTList(VT, VT);
3363       Tmp1 = DAG.getNode(ISD::FSINCOS, dl, VTs, Node->getOperand(0));
3364       if (!isSIN)
3365         Tmp1 = Tmp1.getValue(1);
3366       Results.push_back(Tmp1);
3367     } else if (isSIN) {
3368       Results.push_back(ExpandFPLibCall(Node, RTLIB::SIN_F32, RTLIB::SIN_F64,
3369                                         RTLIB::SIN_F80, RTLIB::SIN_F128,
3370                                         RTLIB::SIN_PPCF128));
3371     } else {
3372       Results.push_back(ExpandFPLibCall(Node, RTLIB::COS_F32, RTLIB::COS_F64,
3373                                         RTLIB::COS_F80, RTLIB::COS_F128,
3374                                         RTLIB::COS_PPCF128));
3375     }
3376     break;
3377   }
3378   case ISD::FSINCOS:
3379     // Expand into sincos libcall.
3380     ExpandSinCosLibCall(Node, Results);
3381     break;
3382   case ISD::FLOG:
3383     Results.push_back(ExpandFPLibCall(Node, RTLIB::LOG_F32, RTLIB::LOG_F64,
3384                                       RTLIB::LOG_F80, RTLIB::LOG_F128,
3385                                       RTLIB::LOG_PPCF128));
3386     break;
3387   case ISD::FLOG2:
3388     Results.push_back(ExpandFPLibCall(Node, RTLIB::LOG2_F32, RTLIB::LOG2_F64,
3389                                       RTLIB::LOG2_F80, RTLIB::LOG2_F128,
3390                                       RTLIB::LOG2_PPCF128));
3391     break;
3392   case ISD::FLOG10:
3393     Results.push_back(ExpandFPLibCall(Node, RTLIB::LOG10_F32, RTLIB::LOG10_F64,
3394                                       RTLIB::LOG10_F80, RTLIB::LOG10_F128,
3395                                       RTLIB::LOG10_PPCF128));
3396     break;
3397   case ISD::FEXP:
3398     Results.push_back(ExpandFPLibCall(Node, RTLIB::EXP_F32, RTLIB::EXP_F64,
3399                                       RTLIB::EXP_F80, RTLIB::EXP_F128,
3400                                       RTLIB::EXP_PPCF128));
3401     break;
3402   case ISD::FEXP2:
3403     Results.push_back(ExpandFPLibCall(Node, RTLIB::EXP2_F32, RTLIB::EXP2_F64,
3404                                       RTLIB::EXP2_F80, RTLIB::EXP2_F128,
3405                                       RTLIB::EXP2_PPCF128));
3406     break;
3407   case ISD::FTRUNC:
3408     Results.push_back(ExpandFPLibCall(Node, RTLIB::TRUNC_F32, RTLIB::TRUNC_F64,
3409                                       RTLIB::TRUNC_F80, RTLIB::TRUNC_F128,
3410                                       RTLIB::TRUNC_PPCF128));
3411     break;
3412   case ISD::FFLOOR:
3413     Results.push_back(ExpandFPLibCall(Node, RTLIB::FLOOR_F32, RTLIB::FLOOR_F64,
3414                                       RTLIB::FLOOR_F80, RTLIB::FLOOR_F128,
3415                                       RTLIB::FLOOR_PPCF128));
3416     break;
3417   case ISD::FCEIL:
3418     Results.push_back(ExpandFPLibCall(Node, RTLIB::CEIL_F32, RTLIB::CEIL_F64,
3419                                       RTLIB::CEIL_F80, RTLIB::CEIL_F128,
3420                                       RTLIB::CEIL_PPCF128));
3421     break;
3422   case ISD::FRINT:
3423     Results.push_back(ExpandFPLibCall(Node, RTLIB::RINT_F32, RTLIB::RINT_F64,
3424                                       RTLIB::RINT_F80, RTLIB::RINT_F128,
3425                                       RTLIB::RINT_PPCF128));
3426     break;
3427   case ISD::FNEARBYINT:
3428     Results.push_back(ExpandFPLibCall(Node, RTLIB::NEARBYINT_F32,
3429                                       RTLIB::NEARBYINT_F64,
3430                                       RTLIB::NEARBYINT_F80,
3431                                       RTLIB::NEARBYINT_F128,
3432                                       RTLIB::NEARBYINT_PPCF128));
3433     break;
3434   case ISD::FROUND:
3435     Results.push_back(ExpandFPLibCall(Node, RTLIB::ROUND_F32,
3436                                       RTLIB::ROUND_F64,
3437                                       RTLIB::ROUND_F80,
3438                                       RTLIB::ROUND_F128,
3439                                       RTLIB::ROUND_PPCF128));
3440     break;
3441   case ISD::FPOWI:
3442     Results.push_back(ExpandFPLibCall(Node, RTLIB::POWI_F32, RTLIB::POWI_F64,
3443                                       RTLIB::POWI_F80, RTLIB::POWI_F128,
3444                                       RTLIB::POWI_PPCF128));
3445     break;
3446   case ISD::FPOW:
3447     Results.push_back(ExpandFPLibCall(Node, RTLIB::POW_F32, RTLIB::POW_F64,
3448                                       RTLIB::POW_F80, RTLIB::POW_F128,
3449                                       RTLIB::POW_PPCF128));
3450     break;
3451   case ISD::FDIV:
3452     Results.push_back(ExpandFPLibCall(Node, RTLIB::DIV_F32, RTLIB::DIV_F64,
3453                                       RTLIB::DIV_F80, RTLIB::DIV_F128,
3454                                       RTLIB::DIV_PPCF128));
3455     break;
3456   case ISD::FREM:
3457     Results.push_back(ExpandFPLibCall(Node, RTLIB::REM_F32, RTLIB::REM_F64,
3458                                       RTLIB::REM_F80, RTLIB::REM_F128,
3459                                       RTLIB::REM_PPCF128));
3460     break;
3461   case ISD::FMA:
3462     Results.push_back(ExpandFPLibCall(Node, RTLIB::FMA_F32, RTLIB::FMA_F64,
3463                                       RTLIB::FMA_F80, RTLIB::FMA_F128,
3464                                       RTLIB::FMA_PPCF128));
3465     break;
3466   case ISD::FMAD:
3467     llvm_unreachable("Illegal fmad should never be formed");
3468
3469   case ISD::FADD:
3470     Results.push_back(ExpandFPLibCall(Node, RTLIB::ADD_F32, RTLIB::ADD_F64,
3471                                       RTLIB::ADD_F80, RTLIB::ADD_F128,
3472                                       RTLIB::ADD_PPCF128));
3473     break;
3474   case ISD::FMUL:
3475     Results.push_back(ExpandFPLibCall(Node, RTLIB::MUL_F32, RTLIB::MUL_F64,
3476                                       RTLIB::MUL_F80, RTLIB::MUL_F128,
3477                                       RTLIB::MUL_PPCF128));
3478     break;
3479   case ISD::FP16_TO_FP: {
3480     if (Node->getValueType(0) == MVT::f32) {
3481       Results.push_back(ExpandLibCall(RTLIB::FPEXT_F16_F32, Node, false));
3482       break;
3483     }
3484
3485     // We can extend to types bigger than f32 in two steps without changing the
3486     // result. Since "f16 -> f32" is much more commonly available, give CodeGen
3487     // the option of emitting that before resorting to a libcall.
3488     SDValue Res =
3489         DAG.getNode(ISD::FP16_TO_FP, dl, MVT::f32, Node->getOperand(0));
3490     Results.push_back(
3491         DAG.getNode(ISD::FP_EXTEND, dl, Node->getValueType(0), Res));
3492     break;
3493   }
3494   case ISD::FP_TO_FP16: {
3495     if (!TLI.useSoftFloat() && TM.Options.UnsafeFPMath) {
3496       SDValue Op = Node->getOperand(0);
3497       MVT SVT = Op.getSimpleValueType();
3498       if ((SVT == MVT::f64 || SVT == MVT::f80) &&
3499           TLI.isOperationLegalOrCustom(ISD::FP_TO_FP16, MVT::f32)) {
3500         // Under fastmath, we can expand this node into a fround followed by
3501         // a float-half conversion.
3502         SDValue FloatVal = DAG.getNode(ISD::FP_ROUND, dl, MVT::f32, Op,
3503                                        DAG.getIntPtrConstant(0, dl));
3504         Results.push_back(
3505             DAG.getNode(ISD::FP_TO_FP16, dl, MVT::i16, FloatVal));
3506         break;
3507       }
3508     }
3509
3510     RTLIB::Libcall LC =
3511         RTLIB::getFPROUND(Node->getOperand(0).getValueType(), MVT::f16);
3512     assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unable to expand fp_to_fp16");
3513     Results.push_back(ExpandLibCall(LC, Node, false));
3514     break;
3515   }
3516   case ISD::ConstantFP: {
3517     ConstantFPSDNode *CFP = cast<ConstantFPSDNode>(Node);
3518     // Check to see if this FP immediate is already legal.
3519     // If this is a legal constant, turn it into a TargetConstantFP node.
3520     if (!TLI.isFPImmLegal(CFP->getValueAPF(), Node->getValueType(0)))
3521       Results.push_back(ExpandConstantFP(CFP, true));
3522     break;
3523   }
3524   case ISD::FSUB: {
3525     EVT VT = Node->getValueType(0);
3526     if (TLI.isOperationLegalOrCustom(ISD::FADD, VT) &&
3527         TLI.isOperationLegalOrCustom(ISD::FNEG, VT)) {
3528       Tmp1 = DAG.getNode(ISD::FNEG, dl, VT, Node->getOperand(1));
3529       Tmp1 = DAG.getNode(ISD::FADD, dl, VT, Node->getOperand(0), Tmp1);
3530       Results.push_back(Tmp1);
3531     } else {
3532       Results.push_back(ExpandFPLibCall(Node, RTLIB::SUB_F32, RTLIB::SUB_F64,
3533                                         RTLIB::SUB_F80, RTLIB::SUB_F128,
3534                                         RTLIB::SUB_PPCF128));
3535     }
3536     break;
3537   }
3538   case ISD::SUB: {
3539     EVT VT = Node->getValueType(0);
3540     assert(TLI.isOperationLegalOrCustom(ISD::ADD, VT) &&
3541            TLI.isOperationLegalOrCustom(ISD::XOR, VT) &&
3542            "Don't know how to expand this subtraction!");
3543     Tmp1 = DAG.getNode(ISD::XOR, dl, VT, Node->getOperand(1),
3544                DAG.getConstant(APInt::getAllOnesValue(VT.getSizeInBits()), dl,
3545                                VT));
3546     Tmp1 = DAG.getNode(ISD::ADD, dl, VT, Tmp1, DAG.getConstant(1, dl, VT));
3547     Results.push_back(DAG.getNode(ISD::ADD, dl, VT, Node->getOperand(0), Tmp1));
3548     break;
3549   }
3550   case ISD::UREM:
3551   case ISD::SREM: {
3552     EVT VT = Node->getValueType(0);
3553     bool isSigned = Node->getOpcode() == ISD::SREM;
3554     unsigned DivOpc = isSigned ? ISD::SDIV : ISD::UDIV;
3555     unsigned DivRemOpc = isSigned ? ISD::SDIVREM : ISD::UDIVREM;
3556     Tmp2 = Node->getOperand(0);
3557     Tmp3 = Node->getOperand(1);
3558     if (TLI.isOperationLegalOrCustom(DivRemOpc, VT) ||
3559         (isDivRemLibcallAvailable(Node, isSigned, TLI) &&
3560          // If div is legal, it's better to do the normal expansion
3561          !TLI.isOperationLegalOrCustom(DivOpc, Node->getValueType(0)) &&
3562          useDivRem(Node, isSigned, false))) {
3563       SDVTList VTs = DAG.getVTList(VT, VT);
3564       Tmp1 = DAG.getNode(DivRemOpc, dl, VTs, Tmp2, Tmp3).getValue(1);
3565     } else if (TLI.isOperationLegalOrCustom(DivOpc, VT)) {
3566       // X % Y -> X-X/Y*Y
3567       Tmp1 = DAG.getNode(DivOpc, dl, VT, Tmp2, Tmp3);
3568       Tmp1 = DAG.getNode(ISD::MUL, dl, VT, Tmp1, Tmp3);
3569       Tmp1 = DAG.getNode(ISD::SUB, dl, VT, Tmp2, Tmp1);
3570     } else if (isSigned)
3571       Tmp1 = ExpandIntLibCall(Node, true,
3572                               RTLIB::SREM_I8,
3573                               RTLIB::SREM_I16, RTLIB::SREM_I32,
3574                               RTLIB::SREM_I64, RTLIB::SREM_I128);
3575     else
3576       Tmp1 = ExpandIntLibCall(Node, false,
3577                               RTLIB::UREM_I8,
3578                               RTLIB::UREM_I16, RTLIB::UREM_I32,
3579                               RTLIB::UREM_I64, RTLIB::UREM_I128);
3580     Results.push_back(Tmp1);
3581     break;
3582   }
3583   case ISD::UDIV:
3584   case ISD::SDIV: {
3585     bool isSigned = Node->getOpcode() == ISD::SDIV;
3586     unsigned DivRemOpc = isSigned ? ISD::SDIVREM : ISD::UDIVREM;
3587     EVT VT = Node->getValueType(0);
3588     SDVTList VTs = DAG.getVTList(VT, VT);
3589     if (TLI.isOperationLegalOrCustom(DivRemOpc, VT) ||
3590         (isDivRemLibcallAvailable(Node, isSigned, TLI) &&
3591          useDivRem(Node, isSigned, true)))
3592       Tmp1 = DAG.getNode(DivRemOpc, dl, VTs, Node->getOperand(0),
3593                          Node->getOperand(1));
3594     else if (isSigned)
3595       Tmp1 = ExpandIntLibCall(Node, true,
3596                               RTLIB::SDIV_I8,
3597                               RTLIB::SDIV_I16, RTLIB::SDIV_I32,
3598                               RTLIB::SDIV_I64, RTLIB::SDIV_I128);
3599     else
3600       Tmp1 = ExpandIntLibCall(Node, false,
3601                               RTLIB::UDIV_I8,
3602                               RTLIB::UDIV_I16, RTLIB::UDIV_I32,
3603                               RTLIB::UDIV_I64, RTLIB::UDIV_I128);
3604     Results.push_back(Tmp1);
3605     break;
3606   }
3607   case ISD::MULHU:
3608   case ISD::MULHS: {
3609     unsigned ExpandOpcode = Node->getOpcode() == ISD::MULHU ? ISD::UMUL_LOHI :
3610                                                               ISD::SMUL_LOHI;
3611     EVT VT = Node->getValueType(0);
3612     SDVTList VTs = DAG.getVTList(VT, VT);
3613     assert(TLI.isOperationLegalOrCustom(ExpandOpcode, VT) &&
3614            "If this wasn't legal, it shouldn't have been created!");
3615     Tmp1 = DAG.getNode(ExpandOpcode, dl, VTs, Node->getOperand(0),
3616                        Node->getOperand(1));
3617     Results.push_back(Tmp1.getValue(1));
3618     break;
3619   }
3620   case ISD::SDIVREM:
3621   case ISD::UDIVREM:
3622     // Expand into divrem libcall
3623     ExpandDivRemLibCall(Node, Results);
3624     break;
3625   case ISD::MUL: {
3626     EVT VT = Node->getValueType(0);
3627     SDVTList VTs = DAG.getVTList(VT, VT);
3628     // See if multiply or divide can be lowered using two-result operations.
3629     // We just need the low half of the multiply; try both the signed
3630     // and unsigned forms. If the target supports both SMUL_LOHI and
3631     // UMUL_LOHI, form a preference by checking which forms of plain
3632     // MULH it supports.
3633     bool HasSMUL_LOHI = TLI.isOperationLegalOrCustom(ISD::SMUL_LOHI, VT);
3634     bool HasUMUL_LOHI = TLI.isOperationLegalOrCustom(ISD::UMUL_LOHI, VT);
3635     bool HasMULHS = TLI.isOperationLegalOrCustom(ISD::MULHS, VT);
3636     bool HasMULHU = TLI.isOperationLegalOrCustom(ISD::MULHU, VT);
3637     unsigned OpToUse = 0;
3638     if (HasSMUL_LOHI && !HasMULHS) {
3639       OpToUse = ISD::SMUL_LOHI;
3640     } else if (HasUMUL_LOHI && !HasMULHU) {
3641       OpToUse = ISD::UMUL_LOHI;
3642     } else if (HasSMUL_LOHI) {
3643       OpToUse = ISD::SMUL_LOHI;
3644     } else if (HasUMUL_LOHI) {
3645       OpToUse = ISD::UMUL_LOHI;
3646     }
3647     if (OpToUse) {
3648       Results.push_back(DAG.getNode(OpToUse, dl, VTs, Node->getOperand(0),
3649                                     Node->getOperand(1)));
3650       break;
3651     }
3652
3653     SDValue Lo, Hi;
3654     EVT HalfType = VT.getHalfSizedIntegerVT(*DAG.getContext());
3655     if (TLI.isOperationLegalOrCustom(ISD::ZERO_EXTEND, VT) &&
3656         TLI.isOperationLegalOrCustom(ISD::ANY_EXTEND, VT) &&
3657         TLI.isOperationLegalOrCustom(ISD::SHL, VT) &&
3658         TLI.isOperationLegalOrCustom(ISD::OR, VT) &&
3659         TLI.expandMUL(Node, Lo, Hi, HalfType, DAG)) {
3660       Lo = DAG.getNode(ISD::ZERO_EXTEND, dl, VT, Lo);
3661       Hi = DAG.getNode(ISD::ANY_EXTEND, dl, VT, Hi);
3662       SDValue Shift = DAG.getConstant(HalfType.getSizeInBits(), dl,
3663                                       TLI.getShiftAmountTy(HalfType));
3664       Hi = DAG.getNode(ISD::SHL, dl, VT, Hi, Shift);
3665       Results.push_back(DAG.getNode(ISD::OR, dl, VT, Lo, Hi));
3666       break;
3667     }
3668
3669     Tmp1 = ExpandIntLibCall(Node, false,
3670                             RTLIB::MUL_I8,
3671                             RTLIB::MUL_I16, RTLIB::MUL_I32,
3672                             RTLIB::MUL_I64, RTLIB::MUL_I128);
3673     Results.push_back(Tmp1);
3674     break;
3675   }
3676   case ISD::SADDO:
3677   case ISD::SSUBO: {
3678     SDValue LHS = Node->getOperand(0);
3679     SDValue RHS = Node->getOperand(1);
3680     SDValue Sum = DAG.getNode(Node->getOpcode() == ISD::SADDO ?
3681                               ISD::ADD : ISD::SUB, dl, LHS.getValueType(),
3682                               LHS, RHS);
3683     Results.push_back(Sum);
3684     EVT ResultType = Node->getValueType(1);
3685     EVT OType = getSetCCResultType(Node->getValueType(0));
3686
3687     SDValue Zero = DAG.getConstant(0, dl, LHS.getValueType());
3688
3689     //   LHSSign -> LHS >= 0
3690     //   RHSSign -> RHS >= 0
3691     //   SumSign -> Sum >= 0
3692     //
3693     //   Add:
3694     //   Overflow -> (LHSSign == RHSSign) && (LHSSign != SumSign)
3695     //   Sub:
3696     //   Overflow -> (LHSSign != RHSSign) && (LHSSign != SumSign)
3697     //
3698     SDValue LHSSign = DAG.getSetCC(dl, OType, LHS, Zero, ISD::SETGE);
3699     SDValue RHSSign = DAG.getSetCC(dl, OType, RHS, Zero, ISD::SETGE);
3700     SDValue SignsMatch = DAG.getSetCC(dl, OType, LHSSign, RHSSign,
3701                                       Node->getOpcode() == ISD::SADDO ?
3702                                       ISD::SETEQ : ISD::SETNE);
3703
3704     SDValue SumSign = DAG.getSetCC(dl, OType, Sum, Zero, ISD::SETGE);
3705     SDValue SumSignNE = DAG.getSetCC(dl, OType, LHSSign, SumSign, ISD::SETNE);
3706
3707     SDValue Cmp = DAG.getNode(ISD::AND, dl, OType, SignsMatch, SumSignNE);
3708     Results.push_back(DAG.getBoolExtOrTrunc(Cmp, dl, ResultType, ResultType));
3709     break;
3710   }
3711   case ISD::UADDO:
3712   case ISD::USUBO: {
3713     SDValue LHS = Node->getOperand(0);
3714     SDValue RHS = Node->getOperand(1);
3715     SDValue Sum = DAG.getNode(Node->getOpcode() == ISD::UADDO ?
3716                               ISD::ADD : ISD::SUB, dl, LHS.getValueType(),
3717                               LHS, RHS);
3718     Results.push_back(Sum);
3719
3720     EVT ResultType = Node->getValueType(1);
3721     EVT SetCCType = getSetCCResultType(Node->getValueType(0));
3722     ISD::CondCode CC
3723       = Node->getOpcode() == ISD::UADDO ? ISD::SETULT : ISD::SETUGT;
3724     SDValue SetCC = DAG.getSetCC(dl, SetCCType, Sum, LHS, CC);
3725
3726     Results.push_back(DAG.getBoolExtOrTrunc(SetCC, dl, ResultType, ResultType));
3727     break;
3728   }
3729   case ISD::UMULO:
3730   case ISD::SMULO: {
3731     EVT VT = Node->getValueType(0);
3732     EVT WideVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits() * 2);
3733     SDValue LHS = Node->getOperand(0);
3734     SDValue RHS = Node->getOperand(1);
3735     SDValue BottomHalf;
3736     SDValue TopHalf;
3737     static const unsigned Ops[2][3] =
3738         { { ISD::MULHU, ISD::UMUL_LOHI, ISD::ZERO_EXTEND },
3739           { ISD::MULHS, ISD::SMUL_LOHI, ISD::SIGN_EXTEND }};
3740     bool isSigned = Node->getOpcode() == ISD::SMULO;
3741     if (TLI.isOperationLegalOrCustom(Ops[isSigned][0], VT)) {
3742       BottomHalf = DAG.getNode(ISD::MUL, dl, VT, LHS, RHS);
3743       TopHalf = DAG.getNode(Ops[isSigned][0], dl, VT, LHS, RHS);
3744     } else if (TLI.isOperationLegalOrCustom(Ops[isSigned][1], VT)) {
3745       BottomHalf = DAG.getNode(Ops[isSigned][1], dl, DAG.getVTList(VT, VT), LHS,
3746                                RHS);
3747       TopHalf = BottomHalf.getValue(1);
3748     } else if (TLI.isTypeLegal(WideVT)) {
3749       LHS = DAG.getNode(Ops[isSigned][2], dl, WideVT, LHS);
3750       RHS = DAG.getNode(Ops[isSigned][2], dl, WideVT, RHS);
3751       Tmp1 = DAG.getNode(ISD::MUL, dl, WideVT, LHS, RHS);
3752       BottomHalf = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, VT, Tmp1,
3753                                DAG.getIntPtrConstant(0, dl));
3754       TopHalf = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, VT, Tmp1,
3755                             DAG.getIntPtrConstant(1, dl));
3756     } else {
3757       // We can fall back to a libcall with an illegal type for the MUL if we
3758       // have a libcall big enough.
3759       // Also, we can fall back to a division in some cases, but that's a big
3760       // performance hit in the general case.
3761       RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
3762       if (WideVT == MVT::i16)
3763         LC = RTLIB::MUL_I16;
3764       else if (WideVT == MVT::i32)
3765         LC = RTLIB::MUL_I32;
3766       else if (WideVT == MVT::i64)
3767         LC = RTLIB::MUL_I64;
3768       else if (WideVT == MVT::i128)
3769         LC = RTLIB::MUL_I128;
3770       assert(LC != RTLIB::UNKNOWN_LIBCALL && "Cannot expand this operation!");
3771
3772       // The high part is obtained by SRA'ing all but one of the bits of low
3773       // part.
3774       unsigned LoSize = VT.getSizeInBits();
3775       SDValue HiLHS =
3776           DAG.getNode(ISD::SRA, dl, VT, RHS,
3777                       DAG.getConstant(LoSize - 1, dl,
3778                                       TLI.getPointerTy(DAG.getDataLayout())));
3779       SDValue HiRHS =
3780           DAG.getNode(ISD::SRA, dl, VT, LHS,
3781                       DAG.getConstant(LoSize - 1, dl,
3782                                       TLI.getPointerTy(DAG.getDataLayout())));
3783
3784       // Here we're passing the 2 arguments explicitly as 4 arguments that are
3785       // pre-lowered to the correct types. This all depends upon WideVT not
3786       // being a legal type for the architecture and thus has to be split to
3787       // two arguments.
3788       SDValue Args[] = { LHS, HiLHS, RHS, HiRHS };
3789       SDValue Ret = ExpandLibCall(LC, WideVT, Args, 4, isSigned, dl);
3790       BottomHalf = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, VT, Ret,
3791                                DAG.getIntPtrConstant(0, dl));
3792       TopHalf = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, VT, Ret,
3793                             DAG.getIntPtrConstant(1, dl));
3794       // Ret is a node with an illegal type. Because such things are not
3795       // generally permitted during this phase of legalization, make sure the
3796       // node has no more uses. The above EXTRACT_ELEMENT nodes should have been
3797       // folded.
3798       assert(Ret->use_empty() &&
3799              "Unexpected uses of illegally type from expanded lib call.");
3800     }
3801
3802     if (isSigned) {
3803       Tmp1 = DAG.getConstant(VT.getSizeInBits() - 1, dl,
3804                              TLI.getShiftAmountTy(BottomHalf.getValueType()));
3805       Tmp1 = DAG.getNode(ISD::SRA, dl, VT, BottomHalf, Tmp1);
3806       TopHalf = DAG.getSetCC(dl, getSetCCResultType(VT), TopHalf, Tmp1,
3807                              ISD::SETNE);
3808     } else {
3809       TopHalf = DAG.getSetCC(dl, getSetCCResultType(VT), TopHalf,
3810                              DAG.getConstant(0, dl, VT), ISD::SETNE);
3811     }
3812     Results.push_back(BottomHalf);
3813     Results.push_back(TopHalf);
3814     break;
3815   }
3816   case ISD::BUILD_PAIR: {
3817     EVT PairTy = Node->getValueType(0);
3818     Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, dl, PairTy, Node->getOperand(0));
3819     Tmp2 = DAG.getNode(ISD::ANY_EXTEND, dl, PairTy, Node->getOperand(1));
3820     Tmp2 = DAG.getNode(ISD::SHL, dl, PairTy, Tmp2,
3821                        DAG.getConstant(PairTy.getSizeInBits()/2, dl,
3822                                        TLI.getShiftAmountTy(PairTy)));
3823     Results.push_back(DAG.getNode(ISD::OR, dl, PairTy, Tmp1, Tmp2));
3824     break;
3825   }
3826   case ISD::SELECT:
3827     Tmp1 = Node->getOperand(0);
3828     Tmp2 = Node->getOperand(1);
3829     Tmp3 = Node->getOperand(2);
3830     if (Tmp1.getOpcode() == ISD::SETCC) {
3831       Tmp1 = DAG.getSelectCC(dl, Tmp1.getOperand(0), Tmp1.getOperand(1),
3832                              Tmp2, Tmp3,
3833                              cast<CondCodeSDNode>(Tmp1.getOperand(2))->get());
3834     } else {
3835       Tmp1 = DAG.getSelectCC(dl, Tmp1,
3836                              DAG.getConstant(0, dl, Tmp1.getValueType()),
3837                              Tmp2, Tmp3, ISD::SETNE);
3838     }
3839     Results.push_back(Tmp1);
3840     break;
3841   case ISD::BR_JT: {
3842     SDValue Chain = Node->getOperand(0);
3843     SDValue Table = Node->getOperand(1);
3844     SDValue Index = Node->getOperand(2);
3845
3846     EVT PTy = TLI.getPointerTy(DAG.getDataLayout());
3847
3848     const DataLayout &TD = DAG.getDataLayout();
3849     unsigned EntrySize =
3850       DAG.getMachineFunction().getJumpTableInfo()->getEntrySize(TD);
3851
3852     Index = DAG.getNode(ISD::MUL, dl, Index.getValueType(), Index,
3853                         DAG.getConstant(EntrySize, dl, Index.getValueType()));
3854     SDValue Addr = DAG.getNode(ISD::ADD, dl, Index.getValueType(),
3855                                Index, Table);
3856
3857     EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), EntrySize * 8);
3858     SDValue LD = DAG.getExtLoad(ISD::SEXTLOAD, dl, PTy, Chain, Addr,
3859                                 MachinePointerInfo::getJumpTable(), MemVT,
3860                                 false, false, false, 0);
3861     Addr = LD;
3862     if (TM.getRelocationModel() == Reloc::PIC_) {
3863       // For PIC, the sequence is:
3864       // BRIND(load(Jumptable + index) + RelocBase)
3865       // RelocBase can be JumpTable, GOT or some sort of global base.
3866       Addr = DAG.getNode(ISD::ADD, dl, PTy, Addr,
3867                           TLI.getPICJumpTableRelocBase(Table, DAG));
3868     }
3869     Tmp1 = DAG.getNode(ISD::BRIND, dl, MVT::Other, LD.getValue(1), Addr);
3870     Results.push_back(Tmp1);
3871     break;
3872   }
3873   case ISD::BRCOND:
3874     // Expand brcond's setcc into its constituent parts and create a BR_CC
3875     // Node.
3876     Tmp1 = Node->getOperand(0);
3877     Tmp2 = Node->getOperand(1);
3878     if (Tmp2.getOpcode() == ISD::SETCC) {
3879       Tmp1 = DAG.getNode(ISD::BR_CC, dl, MVT::Other,
3880                          Tmp1, Tmp2.getOperand(2),
3881                          Tmp2.getOperand(0), Tmp2.getOperand(1),
3882                          Node->getOperand(2));
3883     } else {
3884       // We test only the i1 bit.  Skip the AND if UNDEF.
3885       Tmp3 = (Tmp2.getOpcode() == ISD::UNDEF) ? Tmp2 :
3886         DAG.getNode(ISD::AND, dl, Tmp2.getValueType(), Tmp2,
3887                     DAG.getConstant(1, dl, Tmp2.getValueType()));
3888       Tmp1 = DAG.getNode(ISD::BR_CC, dl, MVT::Other, Tmp1,
3889                          DAG.getCondCode(ISD::SETNE), Tmp3,
3890                          DAG.getConstant(0, dl, Tmp3.getValueType()),
3891                          Node->getOperand(2));
3892     }
3893     Results.push_back(Tmp1);
3894     break;
3895   case ISD::SETCC: {
3896     Tmp1 = Node->getOperand(0);
3897     Tmp2 = Node->getOperand(1);
3898     Tmp3 = Node->getOperand(2);
3899     bool Legalized = LegalizeSetCCCondCode(Node->getValueType(0), Tmp1, Tmp2,
3900                                            Tmp3, NeedInvert, dl);
3901
3902     if (Legalized) {
3903       // If we expanded the SETCC by swapping LHS and RHS, or by inverting the
3904       // condition code, create a new SETCC node.
3905       if (Tmp3.getNode())
3906         Tmp1 = DAG.getNode(ISD::SETCC, dl, Node->getValueType(0),
3907                            Tmp1, Tmp2, Tmp3);
3908
3909       // If we expanded the SETCC by inverting the condition code, then wrap
3910       // the existing SETCC in a NOT to restore the intended condition.
3911       if (NeedInvert)
3912         Tmp1 = DAG.getLogicalNOT(dl, Tmp1, Tmp1->getValueType(0));
3913
3914       Results.push_back(Tmp1);
3915       break;
3916     }
3917
3918     // Otherwise, SETCC for the given comparison type must be completely
3919     // illegal; expand it into a SELECT_CC.
3920     EVT VT = Node->getValueType(0);
3921     int TrueValue;
3922     switch (TLI.getBooleanContents(Tmp1->getValueType(0))) {
3923     case TargetLowering::ZeroOrOneBooleanContent:
3924     case TargetLowering::UndefinedBooleanContent:
3925       TrueValue = 1;
3926       break;
3927     case TargetLowering::ZeroOrNegativeOneBooleanContent:
3928       TrueValue = -1;
3929       break;
3930     }
3931     Tmp1 = DAG.getNode(ISD::SELECT_CC, dl, VT, Tmp1, Tmp2,
3932                        DAG.getConstant(TrueValue, dl, VT),
3933                        DAG.getConstant(0, dl, VT),
3934                        Tmp3);
3935     Results.push_back(Tmp1);
3936     break;
3937   }
3938   case ISD::SELECT_CC: {
3939     Tmp1 = Node->getOperand(0);   // LHS
3940     Tmp2 = Node->getOperand(1);   // RHS
3941     Tmp3 = Node->getOperand(2);   // True
3942     Tmp4 = Node->getOperand(3);   // False
3943     EVT VT = Node->getValueType(0);
3944     SDValue CC = Node->getOperand(4);
3945     ISD::CondCode CCOp = cast<CondCodeSDNode>(CC)->get();
3946
3947     if (TLI.isCondCodeLegal(CCOp, Tmp1.getSimpleValueType())) {
3948       // If the condition code is legal, then we need to expand this
3949       // node using SETCC and SELECT.
3950       EVT CmpVT = Tmp1.getValueType();
3951       assert(!TLI.isOperationExpand(ISD::SELECT, VT) &&
3952              "Cannot expand ISD::SELECT_CC when ISD::SELECT also needs to be "
3953              "expanded.");
3954       EVT CCVT =
3955           TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), CmpVT);
3956       SDValue Cond = DAG.getNode(ISD::SETCC, dl, CCVT, Tmp1, Tmp2, CC);
3957       Results.push_back(DAG.getSelect(dl, VT, Cond, Tmp3, Tmp4));
3958       break;
3959     }
3960
3961     // SELECT_CC is legal, so the condition code must not be.
3962     bool Legalized = false;
3963     // Try to legalize by inverting the condition.  This is for targets that
3964     // might support an ordered version of a condition, but not the unordered
3965     // version (or vice versa).
3966     ISD::CondCode InvCC = ISD::getSetCCInverse(CCOp,
3967                                                Tmp1.getValueType().isInteger());
3968     if (TLI.isCondCodeLegal(InvCC, Tmp1.getSimpleValueType())) {
3969       // Use the new condition code and swap true and false
3970       Legalized = true;
3971       Tmp1 = DAG.getSelectCC(dl, Tmp1, Tmp2, Tmp4, Tmp3, InvCC);
3972     } else {
3973       // If The inverse is not legal, then try to swap the arguments using
3974       // the inverse condition code.
3975       ISD::CondCode SwapInvCC = ISD::getSetCCSwappedOperands(InvCC);
3976       if (TLI.isCondCodeLegal(SwapInvCC, Tmp1.getSimpleValueType())) {
3977         // The swapped inverse condition is legal, so swap true and false,
3978         // lhs and rhs.
3979         Legalized = true;
3980         Tmp1 = DAG.getSelectCC(dl, Tmp2, Tmp1, Tmp4, Tmp3, SwapInvCC);
3981       }
3982     }
3983
3984     if (!Legalized) {
3985       Legalized = LegalizeSetCCCondCode(
3986           getSetCCResultType(Tmp1.getValueType()), Tmp1, Tmp2, CC, NeedInvert,
3987           dl);
3988
3989       assert(Legalized && "Can't legalize SELECT_CC with legal condition!");
3990
3991       // If we expanded the SETCC by inverting the condition code, then swap
3992       // the True/False operands to match.
3993       if (NeedInvert)
3994         std::swap(Tmp3, Tmp4);
3995
3996       // If we expanded the SETCC by swapping LHS and RHS, or by inverting the
3997       // condition code, create a new SELECT_CC node.
3998       if (CC.getNode()) {
3999         Tmp1 = DAG.getNode(ISD::SELECT_CC, dl, Node->getValueType(0),
4000                            Tmp1, Tmp2, Tmp3, Tmp4, CC);
4001       } else {
4002         Tmp2 = DAG.getConstant(0, dl, Tmp1.getValueType());
4003         CC = DAG.getCondCode(ISD::SETNE);
4004         Tmp1 = DAG.getNode(ISD::SELECT_CC, dl, Node->getValueType(0), Tmp1,
4005                            Tmp2, Tmp3, Tmp4, CC);
4006       }
4007     }
4008     Results.push_back(Tmp1);
4009     break;
4010   }
4011   case ISD::BR_CC: {
4012     Tmp1 = Node->getOperand(0);              // Chain
4013     Tmp2 = Node->getOperand(2);              // LHS
4014     Tmp3 = Node->getOperand(3);              // RHS
4015     Tmp4 = Node->getOperand(1);              // CC
4016
4017     bool Legalized = LegalizeSetCCCondCode(getSetCCResultType(
4018         Tmp2.getValueType()), Tmp2, Tmp3, Tmp4, NeedInvert, dl);
4019     (void)Legalized;
4020     assert(Legalized && "Can't legalize BR_CC with legal condition!");
4021
4022     // If we expanded the SETCC by inverting the condition code, then wrap
4023     // the existing SETCC in a NOT to restore the intended condition.
4024     if (NeedInvert)
4025       Tmp4 = DAG.getNOT(dl, Tmp4, Tmp4->getValueType(0));
4026
4027     // If we expanded the SETCC by swapping LHS and RHS, create a new BR_CC
4028     // node.
4029     if (Tmp4.getNode()) {
4030       Tmp1 = DAG.getNode(ISD::BR_CC, dl, Node->getValueType(0), Tmp1,
4031                          Tmp4, Tmp2, Tmp3, Node->getOperand(4));
4032     } else {
4033       Tmp3 = DAG.getConstant(0, dl, Tmp2.getValueType());
4034       Tmp4 = DAG.getCondCode(ISD::SETNE);
4035       Tmp1 = DAG.getNode(ISD::BR_CC, dl, Node->getValueType(0), Tmp1, Tmp4,
4036                          Tmp2, Tmp3, Node->getOperand(4));
4037     }
4038     Results.push_back(Tmp1);
4039     break;
4040   }
4041   case ISD::BUILD_VECTOR:
4042     Results.push_back(ExpandBUILD_VECTOR(Node));
4043     break;
4044   case ISD::SRA:
4045   case ISD::SRL:
4046   case ISD::SHL: {
4047     // Scalarize vector SRA/SRL/SHL.
4048     EVT VT = Node->getValueType(0);
4049     assert(VT.isVector() && "Unable to legalize non-vector shift");
4050     assert(TLI.isTypeLegal(VT.getScalarType())&& "Element type must be legal");
4051     unsigned NumElem = VT.getVectorNumElements();
4052
4053     SmallVector<SDValue, 8> Scalars;
4054     for (unsigned Idx = 0; Idx < NumElem; Idx++) {
4055       SDValue Ex = DAG.getNode(
4056           ISD::EXTRACT_VECTOR_ELT, dl, VT.getScalarType(), Node->getOperand(0),
4057           DAG.getConstant(Idx, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
4058       SDValue Sh = DAG.getNode(
4059           ISD::EXTRACT_VECTOR_ELT, dl, VT.getScalarType(), Node->getOperand(1),
4060           DAG.getConstant(Idx, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
4061       Scalars.push_back(DAG.getNode(Node->getOpcode(), dl,
4062                                     VT.getScalarType(), Ex, Sh));
4063     }
4064     SDValue Result =
4065       DAG.getNode(ISD::BUILD_VECTOR, dl, Node->getValueType(0), Scalars);
4066     ReplaceNode(SDValue(Node, 0), Result);
4067     break;
4068   }
4069   case ISD::GLOBAL_OFFSET_TABLE:
4070   case ISD::GlobalAddress:
4071   case ISD::GlobalTLSAddress:
4072   case ISD::ExternalSymbol:
4073   case ISD::ConstantPool:
4074   case ISD::JumpTable:
4075   case ISD::INTRINSIC_W_CHAIN:
4076   case ISD::INTRINSIC_WO_CHAIN:
4077   case ISD::INTRINSIC_VOID:
4078     // FIXME: Custom lowering for these operations shouldn't return null!
4079     break;
4080   }
4081
4082   // Replace the original node with the legalized result.
4083   if (!Results.empty())
4084     ReplaceNode(Node, Results.data());
4085 }
4086
4087 void SelectionDAGLegalize::PromoteNode(SDNode *Node) {
4088   SmallVector<SDValue, 8> Results;
4089   MVT OVT = Node->getSimpleValueType(0);
4090   if (Node->getOpcode() == ISD::UINT_TO_FP ||
4091       Node->getOpcode() == ISD::SINT_TO_FP ||
4092       Node->getOpcode() == ISD::SETCC) {
4093     OVT = Node->getOperand(0).getSimpleValueType();
4094   }
4095   if (Node->getOpcode() == ISD::BR_CC)
4096     OVT = Node->getOperand(2).getSimpleValueType();
4097   MVT NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), OVT);
4098   SDLoc dl(Node);
4099   SDValue Tmp1, Tmp2, Tmp3;
4100   switch (Node->getOpcode()) {
4101   case ISD::CTTZ:
4102   case ISD::CTTZ_ZERO_UNDEF:
4103   case ISD::CTLZ:
4104   case ISD::CTLZ_ZERO_UNDEF:
4105   case ISD::CTPOP:
4106     // Zero extend the argument.
4107     Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Node->getOperand(0));
4108     // Perform the larger operation. For CTPOP and CTTZ_ZERO_UNDEF, this is
4109     // already the correct result.
4110     Tmp1 = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1);
4111     if (Node->getOpcode() == ISD::CTTZ) {
4112       // FIXME: This should set a bit in the zero extended value instead.
4113       Tmp2 = DAG.getSetCC(dl, getSetCCResultType(NVT),
4114                           Tmp1, DAG.getConstant(NVT.getSizeInBits(), dl, NVT),
4115                           ISD::SETEQ);
4116       Tmp1 = DAG.getSelect(dl, NVT, Tmp2,
4117                            DAG.getConstant(OVT.getSizeInBits(), dl, NVT), Tmp1);
4118     } else if (Node->getOpcode() == ISD::CTLZ ||
4119                Node->getOpcode() == ISD::CTLZ_ZERO_UNDEF) {
4120       // Tmp1 = Tmp1 - (sizeinbits(NVT) - sizeinbits(Old VT))
4121       Tmp1 = DAG.getNode(ISD::SUB, dl, NVT, Tmp1,
4122                           DAG.getConstant(NVT.getSizeInBits() -
4123                                           OVT.getSizeInBits(), dl, NVT));
4124     }
4125     Results.push_back(DAG.getNode(ISD::TRUNCATE, dl, OVT, Tmp1));
4126     break;
4127   case ISD::BSWAP: {
4128     unsigned DiffBits = NVT.getSizeInBits() - OVT.getSizeInBits();
4129     Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Node->getOperand(0));
4130     Tmp1 = DAG.getNode(ISD::BSWAP, dl, NVT, Tmp1);
4131     Tmp1 = DAG.getNode(ISD::SRL, dl, NVT, Tmp1,
4132                        DAG.getConstant(DiffBits, dl,
4133                                        TLI.getShiftAmountTy(NVT)));
4134     Results.push_back(Tmp1);
4135     break;
4136   }
4137   case ISD::FP_TO_UINT:
4138   case ISD::FP_TO_SINT:
4139     Tmp1 = PromoteLegalFP_TO_INT(Node->getOperand(0), Node->getValueType(0),
4140                                  Node->getOpcode() == ISD::FP_TO_SINT, dl);
4141     Results.push_back(Tmp1);
4142     break;
4143   case ISD::UINT_TO_FP:
4144   case ISD::SINT_TO_FP:
4145     Tmp1 = PromoteLegalINT_TO_FP(Node->getOperand(0), Node->getValueType(0),
4146                                  Node->getOpcode() == ISD::SINT_TO_FP, dl);
4147     Results.push_back(Tmp1);
4148     break;
4149   case ISD::VAARG: {
4150     SDValue Chain = Node->getOperand(0); // Get the chain.
4151     SDValue Ptr = Node->getOperand(1); // Get the pointer.
4152
4153     unsigned TruncOp;
4154     if (OVT.isVector()) {
4155       TruncOp = ISD::BITCAST;
4156     } else {
4157       assert(OVT.isInteger()
4158         && "VAARG promotion is supported only for vectors or integer types");
4159       TruncOp = ISD::TRUNCATE;
4160     }
4161
4162     // Perform the larger operation, then convert back
4163     Tmp1 = DAG.getVAArg(NVT, dl, Chain, Ptr, Node->getOperand(2),
4164              Node->getConstantOperandVal(3));
4165     Chain = Tmp1.getValue(1);
4166
4167     Tmp2 = DAG.getNode(TruncOp, dl, OVT, Tmp1);
4168
4169     // Modified the chain result - switch anything that used the old chain to
4170     // use the new one.
4171     DAG.ReplaceAllUsesOfValueWith(SDValue(Node, 0), Tmp2);
4172     DAG.ReplaceAllUsesOfValueWith(SDValue(Node, 1), Chain);
4173     if (UpdatedNodes) {
4174       UpdatedNodes->insert(Tmp2.getNode());
4175       UpdatedNodes->insert(Chain.getNode());
4176     }
4177     ReplacedNode(Node);
4178     break;
4179   }
4180   case ISD::AND:
4181   case ISD::OR:
4182   case ISD::XOR: {
4183     unsigned ExtOp, TruncOp;
4184     if (OVT.isVector()) {
4185       ExtOp   = ISD::BITCAST;
4186       TruncOp = ISD::BITCAST;
4187     } else {
4188       assert(OVT.isInteger() && "Cannot promote logic operation");
4189       ExtOp   = ISD::ANY_EXTEND;
4190       TruncOp = ISD::TRUNCATE;
4191     }
4192     // Promote each of the values to the new type.
4193     Tmp1 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(0));
4194     Tmp2 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(1));
4195     // Perform the larger operation, then convert back
4196     Tmp1 = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2);
4197     Results.push_back(DAG.getNode(TruncOp, dl, OVT, Tmp1));
4198     break;
4199   }
4200   case ISD::SELECT: {
4201     unsigned ExtOp, TruncOp;
4202     if (Node->getValueType(0).isVector() ||
4203         Node->getValueType(0).getSizeInBits() == NVT.getSizeInBits()) {
4204       ExtOp   = ISD::BITCAST;
4205       TruncOp = ISD::BITCAST;
4206     } else if (Node->getValueType(0).isInteger()) {
4207       ExtOp   = ISD::ANY_EXTEND;
4208       TruncOp = ISD::TRUNCATE;
4209     } else {
4210       ExtOp   = ISD::FP_EXTEND;
4211       TruncOp = ISD::FP_ROUND;
4212     }
4213     Tmp1 = Node->getOperand(0);
4214     // Promote each of the values to the new type.
4215     Tmp2 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(1));
4216     Tmp3 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(2));
4217     // Perform the larger operation, then round down.
4218     Tmp1 = DAG.getSelect(dl, NVT, Tmp1, Tmp2, Tmp3);
4219     if (TruncOp != ISD::FP_ROUND)
4220       Tmp1 = DAG.getNode(TruncOp, dl, Node->getValueType(0), Tmp1);
4221     else
4222       Tmp1 = DAG.getNode(TruncOp, dl, Node->getValueType(0), Tmp1,
4223                          DAG.getIntPtrConstant(0, dl));
4224     Results.push_back(Tmp1);
4225     break;
4226   }
4227   case ISD::VECTOR_SHUFFLE: {
4228     ArrayRef<int> Mask = cast<ShuffleVectorSDNode>(Node)->getMask();
4229
4230     // Cast the two input vectors.
4231     Tmp1 = DAG.getNode(ISD::BITCAST, dl, NVT, Node->getOperand(0));
4232     Tmp2 = DAG.getNode(ISD::BITCAST, dl, NVT, Node->getOperand(1));
4233
4234     // Convert the shuffle mask to the right # elements.
4235     Tmp1 = ShuffleWithNarrowerEltType(NVT, OVT, dl, Tmp1, Tmp2, Mask);
4236     Tmp1 = DAG.getNode(ISD::BITCAST, dl, OVT, Tmp1);
4237     Results.push_back(Tmp1);
4238     break;
4239   }
4240   case ISD::SETCC: {
4241     unsigned ExtOp = ISD::FP_EXTEND;
4242     if (NVT.isInteger()) {
4243       ISD::CondCode CCCode =
4244         cast<CondCodeSDNode>(Node->getOperand(2))->get();
4245       ExtOp = isSignedIntSetCC(CCCode) ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
4246     }
4247     Tmp1 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(0));
4248     Tmp2 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(1));
4249     Results.push_back(DAG.getNode(ISD::SETCC, dl, Node->getValueType(0),
4250                                   Tmp1, Tmp2, Node->getOperand(2)));
4251     break;
4252   }
4253   case ISD::BR_CC: {
4254     unsigned ExtOp = ISD::FP_EXTEND;
4255     if (NVT.isInteger()) {
4256       ISD::CondCode CCCode =
4257         cast<CondCodeSDNode>(Node->getOperand(1))->get();
4258       ExtOp = isSignedIntSetCC(CCCode) ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
4259     }
4260     Tmp1 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(2));
4261     Tmp2 = DAG.getNode(ExtOp, dl, NVT, Node->getOperand(3));
4262     Results.push_back(DAG.getNode(ISD::BR_CC, dl, Node->getValueType(0),
4263                                   Node->getOperand(0), Node->getOperand(1),
4264                                   Tmp1, Tmp2, Node->getOperand(4)));
4265     break;
4266   }
4267   case ISD::FADD:
4268   case ISD::FSUB:
4269   case ISD::FMUL:
4270   case ISD::FDIV:
4271   case ISD::FREM:
4272   case ISD::FMINNUM:
4273   case ISD::FMAXNUM:
4274   case ISD::FCOPYSIGN:
4275   case ISD::FPOW: {
4276     Tmp1 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(0));
4277     Tmp2 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(1));
4278     Tmp3 = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2);
4279     Results.push_back(DAG.getNode(ISD::FP_ROUND, dl, OVT,
4280                                   Tmp3, DAG.getIntPtrConstant(0, dl)));
4281     break;
4282   }
4283   case ISD::FMA: {
4284     Tmp1 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(0));
4285     Tmp2 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(1));
4286     Tmp3 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(2));
4287     Results.push_back(
4288         DAG.getNode(ISD::FP_ROUND, dl, OVT,
4289                     DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2, Tmp3),
4290                     DAG.getIntPtrConstant(0, dl)));
4291     break;
4292   }
4293   case ISD::FPOWI: {
4294     Tmp1 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(0));
4295     Tmp2 = Node->getOperand(1);
4296     Tmp3 = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2);
4297     Results.push_back(DAG.getNode(ISD::FP_ROUND, dl, OVT,
4298                                   Tmp3, DAG.getIntPtrConstant(0, dl)));
4299     break;
4300   }
4301   case ISD::FFLOOR:
4302   case ISD::FCEIL:
4303   case ISD::FRINT:
4304   case ISD::FNEARBYINT:
4305   case ISD::FROUND:
4306   case ISD::FTRUNC:
4307   case ISD::FNEG:
4308   case ISD::FSQRT:
4309   case ISD::FSIN:
4310   case ISD::FCOS:
4311   case ISD::FLOG:
4312   case ISD::FLOG2:
4313   case ISD::FLOG10:
4314   case ISD::FABS:
4315   case ISD::FEXP:
4316   case ISD::FEXP2: {
4317     Tmp1 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(0));
4318     Tmp2 = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1);
4319     Results.push_back(DAG.getNode(ISD::FP_ROUND, dl, OVT,
4320                                   Tmp2, DAG.getIntPtrConstant(0, dl)));
4321     break;
4322   }
4323   }
4324
4325   // Replace the original node with the legalized result.
4326   if (!Results.empty())
4327     ReplaceNode(Node, Results.data());
4328 }
4329
4330 /// This is the entry point for the file.
4331 void SelectionDAG::Legalize() {
4332   AssignTopologicalOrder();
4333
4334   SmallPtrSet<SDNode *, 16> LegalizedNodes;
4335   SelectionDAGLegalize Legalizer(*this, LegalizedNodes);
4336
4337   // Visit all the nodes. We start in topological order, so that we see
4338   // nodes with their original operands intact. Legalization can produce
4339   // new nodes which may themselves need to be legalized. Iterate until all
4340   // nodes have been legalized.
4341   for (;;) {
4342     bool AnyLegalized = false;
4343     for (auto NI = allnodes_end(); NI != allnodes_begin();) {
4344       --NI;
4345
4346       SDNode *N = NI;
4347       if (N->use_empty() && N != getRoot().getNode()) {
4348         ++NI;
4349         DeleteNode(N);
4350         continue;
4351       }
4352
4353       if (LegalizedNodes.insert(N).second) {
4354         AnyLegalized = true;
4355         Legalizer.LegalizeOp(N);
4356
4357         if (N->use_empty() && N != getRoot().getNode()) {
4358           ++NI;
4359           DeleteNode(N);
4360         }
4361       }
4362     }
4363     if (!AnyLegalized)
4364       break;
4365
4366   }
4367
4368   // Remove dead nodes now.
4369   RemoveDeadNodes();
4370 }
4371
4372 bool SelectionDAG::LegalizeOp(SDNode *N,
4373                               SmallSetVector<SDNode *, 16> &UpdatedNodes) {
4374   SmallPtrSet<SDNode *, 16> LegalizedNodes;
4375   SelectionDAGLegalize Legalizer(*this, LegalizedNodes, &UpdatedNodes);
4376
4377   // Directly insert the node in question, and legalize it. This will recurse
4378   // as needed through operands.
4379   LegalizedNodes.insert(N);
4380   Legalizer.LegalizeOp(N);
4381
4382   return LegalizedNodes.count(N);
4383 }