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